В типовом решении 1С:Бухгалтерия предприятия 2.0 (на платформе 8.2/8.3 с обычными формами) склад указывается в шапке документа. Это означает, что все товары по одной накладной должны приходоваться на одно место хранения. Однако на практике часто возникает необходимость распределить товары из одной поставки по разным складам. Разберем, как реализовать эту возможность, какие существуют альтернативы и с какими техническими сложностями придется столкнуться.
Прежде всего, выясним причину отсутствия такой настройки. Методология бухгалтерского учета, заложенная в конфигурацию, предполагает, что документ является первичным источником данных, соответствующим бумажной накладной. Поскольку в большинстве случаев склад в типовых формах указывается для всего документа, разработчики 1С ограничили выбор склада шапкой документа. Поэтому стандартных настроек для включения склада в строках не существует, и задачу можно решить только путем внесения изменений в конфигурацию.
Прежде чем приступать к «распилу» конфигурации, проанализируем ситуацию: стоит ли трудоемкость доработки получаемого результата? Существует обходной путь — использование внешней обработки по групповому созданию документов. Схема работы выглядит так:
ПоступлениеТоваровУслуг.Если бизнес-процесс требует наличия склада именно в строках одного документа, рассмотрим шаги по реализации этой задачи. Нам потребуется изменить объект Документ.ПоступлениеТоваровУслуг.
Шаг 1. Добавление реквизита. В табличную часть Товары (а также, при необходимости, Оборудование и Тара) нужно добавить новый реквизит Склад с типом ссылки на справочник Склады.
Шаг 2. Модификация формы. Необходимо вынести новую колонку на форму документа. Проанализируем ситуацию: если склад в строке заполнен, он должен иметь приоритет перед складом в шапке. Рекомендуется добавить обработчик события ПриИзменении для колонки склада в табличной части, а также предусмотреть механизм автоматического заполнения склада в строках значением из шапки при добавлении новых строк.
Шаг 3. Изменение модуля проведения. Это самый ответственный этап. Проанализируем, как формируются проводки. Типовой код берет значение субконто Склады из реквизита шапки документа. Нам необходимо переписать цикл обработки табличной части в процедуре ДвиженияПоРегистрам. Рассмотрим пример логики:
Для Каждого СтрокаТЧ Из Товары Цикл
// ... стандартный код подготовки данных ...
// Вместо использования СкладШапки, берем значение из строки
СкладДляПроводки = ?(ЗначениеЗаполнено(СтрокаТЧ.Склад), СтрокаТЧ.Склад, СкладШапки);
// Формирование проводки по счету (например, 10 или 41)
Движение = Движения.Хозрасчетный.Добавить();
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады] = СкладДляПроводки;
// ... остальные параметры проводки ...
КонецЦикла;
При внесении склада в табличную часть важно учитывать смежные механизмы, которые могут «сломаться»:
НДС предъявленный. В этих регистрах также есть измерение Склад. Если не изменить логику их заполнения в модуле объекта, возникнут расхождения между бухгалтерским учетом и данными для Книги покупок.ВозвратТоваровПоставщику или СчетФактураПолученный на основании нашего поступления, типовые механизмы не увидят склады из строк. Потребуется доработка правил заполнения всех зависимых объектов.Важное замечание: Любое изменение в модуле проведения типового документа 1С:Бухгалтерия 2.0 существенно усложнит процесс обновления конфигурации. При каждом обновлении придется вручную объединять код, следя за тем, чтобы новые типовые механизмы (например, изменения в налоговом законодательстве) не затерли вашу логику распределения по складам.
Если склад в строках нужен только для аналитики (информационно) и не должен влиять на проводки, используйте механизм дополнительных реквизитов для строк табличной части. Если же цель — именно раздельное движение по счетам учета, оцените возможность внедрения виртуального «Центрального склада», с которого товар будет распределяться по реальным точкам документом ПеремещениеТоваров. Это сохранит чистоту конфигурации и обеспечит корректность учета без дорогостоящей разработки.