Очищение поля ИдФайл в УПД 5.03 для загрузки черновика в ЭДО

Мой оператор ЭДО Калуга-Астрал категорично заявил, что поле ИдФайл должно содержать идентификаторы участников документооборота или быть пустым. Иначе черновик не загрузить. Глупо, маразм, но что поделать. Приходится очищать поле ИдФайл.

Попытки просто установить пустую строку в ИдФайл не срабатывали (устанавливал в табло отладчика), т.к. в модуле ЭлектронныеДокументыЭДО вылетала ошибка из-за пустого Содержания (равно Неопределено):

Попробовал сделать подмену чисто для записи файла в модуле ФорматыЭДО_ФНС:

&Вместо("ДвоичныеДанныеОбъектаXDTO")
Функция двфвэдо_ДвоичныеДанныеОбъектаXDTO(Знач ОбъектXDTO, Знач Кодировка, Знач УказаниеТипа, Знач ЛокальноеИмя)
	//Осипов
	Если Лев(ОбъектXDTO.ИдФайл, 14) = "ON_NSCHFDOPPR_" Тогда
		ПредИдФайл = ОбъектXDTO.ИдФайл;
		ОбъектXDTO.ИдФайл = " "; //Очищаем
		Результат = ПродолжитьВызов(ОбъектXDTO, Кодировка, УказаниеТипа, ЛокальноеИмя);
		ОбъектXDTO.ИдФайл = ПредИдФайл;
	Иначе
		Результат = ПродолжитьВызов(ОбъектXDTO, Кодировка, УказаниеТипа, ЛокальноеИмя);
	КонецЕсли;
	Возврат Результат;
КонецФункции

Но опять содержание было не заполнено. Похоже, оно считывается из файла.

В итоге решил обрабатывать непосредственно текстовый файл. Как ни странно, он в кодировке «windows-1251», а не «utf-8».

Доработал свое расширение, которая корректно выгружает несколько УПД в файл. Расширяю метод ИнтерфейсДокументовЭДО.ПодготовитьДанныеДляЗаполненияДокументов:

&ИзменениеИКонтроль("ПодготовитьДанныеДляЗаполненияДокументов")
Функция оэдо_ПодготовитьДанныеДляЗаполненияДокументов(Параметры) Экспорт
	
	ТаблицаЭД = Новый ТаблицаЗначений;
	ТаблицаЭД.Колонки.Добавить("ПолноеИмяФайла");
	ТаблицаЭД.Колонки.Добавить("ИмяФайла");
	ТаблицаЭД.Колонки.Добавить("НаправлениеЭД");
	ТаблицаЭД.Колонки.Добавить("Контрагент");
	ТаблицаЭД.Колонки.Добавить("ДвоичныеДанныеПакета");
	ТаблицаЭД.Колонки.Добавить("ДвоичныеДанныеФайла");
	
	ОписанияОбъектовУчета = ИнтеграцияЭДО.ОписанияОбъектовУчета(Параметры.МассивСсылокНаОбъект);
	
	РезультатФормирования = ЭлектронныеДокументыЭДО.СформироватьДанныеДокументовДляВыгрузки(ОписанияОбъектовУчета);
	ДанныеДокументов = РезультатФормирования.ДанныеДокументов;
	ТекстОшибки = РезультатФормирования.ТекстОшибки;
	
	Для Каждого ДанныеДокумента Из ДанныеДокументов Цикл
		НоваяСтрока = ТаблицаЭД.Добавить();
		НоваяСтрока.НаправлениеЭД = Перечисления.НаправленияЭДО.Исходящий;
		НоваяСтрока.ДвоичныеДанныеФайла = ДанныеДокумента.ОписаниеДанных.ДвоичныеДанные;
		НоваяСтрока.Контрагент = ДанныеДокумента.Контрагент;
		
		ДанныеПакета = СинхронизацияЭДО.ДвоичныеДанныеТранспортногоКонтейнера(ДанныеДокумента);
#Вставка          
		Если Лев(ДанныеДокумента.ИдентификаторСообщения, 14) = "ON_NSCHFDOPPR_" Тогда
			ДанныеДокумента.ИдентификаторСтроки = 0;
			ДанныеПакета = СинхронизацияЭДО.ДвоичныеДанныеТранспортногоКонтейнера(ДанныеДокумента);   
			ДД = ДанныеДокумента.ОписаниеДанных.ДвоичныеДанные;
			ИмяВФ = ПолучитьИмяВременногоФайла("XML");
			ДД.Записать(ИмяВФ);
			Т = Новый ТекстовыйДокумент();
			Т.Прочитать(ИмяВФ,"windows-1251");
			Текст = Т.ПолучитьТекст();
			Поз1 = Найти(Текст, " ИдФайл=""");
			Если Поз1 <> 0 Тогда
				Голова = Сред(Текст, 1, Поз1 + 8);
				Хвост = Сред(Текст, Поз1 + 9);
				Поз2 = Найти(Хвост, """");
				Если Поз2 <> 0 Тогда
					Хвост = Сред(Хвост, Поз2);
				КонецЕсли;                   
				Текст = Голова + Хвост;
				Т.УстановитьТекст(Текст);
				Т.Записать(ИмяВФ,"windows-1251");
				ДД = Новый ДвоичныеДанные(ИмяВФ);
				ДанныеДокумента.ОписаниеДанных.ДвоичныеДанные = ДД;
			КонецЕсли;                       
			
		КонецЕсли;     

		//Переформировываем пакет
		ДанныеПакета = СинхронизацияЭДО.ДвоичныеДанныеТранспортногоКонтейнера(ДанныеДокумента);

#КонецВставки
		
		НоваяСтрока.ДвоичныеДанныеПакета = ДанныеПакета;
		НоваяСтрока.ПолноеИмяФайла = ДанныеДокумента.ОписаниеДанных.ИмяФайла;
		НоваяСтрока.ИмяФайла = ДанныеДокумента.ОписаниеДанных.ИмяФайла;			
	КонецЦикла;
	
	РезультатФормирования = Новый Структура("ТаблицаЭД, ТекстОшибки", ТаблицаЭД, ТекстОшибки);
	Возврат РезультатФормирования;
		
КонецФункции

Большая часть времени была потрачена на строковую функцию замены, нет под рукой готовой.

В итоге в отладчике увидел уже текст без ИдФайл:

Данные пакета надо обязательно обновлять, иначе файл будет старый.

Сделал контрольную выгрузку УПД в черновик в Астрал ЭДО, все прошло без проблем.

Час мучений — и результат достигнут. Можно выгружать УПД клиентам без проблем!

Среда: БП 3.0.173.31 Объем: 1.3 час

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *