Как избежать затирания серий номенклатуры в УТ 11 при обмене с Бухгалтерией?

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

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

Выясним причину: почему пропадают серии?

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

Процесс выглядит так:

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

Таким образом, проблема не в том, где хранятся серии (в табличной части «Товары» или в отдельной таблице «Серии»), а в самой логике двустороннего обмена данными.

Первичная настройка: как правильно включить учет серий и использовать отдельную таблицу?

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

Способ указания серий напрямую зависит от типа склада (ордерный или неордерный).

Шаг 1. Включаем учет серий.

Перейдем в раздел НСИ и администрирование → Настройка НСИ и разделов → Номенклатура → Разрезы учета. Установите флаг «Серии товаров».

Шаг 2. Настраиваем политику учета серий.

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

Шаг 3. Применяем политику к номенклатуре.

Откройте карточку Вид номенклатуры, к которой относятся ваши товары. На вкладке «Основное» в поле «Политика учета серий» выберите созданную ранее политику.

Шаг 4. Определяем, где будут указываться серии.

А теперь самое главное — связь со складом:

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

Решение проблемы: настраиваем правила обмена

Даже при правильной настройке учета серий проблема их затирания при обратном обмене останется. Рассмотрим несколько способов ее решения, от простого к сложному.

Решение 1: Организационный подход (односторонний обмен)

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

Суть подхода:

  1. «Управление торговлей» признается мастер-системой для ведения оперативного учета. Все первичные документы по товародвижению создаются и корректируются только в УТ.
  2. В настройках синхронизации запрещается загрузка документов «Приобретение товаров и услуг» и «Реализация товаров и услуг» из БП в УТ.
  3. Из БП в УТ могут выгружаться другие данные, например, банковские выписки для учета оплат.

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

Решение 2: Настройка правил обмена (для двустороннего обмена)

Если двусторонний обмен документами необходим по требованиям бизнес-процессов, придется дорабатывать правила обмена. Задача — запретить обновление данных о сериях при загрузке документа из БП.

Современный обмен между типовыми конфигурациями часто использует «Универсальный формат обмена» (EnterpriseData). Редактировать его правила «на лету» нельзя. Потребуется выполнить следующие шаги:

Шаг 1. Выгружаем текущие правила обмена.

В УТ зайдите в НСИ и администрирование → Синхронизация данных → Настройки синхронизации данных. Откройте вашу настройку обмена с БП. В меню «Еще» найдите пункт для выгрузки правил обмена и сохраните их в XML-файл.

Шаг 2. Редактируем правила в «Конвертации данных».

Для этого понадобится конфигурация «1С:Конвертация данных, редакция 2» или «редакция 3».

  1. Запустите «Конвертацию данных» и загрузите в нее выгруженный на предыдущем шаге файл правил.
  2. Найдите Правило Конвертации Объектов (ПКО) для документа, например, РеализацияТоваровУслуг, которое отвечает за загрузку данных В УТ ИЗ БП.
  3. Внутри этого ПКО найдите Правило Конвертации Свойств (ПКС), отвечающее за табличную часть Товары.
  4. Наша цель — реквизит СерияНоменклатуры. Однако, поскольку серии хранятся в отдельной таблице, скорее всего, нужно модифицировать обработчики самого ПКО или ПКС для табличной части.
  5. Более надежный вариант — запретить очистку табличной части с сериями. Найдите ПКО для документа РеализацияТоваровУслуг. Перейдите в обработчик события ПередЗаписью.

Шаг 3. Добавляем код в обработчик.

В обработчик ПередЗаписью можно добавить следующий код, который не даст системе очистить данные о сериях, если они уже были в документе.


// Проверяем, что объект не новый (т.е. он обновляется)
Если НЕ ЭтоНовый() Тогда
    // Получаем текущее состояние объекта из базы данных
    СтарыйОбъект = Ссылка.ПолучитьОбъект();

    // Если в старом объекте были указаны серии, а в загружаемом их нет,
    // то копируем серии из старого объекта в новый (загружаемый)
    Если СтарыйОбъект.Серии.Количество() > 0 И Объект.Серии.Количество() = 0 Тогда
        Объект.Серии.Загрузить(СтарыйОбъект.Серии.Выгрузить());
    КонецЕсли;
КонецЕсли;

Другой, более простой, но и более "грубый" вариант — это в ПКС для реквизита СерииНоменклатуры (если такой есть) в обработчике ПередВыгрузкой (со стороны БП) установить свойство:

НеОчищать = Истина;

Это может предотвратить очистку значения в приемнике, если из источника приходит пустое значение. Пробуйте разные подходы в зависимости от структуры ваших правил.

Шаг 4. Сохраняем и загружаем новые правила.

Сохраните измененные правила в новый XML-файл. Затем в настройках синхронизации в УТ загрузите этот файл как измененный комплект правил. После этого синхронизация будет работать по вашей новой логике.

Важно: Этот способ требует хорошего понимания работы «Конвертации данных» и структуры объектов 1С. Перед внесением изменений в рабочую базу обязательно сделайте резервную копию и протестируйте обмен на копии.

← На главную