В процессе работы со складскими операциями в 1С:ERP часто возникает потребность видеть полную цепочку движения документов. Одна из таких задач — отображение документа «Приходный ордер на товары» как основания для задания «Отбор (размещение) товаров» в структуре подчиненности. Сотрудникам склада это помогает быстрее отслеживать, какая именно поставка сейчас разносится по ячейкам хранения.
Давайте разберемся, почему этой связи нет в стандартной конфигурации и как можно реализовать такую функциональность, не нарушая логику системы.
Прежде чем переходить к доработке, важно понять логику, которую разработчики заложили в систему. Процесс поступления товаров на ордерный адресный склад целенаправленно разделен на два независимых этапа, которые оформляются разными документами:
Приходный ордер на товары. Он фиксирует сам факт того, что товары от поставщика прибыли на склад и приняты ответственным лицом. Физически эти товары размещаются во временной зоне, которая так и называется — «зона приемки».Отбор (размещение) товаров.Такое разделение сделано не случайно. Оно обеспечивает гибкость и эффективность работы склада. Проанализируем ситуацию: на склад в течение часа могут приехать три машины от разных поставщиков. Кладовщик оформит три разных Приходных ордера. Если в этих поставках есть одинаковые товары, система может сформировать одно общее задание на размещение, чтобы сотрудник склада за один проход разместил всю партию однотипного товара по ячейкам.
Обратная ситуация также возможна: одна большая поставка (один Приходный ордер) может быть размещена несколькими сотрудниками, для каждого из которых будет создано свое задание Отбор (размещение) товаров. Именно при такой сложной схеме часто требуется поиск ошибок в учете, если данные по складам и организациям перестают сходиться.
Именно из-за этой логики, предполагающей связь "многие ко многим", в типовой конфигурации и отсутствует жесткая подчиненность документа размещения одному конкретному приходному ордеру. Распоряжением для размещения служит не документ, а сам факт наличия товара в зоне приемки.
Несмотря на отсутствие прямой связи в структуре подчиненности, типовой функционал позволяет создавать Отбор (размещение) товаров на основании Приходного ордера. При этом система "помнит" эту связь, но не отображает ее в стандартном отчете. Наша задача — сделать эту связь видимой. Самый правильный и безопасный способ — использовать механизм расширений конфигурации. Это позволит внести изменения, не затрагивая основную конфигурацию, что критически важно для последующих обновлений.
Разберем по шагам, что нужно сделать.
Первое, что нам нужно, — это место, где будет храниться ссылка на исходный документ. Для этого в расширении добавим в документ Отбор (размещение) товаров новый реквизит.
Отбор (размещение) товаров.ПриходныйОрдерОснование.ДокументСсылка.ПриходныйОрдерНаТовары.Теперь у нас есть поле, которое может однозначно связать задание на размещение с документом приемки.
Теперь нужно сделать так, чтобы наш новый реквизит заполнялся автоматически при создании документа размещения на основании приходного ордера. Для этого потребуется доработать логику создания документа.
Чаще всего это делается через подписку на событие ОбработкаЗаполнения объекта Отбор (размещение) товаров.
ДокументОбъект.ОтборРазмещениеТоваров.ОбработкаЗаполнения.В коде обработчика необходимо проверить, что документ создается на основании приходного ордера, и если это так, заполнить наш новый реквизит.
// Пример кода в общем модуле расширения
Процедура ЗаполнитьПриходныйОрдерОснование(Источник, ДанныеЗаполнения, СтандартнаяОбработка) Экспорт
// Проверяем, что заполняется наш документ и есть основание
Если ТипЗнч(Источник) = Тип("ДокументОбъект.ОтборРазмещениеТоваров")
И ДанныеЗаполнения.Свойство("Основание") Тогда
// Проверяем, что основанием является Приходный ордер на товары
Если ТипЗнч(ДанныеЗаполнения.Основание) = Тип("ДокументСсылка.ПриходныйОрдерНаТовары") Тогда
Источник.ПриходныйОрдерОснование = ДанныеЗаполнения.Основание;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
После этой доработки при создании размещения на основании приходного ордера ссылка на него будет автоматически сохраняться в документе.
Это ключевой этап. Структура подчиненности в 1С строится на основе специального объекта конфигурации — Критерий отбора.СвязанныеДокументы. Нам нужно "объяснить" этому критерию, как находить связанные документы по нашему новому реквизиту.
Критерий отбора.СвязанныеДокументы.Документ.ОтборРазмещениеТоваров.ПриходныйОрдерОснование.Ссылка.Этим действием мы сообщаем системе: «Когда ты строишь дерево связей для документа, который попал в поле отбора (в нашем случае это ПриходныйОрдерОснование), пожалуйста, покажи в дереве и тот документ, в котором этот реквизит заполнен (то есть сам документ Отбор (размещение) товаров)».
После сохранения конфигурации и обновления базы данных, при открытии структуры подчиненности из формы приходного ордера вы увидите созданные на его основании документы размещения. Для еще более детального контроля можно использовать анализ движения товаров по складам и ячейкам, чтобы убедиться, что всё размещено верно.
На форумах иногда можно встретить идею не добавлять новый реквизит, а расширить составной тип существующего реквизита Распоряжение в документе Отбор (размещение) товаров, добавив туда тип ДокументСсылка.ПриходныйОрдерНаТовары. Этот путь не рекомендуется.
Почему это плохая идея? Реквизит Распоряжение имеет четкое бизнес-назначение: он указывает на документ-основание, который является прямым приказом на выполнение складской операции. Вмешательство в логику работы ключевых реквизитов может привести к непредсказуемым ошибкам.
В заключение, добавив всего один реквизит и настроив критерий отбора через расширение, мы можем значительно повысить удобство работы для сотрудников склада, не нарушая при этом базовую архитектуру 1С:ERP. Это делает складские процессы более прозрачными и упрощает их контроль.