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