Проблема: при формировании XML-файла в каких-то тегах внутри файла стоит пустое значение (""), а нужно, чтобы там был ноль ("0").
Например, здесь это теги
ОбщКолДог, КолПровДог, ОбщКолПУДок, КолПровПУДок, ОбщКолОпер, КолПровОпер
<РезКП КодКП="НМ.ACC.07" НаимКП="Согласование проектов договоров" КолКПОтч="3" КолКПОшиб="0" КолКПНеОшиб="3" ОбщКолДог="" КолПровДог="" ОбщКолПУДок="" КолПровПУДок="" ОбщКолОпер="" КолПровОпер=""/>
А должно быть так:
<РезКП КодКП="НМ.ACC.07" НаимКП="Согласование проектов договоров" КолКПОтч="3" КолКПОшиб="0" КолКПНеОшиб="3" ОбщКолДог="0" КолПровДог="0" ОбщКолПУДок="0" КолПровПУДок="0" ОбщКолОпер="0" КолПровОпер="0"/>
Вот текст функции, которая принимает:
текст целиком;
уникальную строку, по которой можно определить начало текстового блока, внутри которого будет присходить замена;
строку-признак окончания текстового блока, в нашем случае это закрывающий тег;
строку, которую нужно найти внутри нашего текстового блока;
строку, НА которую необходимо заменить ранее в предыдущем пункте подстроки;
Функция ДоработатьТекстВыгружаемогоФайла(ТекстФайла, НачалоСтрокиЗамены, КонецСтрокиЗамены, ЧтоЗаменять, НаЧтоЗаменять)
НачалоСтроки = СтрНайти(ТекстФайла, НачалоСтрокиЗамены);
КонецСтроки = СтрНайти(ТекстФайла,КонецСтрокиЗамены,,НачалоСтроки)+СтрДлина(КонецСтрокиЗамены);
Строка = Сред(ТекстФайла,НачалоСтроки,КонецСтроки-НачалоСтроки+1);
ЧастьФайлаДо = Лев(ТекстФайла,НачалоСтроки-1);
ЧастьФайлаПосле = Прав(ТекстФайла,СтрДлина(ТекстФайла)-КонецСтроки);
СтрокаПослеЗамены = СтрЗаменить(Строка,ЧтоЗаменять,НаЧтоЗаменять);
Возврат ЧастьФайлаДо+СтрокаПослеЗамены+ЧастьФайлаПосле;
КонецФункции
Пример использования в расширяемом модуле:
&ИзменениеИКонтроль("ВыгрузитьДокумент")
Функция НМ_ВыгрузитьДокумент(УникальныйИдентификатор)
Результат = Неопределено;
Попытка
УстановитьПривилегированныйРежим(Истина);
СодержаниеВыгрузки = ЭлектронноеПредставление(УникальныйИдентификатор);
Если СодержаниеВыгрузки = Неопределено Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = НСтр("ru = 'Выгрузка данного уведомления не предусмотрена'");
Сообщение.Сообщить();
Возврат Неопределено;
КонецЕсли;
Для Каждого ЭлементВыгрузки Из СодержаниеВыгрузки Цикл
Если Результат = Неопределено Тогда
Результат = Новый Массив;
КонецЕсли;
Если ЗначениеЗаполнено(ЭлементВыгрузки.ТекстФайла) Тогда
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
СохраняемыйФайл = Новый ТекстовыйДокумент;
#Вставка
ЭлементВыгрузки.ТекстФайла = ДоработатьТекстВыгружаемогоФайла(ЭлементВыгрузки.ТекстФайла,"<РезКП КодКП=""НМ.ACC.02""","/>","=""""","=""0""");
ЭлементВыгрузки.ТекстФайла = ДоработатьТекстВыгружаемогоФайла(ЭлементВыгрузки.ТекстФайла,"<РезКП КодКП=""НМ.ACC.03""","/>","=""""","=""0""");
ЭлементВыгрузки.ТекстФайла = ДоработатьТекстВыгружаемогоФайла(ЭлементВыгрузки.ТекстФайла,"<РезКП КодКП=""НМ.ACC.05""","/>","=""""","=""0""");
ЭлементВыгрузки.ТекстФайла = ДоработатьТекстВыгружаемогоФайла(ЭлементВыгрузки.ТекстФайла,"<РезКП КодКП=""НМ.ACC.06""","/>","=""""","=""0""");
ЭлементВыгрузки.ТекстФайла = ДоработатьТекстВыгружаемогоФайла(ЭлементВыгрузки.ТекстФайла,"<РезКП КодКП=""НМ.ACC.07""","/>","=""""","=""0""");
#КонецВставки
СохраняемыйФайл.УстановитьТекст(ЭлементВыгрузки.ТекстФайла);
СохраняемыйФайл.Записать(ИмяВременногоФайла, ЭлементВыгрузки.КодировкаТекста);
ФайлВыгрузки = Новый ДвоичныеДанные(ИмяВременногоФайла);
Если УникальныйИдентификатор <> Неопределено Тогда
СсылкаНаДвоичныеДанныеФайла = ПоместитьВоВременноеХранилище(ФайлВыгрузки, УникальныйИдентификатор);
Иначе
СсылкаНаДвоичныеДанныеФайла = ПоместитьВоВременноеХранилище(ФайлВыгрузки);
КонецЕсли;
УдалитьФайлы(ИмяВременногоФайла);
СтруктураВыгрузки = Новый Структура;
СтруктураВыгрузки.Вставить("АдресФайлаВыгрузки", СсылкаНаДвоичныеДанныеФайла);
СтруктураВыгрузки.Вставить("ИмяФайлаВыгрузки", ЭлементВыгрузки.ИмяФайла);
СтруктураВыгрузки.Вставить("ТестВыгрузки", ЭлементВыгрузки.ТекстФайла);
СтруктураВыгрузки.Вставить("КодировкаВыгрузки", ЭлементВыгрузки.КодировкаТекста);
Результат.Добавить(СтруктураВыгрузки);
ИначеЕсли СодержаниеВыгрузки.Колонки.Найти("ДвоичныеДанныеФайла") <> Неопределено Тогда
СтруктураВыгрузки = Новый Структура;
СтруктураВыгрузки.Вставить("АдресФайлаВыгрузки", ПоместитьВоВременноеХранилище(ЭлементВыгрузки.ДвоичныеДанныеФайла));
СтруктураВыгрузки.Вставить("ИмяФайлаВыгрузки", ЭлементВыгрузки.ИмяФайла);
СтруктураВыгрузки.Вставить("ТестВыгрузки", "");
СтруктураВыгрузки.Вставить("КодировкаВыгрузки", "");
Результат.Добавить(СтруктураВыгрузки);
КонецЕсли;
КонецЦикла;
Возврат Результат;
Исключение
Возврат Неопределено;
КонецПопытки;
КонецФункции
Функция ДоработатьТекстВыгружаемогоФайла(ТекстФайла, НачалоСтрокиЗамены, КонецСтрокиЗамены, ЧтоЗаменять, НаЧтоЗаменять)
НачалоСтроки = СтрНайти(ТекстФайла, НачалоСтрокиЗамены);
КонецСтроки = СтрНайти(ТекстФайла,КонецСтрокиЗамены,,НачалоСтроки)+СтрДлина(КонецСтрокиЗамены);
Строка = Сред(ТекстФайла,НачалоСтроки,КонецСтроки-НачалоСтроки+1);
ЧастьФайлаДо = Лев(ТекстФайла,НачалоСтроки-1);
ЧастьФайлаПосле = Прав(ТекстФайла,СтрДлина(ТекстФайла)-КонецСтроки);
СтрокаПослеЗамены = СтрЗаменить(Строка,ЧтоЗаменять,НаЧтоЗаменять);
Возврат ЧастьФайлаДо+СтрокаПослеЗамены+ЧастьФайлаПосле;
КонецФункции