При переходе с Бухгалтерии предприятия 2.0 на версию 3.0 многие пользователи Управление торговлей 10.3 сталкиваются с неприятной особенностью: в документах, прилетающих из торговой базы, поле Ответственный остается пустым. Это происходит даже в тех случаях, когда в старом обмене (с БП 2.0) всё работало корректно. Бухгалтерам становится сложно отслеживать авторов документов, что критично для исправления ошибок учета.
В этой статье мы подробно разберем, почему типовые правила обмена ведут себя именно так, и рассмотрим способы восстановления выгрузки ответственных лиц, используя инструменты разработчика и программную логику 1С.
Прежде чем приступать к правке кода, разберем ситуацию с точки зрения методологии разработчиков 1С. В современных версиях правил конвертации (использующих технологию КД 2.0) выгрузка реквизита Ответственный часто блокируется программно. Основная причина — защита информационной базы БП 3.0 от «замусоривания» справочника Пользователи.
В торговой базе (УТ 10.3) может работать огромное количество менеджеров, кладовщиков и операторов, которым вовсе не обязательно иметь учетные записи в бухгалтерской базе. При автоматическом создании пользователей через обмен могут возникнуть следующие сложности:
Однако, если ваша бизнес-логика требует видеть автора из УТ, перейдем к техническим решениям.
Рассмотрим основной способ исправления проблемы через конфигурацию Конвертация данных 2.0. Если вы просто «отжали» галочку выключения в ПКС (правилах конвертации свойств), но это не помогло, значит, срабатывает программный обработчик.
Проанализируем ПКС Ответственный для конкретного документа (например, РеализацияТоваровУслуг). Нам необходимо зайти в обработчик события "Перед выгрузкой". Часто в типовых правилах там можно встретить следующий код:
// Типовой код, блокирующий выгрузку
Отказ = Истина;
Или более сложная конструкция:
Если НастройкаОбменаДанными.НеВыгружатьОтветственных Тогда
Отказ = Истина;
КонецЕсли;
Чтобы восстановить выгрузку, необходимо закомментировать строку Отказ = Истина;. Однако помните, что для успешной загрузки в БП 3.0 система должна уметь сопоставлять пользователей. Разберем, как настроить поиск.
Даже если значение Ответственный выгружается в XML-пакет, при загрузке в БП 3.0 оно может не проставиться, если система не нашла соответствующий объект. Посмотрим на алгоритм настройки поиска в ПКО (правилах конвертации объектов) для справочника Пользователи:
Пользователи.Наименование. В ПКС Наименование установите флаг "Поиск".Пользователи в обработчике "При загрузке" можно прописать условие, которое будет пропускать создание объекта, если он не найден по поиску.В конфигурациях на управляемых формах (БП 3.0) часто сосуществуют два реквизита: Ответственный (тот, кто отвечает за документ в текущей базе) и Автор (тот, кто первым создал документ). Рассмотрим вариант переноса данных из УТ 10.3 не в Ответственный, а в дополнительный реквизит или поле Автор.
Для этого в правилах обмена (КД 2.0) создадим новое ПКС, где источником будет Ответственный (УТ), а приемником — Автор (БП). Это позволит сохранить оригинального создателя, не конфликтуя с типовой логикой заполнения ответственного бухгалтера при проведении документа в БП.
Проанализируем пример кода для заполнения значения по умолчанию, если автор не передан:
// Обработчик ПриЗагрузке в БП
Если Объект.Ответственный.Пустая() Тогда
Объект.Ответственный = ПараметрыОбъекта.ИмяПользователяПоУмолчанию;
КонецЕсли;
Если вы не хотите менять правила конвертации в УТ 10.3 (например, из-за их частого обновления), можно применить механизм расширений в БП 3.0. Посмотрим, как это работает:
Мы можем перехватить процедуру загрузки данных. Несмотря на то, что в правилах стоит Отказ = Истина, данные могут передаваться в ПараметрыОбъекта, если это настроено. Либо мы можем передавать имя пользователя строкой через ДополнительныеСвойства.
Рассмотрим программный пример в расширении для БП 3.0:
&После("ВыполнитьДействияПослеЗагрузкиОбъекта")
Процедура Ист_ВыполнитьДействияПослеЗагрузкиОбъекта(Объект, ПараметрыЗагрузки)
// Проверяем, является ли объект документом
Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект)) Тогда
// Пытаемся найти пользователя по имени, пришедшему в комментарии или спец. поле
Если Объект.Ответственный.Пустая() Тогда
// Логика поиска и заполнения
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Обратите внимание на сообщение форума о версии УТ 10.3.50.2. В некоторых релизах 1С выпускает исправления правил обмена в составе конфигурации. Прежде чем приступать к глубокой кастомизации, рекомендуем выполнить следующие действия:
НастройкаОбменаДанными или макет ПравилаОбмена).Ответственный.Подведем итог: Основная сложность заключается не в том, чтобы «включить галочку», а в том, чтобы обойти программный запрет Отказ = Истина внутри самих правил и настроить корректное сопоставление справочника пользователей. Проанализировав структуру ПКС и настроив поиск по наименованию или GUID, вы добьетесь корректного заполнения поля Ответственный и обеспечите прозрачность учета для сотрудников бухгалтерии.