Ошибка в типовой обработке "Универсальный обмен данными в формате XML"

29.08.23

База данных - Обновление 1С

Исправление ошибки в типовой обработке "Универсальный обмен данными в формате XML".

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Бесплатно
Ошибка в типовой обработке "Универсальный обмен данными в формате XML":
.cfe 26,33Kb
34
34 Скачать бесплатно

При обновлении на актуальный релиз типовой конфигурации "Зарплата и управление персоналом (3.1.27.51)" от 16.08.2023 была обнаружена ошибка в обработке  "Универсальный обмен данными в формате XML"

"errors": 
["{Обработка.УниверсальныйОбменДаннымиXML.Форма.УправляемаяФорма.Форма(1539)}: Ошибка при вызове конструктора (ДвоичныеДанные)",

"Файл не обнаружен 'C:\Users\USR1CV8\AppData\Local\Temp\v8_3F23_19e.xml'"]

Ошибка возникала при попытке загрузить данные через прямое подключение к базе. В саму новую обработку внесено много изменений, в частности переделана логика функции ВыполнитьВыгрузкуНаСервере(). Рассмотрим подробнее конструкцию, которая вызывает ошибку. Это код из обновленной обработки:

АдресФайлаДанных = "";
АдресФайлаДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ОбъектДляСервера.ИмяФайлаОбмена), УникальныйИдентификатор);
УдалитьФайлы(ОбъектДляСервера.ИмяФайлаОбмена);
УдалитьФайлы(ОбъектДляСервера.ИмяФайлаПравилОбмена);
			
ОбъектДляСервера.Параметры.Очистить();
ЗначениеВРеквизитФормы(ОбъектДляСервера, "Объект");

А таким он был до изменений:

Если ЭтоКлиент И Не ПрямаяВыгрузка Тогда		
    АдресФайлаДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Объект.ИмяФайлаОбмена), УникальныйИдентификатор);
    УдалитьФайлы(Объект.ИмяФайлаОбмена);		
Иначе		
    АдресФайлаДанных = "";		
КонецЕсли;
	
Если ЭтоКлиент Тогда		
    УдалитьФайлы(ОбъектДляСервера.ИмяФайлаПравилОбмена);		
КонецЕсли;

Как видно в старой обработке установлены проверки по двум реквизитам:

1) ЭтоКлиент - Реквизит формы, Булевое значение, определяется дерективой компилятора веб-клиент это или нет. В обновленной форме этот реквизит вообще убрали.

2) ПрямаяВыгрузка - Так же реквизит формы. Показывает какой тип выгрузки мы используем, через файл обмена (Значение - "0") или через прямое подключение (Значение - "1").

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

Мой пример кода с исправлениями:

Если ПрямаяВыгрузка Тогда
    АдресФайлаДанных = "";
Иначе  
    АдресФайлаДанных = "";
    АдресФайлаДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ОбъектДляСервера.ИмяФайлаОбмена), УникальныйИдентификатор);
    УдалитьФайлы(ОбъектДляСервера.ИмяФайлаОбмена);
    УдалитьФайлы(ОбъектДляСервера.ИмяФайлаПравилОбмена);
			
    ОбъектДляСервера.Параметры.Очистить();
    ЗначениеВРеквизитФормы(ОбъектДляСервера, "Объект");
КонецЕсли;

Надеюсь, кому-то поможет.

См. также

Обновление 1С Программист Платформа 1С v8.3 1С:ERP. Управление холдингом Абонемент ($m)

Описан практический пример обновления через копию конфигурации 1С:ERP. Управление холдингом с версии 3.2.6.6 на версию 3.2.6.7, который можно применять на других конфигурациях и версиях.

10 стартмани

18.02.2025    353    PetrovAnton    2    

2

Обновление 1С Программист Платформа 1С v8.3 Абонемент ($m)

Отчет о сравнении конфигураций представляет собой обширный массив информации. Однако у него есть значительное ограничение: его невозможно настраивать, например, добавлять различные группировки, фильтры или сортировку данных. Тем не менее, если преобразовать этот отчет в таблицу и использовать её в качестве источника данных, это открывает возможность для создания универсального отчета с использованием группировок, отборов и сортировки

10 стартмани

18.02.2025    419    1    kalyaka    0    

5

Обновление 1С Программист Платформа 1С v8.3 Абонемент ($m)

При длительном обновлении из конфигуратора следим за процентом загрузки ПК и отправляем письмо на почту при завершении.

1 стартмани

17.02.2025    192    0    slavik27    0    

3

Обновление 1С Запросы Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

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

2 стартмани

06.02.2025    1550    8    XilDen    24    

35

Групповая разработка (Git, хранилище) Обновление 1С Программист Платформа 1С v8.3 Россия Бесплатно (free)

Внедряем проверку новых версий прямо в расширение. Оповещайте о новых версиях и показывайте пользователям список изменений. Для разработчиков, которые хотят сэкономить время и повысить лояльность клиентов!

05.02.2025    1236    Nonik    10    

17

Обновление 1С Программист Бухгалтер Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Бухгалтерский учет НДС Абонемент ($m)

Обновление для конфигурации Управление торговлей 10.3.88.3 добавляет поддержку ставок НДС 5% и 7%, обеспечивает корректную печать этих ставок на актуальных моделях торгового оборудования (АТОЛ, ШТРИХ, ревизия 4004), содержит актуальные правила обмена с конфигурацией "Бухгалтерия предприятия 3.0" для передачи новых ставок. Новые ставки НДС поддерживается в печатных формах УПД, ТТН и т.д. В состав дистрибутива включены обработки для обслуживания торгового оборудования ККТ нового формата (Штрих-М и АТОЛ)

5 стартмани

31.01.2025    1886    30    karpik666    28    

22
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Serg2000mr 770 05.02.25 12:17 Сейчас в теме
Нужно еще добавить проверку на существование файла, иначе при ошибке выгрузки выдаст сообщение, что файл не найден

Если ПрямаяВыгрузка Тогда
		АдресФайлаДанных = "";
	Иначе  
		АдресФайлаДанных = "";
		Файл = Новый Файл(ОбъектДляСервера.ИмяФайлаОбмена);  // проверка
		Если Файл.Существует() Тогда                           // проверка 
			АдресФайлаДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ОбъектДляСервера.ИмяФайлаОбмена), УникальныйИдентификатор);
		КонецЕсли;
		
		УдалитьФайлы(ОбъектДляСервера.ИмяФайлаОбмена);
		УдалитьФайлы(ОбъектДляСервера.ИмяФайлаПравилОбмена);
			
		ОбъектДляСервера.Параметры.Очистить();
		ЗначениеВРеквизитФормы(ОбъектДляСервера, "Объект");
	КонецЕсли;
Показать
2. Serg2000mr 770 06.02.25 06:49 Сейчас в теме
УдалитьФайлы(ОбъектДляСервера.ИмяФайлаОбмена); - если установлен Режим работы (на сервере), и клиент и сервер на одно компьютере, то это приведет к удалению только что выгруженного файла обмена

Правильно так:
	Если ПрямаяВыгрузка Тогда
		АдресФайлаДанных = "";
	Иначе  
		АдресФайлаДанных = "";
		Файл = Новый Файл(ОбъектДляСервера.ИмяФайлаОбмена);
		Если Файл.Существует() Тогда
			АдресФайлаДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ОбъектДляСервера.ИмяФайлаОбмена), УникальныйИдентификатор);
		КонецЕсли;
		
		Если ЭтоКлиент Тогда // проверка
			УдалитьФайлы(ОбъектДляСервера.ИмяФайлаОбмена);
			УдалитьФайлы(ОбъектДляСервера.ИмяФайлаПравилОбмена);
		КонецЕсли;
			
		ОбъектДляСервера.Параметры.Очистить();
		ЗначениеВРеквизитФормы(ОбъектДляСервера, "Объект");
	КонецЕсли;
Показать
Оставьте свое сообщение