При интеграции систем «1С:Управление торговлей 11» (УТ) и «1С:Бухгалтерия предприятия 3.0» (БП) часто возникает необходимость отражения специфических хозяйственных операций, таких как прием товаров на ответственное хранение. Если в УТ для этого используются доработанные или нетиповые документы, а в БП они должны загружаться как стандартные поступления на забалансовый счет 002, разработчики и аналитики сталкиваются со сложной задачей.
Основными проблемами в данном сценарии являются: разделение учета обычного поступления от ответхранения в бухгалтерской базе, предотвращение коллизий при двустороннем обмене и управление нумерацией. В этой статье мы подробно разберем, как правильно организовать архитектуру такого обмена, настроить аналитику в БП и решить проблемы с номерами документов.
Попытка разделять операции ответственного хранения и обычные закупки исключительно по номерам документов или префиксам — это методологическая ошибка. Бухгалтерский учет должен опираться на четкие аналитические разрезы (субконто). Рассмотрим, как правильно настроить разделение в бухгалтерии:
Создадим в «1С:Бухгалтерия предприятия» отдельный элемент справочника Склады (например, «Склад ответственного хранения»). Это ключевой шаг для автоматизации проводок.
Перейдем в регистр сведений Счета учета номенклатуры и создадим новую запись. В поле «Склад» укажем наш созданный склад ответхранения. В поле «Счет учета» установим забалансовый счет 002 («Товарно-материальные ценности, принятые на ответственное хранение»). Теперь, какой бы документ поступления ни загружался в БП, если в нем указан данный склад, система автоматически сформирует проводки по дебету счета 002 вместо стандартных балансовых счетов 41 или 10.
Для расчетов и учета ТМЦ на ответственном хранении необходимо использовать отдельные договоры с поклажедателями. В свойствах договора рекомендуется явно указывать признак ответственного хранения в наименовании, чтобы бухгалтер мог легко фильтровать оборотно-сальдовую ведомость по счету 002 в разрезе контрагентов и их соглашений.
Выясним, как работает механизм синхронизации 1С. При использовании стандартного обмена (например, через универсальный формат EnterpriseData) сопоставление объектов происходит по их уникальному идентификатору — UUID (GUID), а не по номеру или дате. Если документ был создан в УТ, выгружен в БП, изменен в БП и затем снова отправлен в УТ, зацикливания или дублирования не произойдет. Система найдет документ по его уникальному GUID и обновит его свойства.
Однако проблема коллизии номеров возникает тогда, когда пользователи начинают создавать документы параллельно в обеих информационных базах. Например, если в БП вручную вводится документ с тем же номером, который должен прийти из УТ. Рассмотрим два способа решения этой проблемы:
Если базы уже имеют стандартные префиксы (например, УТ- для торговли и БП- для бухгалтерии), при двустороннем обмене этого может быть недостаточно, так как нумерация документов одного типа все равно может пересекаться. Мы можем кастомизировать правила конвертации данных:
При выгрузке нетиповых документов ответхранения из УТ в БП (где они превращаются в типовые поступления) мы можем программно изменять номер, добавляя к нему специализированный буквенный маркер. Например, номер УТ00-000125 при переносе в БП трансформируется в УТ00-ОХ0125 (где «ОХ» означает «Ответственное хранение»).
Для этого в правилах конвертации свойств (или в обработчиках событий выгрузки в расширении обмена) используется код, модифицирующий выгружаемый номер. Посмотрим на пример реализации логики изменения номера:
// Пример изменения номера при выгрузке документа ответхранения
Если ТипЗнч(Источник) = Тип("ДокументОбъект.ПоступлениеНаОтветхранение") Тогда
ОригинальныйНомер = Источник.Номер;
// Предположим, префикс базы занимает первые 4 символа (например, "УТ00")
ПрефиксБазы = Лев(ОригинальныйНомер, 4);
ХвостНомера = Сред(ОригинальныйНомер, 5);
// Формируем новый номер с разделителем "ОХ" (Ответхранение)
Значение = ПрефиксБазы + "ОХ" + ХвостНомера;
КонецЕсли;
Это полностью исключит пересечение номеров с обычными документами поступления, создаваемыми непосредственно в конфигурации «1С:Бухгалтерия предприятия».
Если документы создаются в БП вручную, мы можем программно управлять их нумерацией в зависимости от заполненных реквизитов. Для этого создадим подписку на событие ПриУстановкеНовогоНомера для документа ПоступлениеТоваровУслуг.
Рассмотрим код обработчика, который анализирует склад документа и, если это склад ответхранения, присваивает документу уникальный префикс:
Процедура ПриУстановкеНовогоНомераДокументаОтветхранения(Источник, СтандартнаяОбработка, Префикс) Экспорт
// Проверяем тип объекта
Если ТипЗнч(Источник) = Тип("ДокументОбъект.ПоступлениеТоваровУслуг") Тогда
// Проверяем, назначен ли специальный склад ответхранения
Если ЗначениеЗаполнено(Источник.Склад) И
(Найти(НРег(Источник.Склад.Наименование), "ответхранение") > 0 Или Источник.Склад.ТипСклада = Перечисления.ТипыСкладов.Резервный) Тогда
// Добавляем к текущему префиксу базы символ "Х" для обособления нумерации
Префикс = Префикс + "Х";
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Благодаря этому подходу документы ответхранения, создаваемые в БП, будут получать номера вида БПХ0-000001, что предотвратит их конфликт со стандартными закупками (номера которых будут иметь вид БП00-000001).
Использование кастомных (самописных) документов для ответственного хранения в УТ 11 — это серьезный источник технического долга. Современные версии «1С:Управление торговлей» (начиная с релизов 11.4 и 11.5) обладают мощным встроенным функционалом для этих целей.
Проанализируем преимущества перехода на типовые механизмы:
НСИ и администрирование -> Настройка НСИ и разделов -> Закупки и установим флаг «Приемка на ответственное хранение с правом продажи».Приемка товаров на хранение. Этот документ делает правильные движения по регистрам оперативного учета товаров и автоматически поддерживается стандартными правилами обмена.Приемка товаров на хранение из УТ в документ Поступление товаров и услуг с видом операции «Поступление в переработку / на комиссию» (или аналогичные схемы) в БП 3.0 с автоматической подстановкой счета 002. Это избавит вас от необходимости поддерживать нетиповой код обмена при каждом обновлении конфигураций.В практике построения распределенных информационных систем на базе решений 1С двусторонний обмен первичными складскими и финансовыми документами (такими как поступления, реализации, возвраты) считается антипаттерном. Выясним, почему этого следует избегать:
При двустороннем обмене велика вероятность возникновения конфликтов редактирования. Если менеджер в УТ изменил количество товара в поступлении, а бухгалтер в БП параллельно исправил ставку НДС или номер входящего документа, при синхронизации одна из версий перезапишет другую (в зависимости от настроек правил разрешения коллизий). Это приведет к потере данных.
Рекомендованное архитектурное решение:
Информационная база «1С:Управление торговлей 11» должна выступать в роли единственного источника правды (Master-системы) для всех логистических и складских операций. Все поступления, возвраты, перемещения и списания (включая операции ответственного хранения) должны создаваться и редактироваться строго в УТ 11.
Обмен данными для этих документов должен быть настроен строго в одну сторону: из УТ в БП. В базе «1С:Бухгалтерия предприятия» загруженные документы должны блокироваться для изменения складской и количественной части. Бухгалтеру разрешается лишь заполнять счета учета (если они не заполнились автоматически), регистрировать входящие счета-фактуры и проводить документы. Для контроля изменений рекомендуется настроить даты запрета редактирования данных.