При переходе с платформы «1С:Предприятие 7.7» или разработке новой функциональности в конфигурациях на базе платформы «1С:Предприятие 8» (таких как «Управление производственным предприятием», редакция 1.3, «Комплексная автоматизация 1.1» или «Управление торговлей 10.3») разработчики нередко сталкиваются с неожиданным поведением: в документах товародвижения (ПоступлениеТоваровУслуг, РеализацияТоваровУслуг, ПеремещениеТоваров) отсутствует стандартный реквизит ДокументОснование. Выясним причину такого архитектурного решения и рассмотрим штатные и программные способы связывания документов в общую цепочку подчиненности.
Проанализируем архитектуру платформы и конфигураций линейки УПП. В платформе 7.7 реквизит ДокументОснование присутствовал у документов как предопределенный системой. Начиная с версии 8, платформенного обязательного реквизита основания нет: разработчики конфигурации создают его вручную только там, где существует однозначная связь «один-к-одному» (например, в кассовых ордерах ПриходныйКассовыйОрдер, РасходныйКассовыйОрдер).
В товарных документах логика учета построена иначе:
ЗаказПокупателя, ЗаказПоставщику) вынесены в табличные части документов.Сделка, а не универсальное основание.КритерийОтбора.СвязанныеДокументы, куда разработчики типовой конфигурации включают реквизиты ссылочного типа, по которым требуется отслеживать связь. В документе ПеремещениеТоваров типовой реквизит для связи с другим перемещением изначально не предусмотрен.Рассмотрим, как решить прикладную задачу, когда один общий объем перемещения требуется разбить на несколько отдельных рейсов и видеть их взаимосвязь.
Разберем наиболее правильный с точки зрения типовой методологии УПП подход — отражение потребности через предварительный заказ. Если требуется перевезти большой объем ТМЦ несколькими машинами, используем следующую цепочку:
ВнутреннийЗаказ с видом операции «на склад». В нем указываем общий объем товаров, склад-отправитель и склад-получатель.ПеремещениеТоваров, в табличной части которого заполняем реквизит ВнутреннийЗаказ ссылкой на созданный ранее общий заказ.В результате мы получаем следующие преимущества:
ВнутренниеЗаказы, что позволяет формировать стандартный отчет АнализВнутреннихЗаказов и контролировать остаток товаров, который еще предстоит перевезти.Если управленческое перемещение должно оформляться строго одним документом, а деление на рейсы обусловлено исключительно физической логистикой, разберем ордерную схему:
ПеремещениеТоваров на всю партию.РасходныйОрдерНаТовары, а на складе-получателе — ПриходныйОрдерНаТовары. В качестве документа-основания у ордеров выступает единое ПеремещениеТоваров.Если бизнес-процесс требует оформления рейсов именно отдельными документами ПеремещениеТоваров и создания цепочки напрямую без заказов, потребуется доработка конфигурации. Разберем по шагам, как правильно реализовать эту связь:
Документ.ПеремещениеТоваров.ДокументОснование) и назначаем ему тип ДокументСсылка.ПеремещениеТоваров. Выводим этот реквизит на форму документа при необходимости.КритерииОтбора -> СвязанныеДокументы. Открываем его свойства, переходим на вкладку «Состав» и устанавливаем флаг напротив вновь созданного реквизита Документ.ПеремещениеТоваров.Реквизит.ДокументОснование. Без этого действия стандартное дерево связанных документов не покажет связь между рейсами.ПеремещениеТоваров переопределяем процедуру ОбработкаЗаполнения, чтобы при вводе на основании данные автоматически переносились в новый документ рейса:
Процедура ОбработкаЗаполнения(Основание)
Если ТипЗнч(Основание) = Тип("ДокументСсылка.ПеремещениеТоваров") Тогда
// Заполняем реквизит связи
ДокументОснование = Основание;
// Переносим реквизиты шапки
СкладОтправитель = Основание.СкладОтправитель;
СкладПолучатель = Основание.СкладПолучатель;
Организация = Основание.Организация;
Подразделение = Основание.Подразделение;
КонецЕсли;
КонецПроцедуры
Такой подход обеспечивает сохранение целостности данных и корректную работу типового механизма структуры подчиненности в «1С:Управление производственным предприятием».