1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2024-12-30 21:19:59 +02:00

оптимизация нумерации

This commit is contained in:
Maximov Valery 2022-11-26 09:02:20 +03:00
parent 4129d90c16
commit 5792c0bc2b

View File

@ -61,7 +61,7 @@
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
ПаттернID = ?(EDT, "<id>([0-9-]+)<\/id>", "id=\""([0-9-]+)\""\/*>");
ПаттернID = ?(EDT, "<id>([0-9]+)<\/id>", "id=\""([0-9]+)\""\/*>");
Регексп = Новый РегулярноеВыражение(ПаттернID);
Регексп.ИгнорироватьРегистр = ИСТИНА;
@ -100,6 +100,16 @@
ТЧ.Сортировать("Значение УБЫВ");
ПоследнийНомер = ТЧ[0].Значение;
ТЧ.Сортировать("Количество УБЫВ");
Если ТЧ[0].Количество = 1 Тогда
Возврат Истина;
Иначе
СвободныеИдентификаторы = ВычислитьСвободныеИдентификаторы(ТЧ);
КонецЕсли;
Для каждого СтрокаТЧ Из ТЧ Цикл
Если СтрокаТЧ.Количество = 1 Тогда
@ -111,8 +121,8 @@
Пока СтрокаТЧ.Количество > 1 Цикл
ИсходнаяСтрока = ?(EDT, "<id>" + СтрокаТЧ.Значение + "<", "id=""" + СтрокаТЧ.Значение + """");
ПоследнийНомер = ПоследнийНомер + 1;
СтрокаЗамены = ?(EDT, "<id>" + ПоследнийНомер + "<", "id=""" + ПоследнийНомер + """");
СвободныйИдентификатор = ПолучитьСвободныйИдентификатор(СвободныеИдентификаторы, ПоследнийНомер);
СтрокаЗамены = ?(EDT, "<id>" + СвободныйИдентификатор + "<", "id=""" + СвободныйИдентификатор + """");
Поз = СтрНайти(СодержимоеФайла, ИсходнаяСтрока);
@ -129,4 +139,33 @@
Возврат Истина;
КонецФункции
КонецФункции
Функция ВычислитьСвободныеИдентификаторы(ТЧ)
СписокЗначений = Новый СписокЗначений();
СписокЗначений.ЗагрузитьЗначения(ТЧ.ВыгрузитьКолонку("Значение"));
СписокЗначений.СортироватьПоЗначению();
СвободныеИдентификаторы = Новый Массив;
Для Ит = 0 По СписокЗначений.Количество() - 2 Цикл
Если СписокЗначений[Ит].Значение = СписокЗначений[Ит + 1].Значение Тогда
Продолжить;
КонецЕсли;
Для Ид = СписокЗначений[Ит].Значение + 1 По СписокЗначений[Ит + 1].Значение - 1 Цикл
СвободныеИдентификаторы.Добавить(Ид);
КонецЦикла;
КонецЦикла;
Возврат СвободныеИдентификаторы;
КонецФункции
Функция ПолучитьСвободныйИдентификатор(СвободныеИдентификаторы, ПоследнийНомер)
Если СвободныеИдентификаторы.Количество() Тогда
СвободныйИдентификатор = СвободныеИдентификаторы[0];
СвободныеИдентификаторы.Удалить(0);
Возврат СвободныйИдентификатор;
Иначе
ПоследнийНомер = ПоследнийНомер + 1;
Возврат ПоследнийНомер;
КонецЕсли;
КонецФункции