При синхронизации данных между конфигурациями «1С:Управление торговлей 11.4» и «1С:Бухгалтерия предприятия 3.0» пользователи часто сталкиваются с аварийным завершением обмена. Типичная ситуация: в текущем периоде появился документ Корректировочный счет-фактура выданный, созданный на основании возврата от клиента. При попытке выгрузки система выдает ошибку: «Неверный второй параметр Реквизиты: - Поле объекта "Руководитель" не найдено». Давайте подробно разберем причины этой проблемы и способы ее решения.
Проанализируем ситуацию: согласно изменениям в законодательстве, возврат товаров от покупателя теперь оформляется не «обратной реализацией», а корректировочным счетом-фактурой от продавца. В программном коде типовых правил обмена (использующих формат EnterpriseData) прописан алгоритм заполнения данных о подписантах (руководителе и главном бухгалтере). Проблема заключается в том, что при подготовке данных к отправке система обращается к Документу-основанию корректировочного счета-фактуры.
Если основанием является Реализация товаров и услуг, то реквизиты ответственных лиц там присутствуют. Однако, если основанием выступает Возврат товаров от клиента или Отчет комитенту, структура метаданных этих документов в УТ 11 может не содержать полей Руководитель и ГлавныйБухгалтер в явном виде. Механизм обмена пытается программно прочитать эти значения через функцию ОбщегоНазначения.ЗначениеРеквизитаОбъекта, и, не находя их, вызывает исключение, которое прерывает весь процесс синхронизации.
Выясним, где именно происходит сбой. В конфигурации «Управление торговлей» вся логика выгрузки по универсальному формату сосредоточена в общем модуле МенеджерОбменаЧерезУниверсальныйФормат. Нам необходимо найти процедуру, отвечающую за отправку данных корректировочного счета-фактуры:
ПКО_Документ_СчетФактураВыданный_Отправка_ПриОтправкеДанных
В этой процедуре происходит обращение к реквизитам документа-основания без предварительной проверки их наличия в метаданных конкретного типа объекта. Именно этот участок кода мы будем модифицировать.
Для сохранения поддержки конфигурации и корректного обновления в будущем, рекомендуем использовать механизм расширений. Создадим расширение и добавим в него процедуру-обработчик с типом вызова &Вместо или &ИзменениеИВхода. Наша задача — «обернуть» обращение к реквизитам в проверку их существования.
Рассмотрим пример исправленного кода, который необходимо внедрить в модуль менеджера обмена:
// В процедуре ПКО_Документ_СчетФактураВыданный_Отправка_ПриОтправкеДанных
МетаданныеДокОснования = ДанныеИБ.ДокументОснование.Метаданные;
// Проверяем наличие и заполняем данные руководителя
Если ОбщегоНазначения.ЕстьРеквизитОбъекта("Руководитель", МетаданныеДокОснования) Тогда
Руководитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеИБ.ДокументОснование, "Руководитель");
Если ЗначениеЗаполнено(Руководитель) Тогда
ДанныеXDTO.Вставить("Руководитель", Руководитель.ФизическоеЛицо);
КонецЕсли;
КонецЕсли;
// Проверяем наличие и заполняем данные главного бухгалтера
Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ГлавныйБухгалтер", МетаданныеДокОснования) Тогда
ГлавныйБухгалтер = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеИБ.ДокументОснование, "ГлавныйБухгалтер");
Если ЗначениеЗаполнено(ГлавныйБухгалтер) Тогда
ДанныеXDTO.Вставить("ГлавныйБухгалтер", ГлавныйБухгалтер.ФизическоеЛицо);
КонецЕсли;
КонецЕсли;
Важный нюанс: при создании расширения обязательно снимите флаг «Безопасный режим» в свойствах расширения. В противном случае код, обращающийся к метаданным и общим модулям обмена, может не выполниться из-за ограничений прав доступа в контексте сервера.
Даже если выгрузка прошла успешно, вы можете заметить, что в «1С:Бухгалтерии» корректировочный счет-фактура не проводится автоматически. Причиной часто является отсутствие связи с исходным (основным) счетом-фактурой. В некоторых версиях формата EnterpriseData (например, 1.7) в объекте Документ.СчетФактураВыданный могут отсутствовать свойства ДатаИсходногоДокумента и НомерИсходногоДокумента.
Для решения этой проблемы проанализируем XDTO-пакеты в обеих базах. Если в схеме EnterpriseData_1_x_xx отсутствуют эти поля, документ в БП 3.0 создается с пустой табличной частью оснований. В таком случае у вас есть два пути:
Если после внесения правок ошибка сохраняется, воспользуемся отладчиком. Помните, что обмен данными чаще всего выполняется в фоновом задании. Чтобы точка останова сработала, выполните следующие действия:
Посмотрим на результат выполнения функции ОбщегоНазначения.ЗначениеРеквизитаОбъекта. Если документ-основание — это Возврат товаров от клиента, убедитесь, что в нем заполнены ответственные лица на вкладке «Дополнительно». Если они не заполнены в УТ, они не попадут в БП, и документ может не провестись из-за отсутствия обязательных подписей.
Резюме: Данная ошибка была признана разработчиками 1С и исправлена в более поздних релизах (начиная с 11.4.7/2.4.7). Если вы работаете на более ранних версиях и не имеете возможности оперативно обновиться, использование описанного выше расширения с проверкой ЕстьРеквизитОбъекта является наиболее эффективным и безопасным способом восстановления работоспособности обмена.