Почему в документах не выгружается реквизит Ответственный при обмене из УТ 10.3 в БП 3.0?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет IT и автоматизация бизнеса
← На главную

При переходе с Бухгалтерии предприятия 2.0 на версию 3.0 многие пользователи Управление торговлей 10.3 сталкиваются с неприятной особенностью: в документах, прилетающих из торговой базы, поле Ответственный остается пустым. Это происходит даже в тех случаях, когда в старом обмене (с БП 2.0) всё работало корректно. Бухгалтерам становится сложно отслеживать авторов документов, что критично для исправления ошибок учета.

В этой статье мы подробно разберем, почему типовые правила обмена ведут себя именно так, и рассмотрим способы восстановления выгрузки ответственных лиц, используя инструменты разработчика и программную логику 1С.

Выясняем причину: почему 1С отключает выгрузку ответственных

Прежде чем приступать к правке кода, разберем ситуацию с точки зрения методологии разработчиков 1С. В современных версиях правил конвертации (использующих технологию КД 2.0) выгрузка реквизита Ответственный часто блокируется программно. Основная причина — защита информационной базы БП 3.0 от «замусоривания» справочника Пользователи.

В торговой базе (УТ 10.3) может работать огромное количество менеджеров, кладовщиков и операторов, которым вовсе не обязательно иметь учетные записи в бухгалтерской базе. При автоматическом создании пользователей через обмен могут возникнуть следующие сложности:

Однако, если ваша бизнес-логика требует видеть автора из УТ, перейдем к техническим решениям.

Решение 1: Анализ программного кода в правилах конвертации (КД 2.0)

Рассмотрим основной способ исправления проблемы через конфигурацию Конвертация данных 2.0. Если вы просто «отжали» галочку выключения в ПКС (правилах конвертации свойств), но это не помогло, значит, срабатывает программный обработчик.

Проанализируем ПКС Ответственный для конкретного документа (например, РеализацияТоваровУслуг). Нам необходимо зайти в обработчик события "Перед выгрузкой". Часто в типовых правилах там можно встретить следующий код:


// Типовой код, блокирующий выгрузку
Отказ = Истина;

Или более сложная конструкция:


Если НастройкаОбменаДанными.НеВыгружатьОтветственных Тогда
    Отказ = Истина;
КонецЕсли;

Чтобы восстановить выгрузку, необходимо закомментировать строку Отказ = Истина;. Однако помните, что для успешной загрузки в БП 3.0 система должна уметь сопоставлять пользователей. Разберем, как настроить поиск.

Решение 2: Настройка поиска и синхронизации справочника Пользователи

Даже если значение Ответственный выгружается в XML-пакет, при загрузке в БП 3.0 оно может не проставиться, если система не нашла соответствующий объект. Посмотрим на алгоритм настройки поиска в ПКО (правилах конвертации объектов) для справочника Пользователи:

  1. Синхронизация по GUID: Это самый надежный метод. Если база БП 3.0 была получена обновлением из БП 2.0, в которую ранее выгружались пользователи из УТ, то уникальные идентификаторы (GUID) должны совпадать. Проверьте, стоит ли галочка "Поиск по уникальному идентификатору" в ПКО Пользователи.
  2. Синхронизация по наименованию: Если GUID-ы разные, настройте поиск по полю Наименование. В ПКС Наименование установите флаг "Поиск".
  3. Предотвращение создания новых: Если вы не хотите, чтобы обмен создавал новых пользователей в БП, в ПКО Пользователи в обработчике "При загрузке" можно прописать условие, которое будет пропускать создание объекта, если он не найден по поиску.

Решение 3: Разделение понятий Ответственный и Автор

В конфигурациях на управляемых формах (БП 3.0) часто сосуществуют два реквизита: Ответственный (тот, кто отвечает за документ в текущей базе) и Автор (тот, кто первым создал документ). Рассмотрим вариант переноса данных из УТ 10.3 не в Ответственный, а в дополнительный реквизит или поле Автор.

Для этого в правилах обмена (КД 2.0) создадим новое ПКС, где источником будет Ответственный (УТ), а приемником — Автор (БП). Это позволит сохранить оригинального создателя, не конфликтуя с типовой логикой заполнения ответственного бухгалтера при проведении документа в БП.

Проанализируем пример кода для заполнения значения по умолчанию, если автор не передан:


// Обработчик ПриЗагрузке в БП
Если Объект.Ответственный.Пустая() Тогда
    Объект.Ответственный = ПараметрыОбъекта.ИмяПользователяПоУмолчанию;
КонецЕсли;

Решение 4: Использование расширений в БП 3.0 (без изменения правил)

Если вы не хотите менять правила конвертации в УТ 10.3 (например, из-за их частого обновления), можно применить механизм расширений в БП 3.0. Посмотрим, как это работает:

Мы можем перехватить процедуру загрузки данных. Несмотря на то, что в правилах стоит Отказ = Истина, данные могут передаваться в ПараметрыОбъекта, если это настроено. Либо мы можем передавать имя пользователя строкой через ДополнительныеСвойства.

Рассмотрим программный пример в расширении для БП 3.0:


&После("ВыполнитьДействияПослеЗагрузкиОбъекта")
Процедура Ист_ВыполнитьДействияПослеЗагрузкиОбъекта(Объект, ПараметрыЗагрузки)
    // Проверяем, является ли объект документом
    Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект)) Тогда
        // Пытаемся найти пользователя по имени, пришедшему в комментарии или спец. поле
        Если Объект.Ответственный.Пустая() Тогда
             // Логика поиска и заполнения
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Важное замечание по версиям конфигураций

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

Подведем итог: Основная сложность заключается не в том, чтобы «включить галочку», а в том, чтобы обойти программный запрет Отказ = Истина внутри самих правил и настроить корректное сопоставление справочника пользователей. Проанализировав структуру ПКС и настроив поиск по наименованию или GUID, вы добьетесь корректного заполнения поля Ответственный и обеспечите прозрачность учета для сотрудников бухгалтерии.

← На главную