Почему изменяется хозяйственная операция в УТ после синхронизации с БП и как это исправить?

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

При настройке двустороннего обмена данными между конфигурациями «1С:Управление торговлей» (УТ 11) и «1С:Бухгалтерия предприятия» (БП 3.0) пользователи часто сталкиваются с неприятным поведением системы. Бухгалтер вносит незначительные изменения в документ поступления на стороне БП (например, корректирует способ зачета авансов в договоре или меняет входящий номер накладной), а после очередной синхронизации в УТ у этого документа автоматически меняется хозяйственная операция (например, сбрасывается на «Импорт» или «Закупка у поставщика»).

В этой статье мы подробно разберем, почему возникает данная проблема с точки зрения архитектуры платформы «1С:Предприятие 8», и рассмотрим несколько практических вариантов ее решения — от изменения административных регламентов до программной доработки системы.

---

Глубинная причина проблемы: технический аспект асимметрии данных

Основная причина изменения хозяйственной операции кроется в логике работы универсального формата обмена EnterpriseData, реализованного через общий модуль МенеджерОбменаЧерезУниверсальныйФормат. Здесь срабатывают два ключевых фактора:

  1. Несимметричность метаданных и свертка аналитики. В УТ 11 документ ПриобретениеТоваровУслуг имеет детальное разделение по хозяйственным операциям (например: Закупка у поставщика, Импорт, Ввоз из ЕАЭС, Закупка через подотчетника). В БП 3.0 этот документ конвертируется в более простой вид — Поступление (акт, накладная, УПД). В бухгалтерской программе нет столь глубокого деления хоз. операций, из-за чего при выгрузке из УТ в БП происходит свертка данных «многие-к-одному». Когда бухгалтер меняет что-либо в БП, измененный документ регистрируется к обмену. При обратной загрузке в УТ алгоритмы импорта пытаются «восстановить» хоз. операцию по косвенным признакам, так как в БП этой информации изначально не было. Система часто подставляет значение по умолчанию, которое не совпадает с исходным.
  2. Зависимость от Договора и реквизитов Контрагента. Часто первопричиной изменения хоз. операции в УТ становится синхронизация справочника договоров. Если на стороне БП договор поставки имеет признак валюты расчетов или признак импортной сделки, и бухгалтер меняет его реквизиты, этот договор регистрируется к обмену и выгружается в УТ. При импорте договора в УТ срабатывает встроенный алгоритм определения «Цели договора» (например, если поставщик является нерезидентом или валюта расчетов — иностранная, цель автоматически перезаписывается на Закупка (импорт)). После перезаписи договора документ приобретения, ссылающийся на него, при обновлении из БП сверяет свою хоз. операцию с целью договора в УТ и принудительно меняет её на «Импорт».

Разберем подробнее варианты решения этой проблемы, начиная с организационных и заканчивая техническими решениями.

---

Вариант 1. Методологический переход на односторонний обмен (Рекомендуемый)

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

Часто препятствием для этого становится необходимость загрузки банковских выписок. Бухгалтеры привыкли загружать банк напрямую в БП и затем перегружать платежные документы в УТ через двусторонний обмен. Рассмотрим аргументы, которые помогут убедить бухгалтера изменить этот подход и загружать банк напрямую в УТ:

После переноса загрузки банка в УТ обмен можно безболезненно перевести в односторонний режим (только выгрузка из УТ в БП).

---

Вариант 2. Настройка Правил регистрации объектов (ПРО) без изменения кода

Если полностью отказаться от двустороннего обмена невозможно, мы можем настроить правила регистрации так, чтобы документы поступления из БП никогда не регистрировались к отправке обратно в УТ. Это позволит бухгалтеру вносить изменения в БП без риска перезаписать документы в УТ.

Проанализируем, как это сделать по шагам:

  1. В программе «1С:Бухгалтерия предприятия» перейдем в раздел Администрирование — Синхронизация данных.
  2. Откроем список настроенных синхронизаций, выберем нужный обмен с УТ и перейдем в Параметры подключения — Правила регистрации объектов.
  3. В списке регистрируемых объектов найдем документ Поступление (акт, накладная, УПД).
  4. Для этого документа зададим условие регистрации. Мы можем прописать простое правило на встроенном языке (в режиме настройки правил):

Отказ = Истина;

Этот код полностью заблокирует автоматическую регистрацию изменений для документов поступления на стороне БП. При этом сам документ Поступление не будет выгружаться в УТ, сохраняя там исходные оперативные данные и хозяйственные операции.

---

Вариант 3. Ручное управление составом отправляемых данных

Если ситуация требует разового решения проблемы без изменения конфигураций и правил регистрации, можно использовать стандартные инструменты выборочной синхронизации в БП 3.0:

  1. Перед запуском синхронизации в БП нажмем кнопку Состав отправляемых данных (иконка в виде монитора с шестеренкой или одноименная гиперссылка в окне настроек обмена).
  2. В открывшемся окне найдем строку с документом Поступление (акты, накладные, УПД).
  3. Если там зарегистрированы документы к отправке, выделим их, нажмем правой кнопкой мыши и выберем пункт Отменить регистрацию.
  4. При использовании ручного запуска обмена можно выбирать команду Синхронизировать с дополнительными параметрами. В открывшемся интерактивном диалоге вы сможем наглядно настроить, какие именно типы объектов и документов должны уйти в УТ в рамках текущего сеанса связи.

---

Вариант 4. Блокировка перезаписи реквизитов через расширение конфигурации (Для программистов)

Если двусторонний обмен документами поступления строго необходим (например, для синхронизации номеров входящих документов, дат или статусов оригиналов), эту проблему можно решить программным путем с помощью расширения конфигурации на стороне УТ 11.

Идея решения заключается в том, чтобы при импорте данных из БП проверять, существует ли уже данный документ в УТ. Если документ существует и он уже проведен, мы запрещаем обновлять его ключевые реквизиты (такие как ХозяйственнаяОперация и Договор.ЦельДоговора).

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


&Вместо("ПередЗаписьюПолученныхДанных")
Процедура Расш_ПередЗаписьюПолученныхДанных(ДанныеИмпорта, ПолученныеДанные, Отказ)
    
    // Проверяем тип загружаемого объекта
    Если ТипЗнч(ПолученныеДанные) = Тип("ДокументОбъект.ПриобретениеТоваровУслуг") Тогда
        
        // Попытаемся найти существующий документ в базе УТ по ссылке
        СсылкаНаДокумент = ПолученныеДанные.Ссылка;
        Если ЗначениеЗаполнено(СсылкаНаДокумент) Тогда
            
            // Получаем текущие значения из базы данных без транзакционного кэша
            Запрос = Новый Запрос;
            Запрос.Текст = 
                "ВЫБРАТЬ
                |   ПриобретениеТоваровУслуг.Проведен КАК Проведен,
                |   ПриобретениеТоваровУслуг.ХозяйственнаяОперация КАК ХозяйственнаяОперация
                |ИЗ
                |   Документ.ПриобретениеТоваровУслуг КАК ПриобретениеТоваровУслуг
                |ГДЕ
                |   ПриобретениеТоваровУслуг.Ссылка = &Ссылка";
            
            Запрос.УстановитьПараметр("Ссылка", СсылкаНаДокумент);
            РезультатЗапроса = Запрос.Выполнить();
            
            Если Не РезультатЗапроса.Пустой() Тогда
                Выборка = РезультатЗапроса.Выбрать();
                Выборка.Следующий();
                
                // Если документ в УТ уже проведен, сохраняем его исходную хозяйственную операцию
                Если Выборка.Проведен Тогда
                    ПолученныеДанные.ХозяйственнаяОперация = Выборка.ХозяйственнаяОперация;
                КонецЕсли;
            КонецЕсли;
            
        КонецЕсли;
        
    КонецЕсли;

КонецПроцедуры

Данный код, внедренный через расширение, гарантирует, что любые изменения, пришедшие из бухгалтерии, обновят только разрешенные поля (например, номера входящих документов или комментарии), но не затронут критически важную управленческую аналитику — хозяйственную операцию документа в торговой базе.

Используя приведенные методики и технические решения, вы сможете полностью исключить порчу данных в «1С:Управление торговлей» при синхронизации с «1С:Бухгалтерией предприятия».

← На главную