Автоматическое создание документов "Заказы на производство" на основании главного документа "Заказ на производство".
Обработка создана для того, чтобы пользователи не забыли создать все необходимые документы "Заказ на производство", чтобы произошло полное разузлование выходного изделия, которое упоминается в главном документе.
В форме обработки выбирается главный документ. При нажатии на кнопку «Заполнить» создаются подчиненные документы (см. скриншот «Запуск обработки»).
Обработку можно оформить для запуска из журнала "Заказы на производство" и/или формы списка документа "Заказ на производство" с соответствующими доработками в этих журналах. В данном случае нужно выбрать строку журнала с нужным (основным) документом и нажать на кнопку «Оформить заказы на основании» (см. скриншот «Запуск из журнала»).
Доработки конфигурации.
- Создан реквизит документа "Заказ на производство" – «ДеревоЗаказов», тип - Строка (200). Этот реквизит для наглядности нужно поместить в журнал "Заказы на производство" и форму списка самого документа. По нему можно легко увидеть подчинение документов сразу в журнале, не открывая структуру подчиненности.
Принцип заполнения реквизита «ДеревоЗаказов» следующий:
НомерОсновногоДокумента_НомерДокументаУровня2_ НомерДокументаУровня3 и т.д.
Номера документов, заполняющие «ДеревоЗаказов» берутся без префиксов и без начальных нулей. - В форме документа "Заказ на производство" в процедуру формы ПриЗаписи нужно добавить код следующего содержания:
Процедура ПриЗаписи(Отказ)
//....Ваша обработка......
//....Ваша обработка...
// В ДеревоЗаказов вставляем № документа, если это 1-й док-т дерева,
//т.е. ОсновнойЗаказНаПроизводство - не заполнено.
Если НЕ ЗначениеЗаполнено(Номер) Тогда
УстановитьНовыйНомер(ОсновнойЗаказНаПроизводство.Организация.Префикс);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ДеревоЗаказов) Тогда
цц = "0123456789";
ном = "";
длинаНомера = СтрДлина(Номер);
ии = длинаНомера;
Пока ии > 0 Цикл
Если Найти(цц,Сред(Номер,ии,1)) > 0 Тогда
ном = Сред(Номер,ии,1) + ном;
Иначе
Прервать;
КонецЕсли;
ии = ии - 1;
КонецЦикла;
ном = Строка(Формат(Число(ном),"ЧГ=0"));
Если НЕ ЗначениеЗаполнено(ОсновнойЗаказНаПроизводство) Тогда
//Вытаскиваем №
ДеревоЗаказов = ном;
Иначе
Если ЗначениеЗаполнено(ОсновнойЗаказНаПроизводство.ДеревоЗаказов) Тогда
ДеревоЗаказов = СокрЛП(ОсновнойЗаказНаПроизводство.ДеревоЗаказов) + "_" + ном;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
При желании, этот новый реквизит «ДеревоЗаказов», можно вывести на форму. У меня - видимость и доступность этого реквизита только для пользователя с полными правами (см. скриншот Основной документ).
Желаю успехов!