Суть задачи – компания продает стеллажи и детали стеллажей.
Приходуются только детали, продавится могут как детали, так и стеллажи (указываются в одной табличной части)
Нужны отчеты по наличию стеллажей и наличию деталей.
Основные моменты:
Стеллажи и детали указываются в справочнике «Номенклатура». Для определения стеллажей добавлен реквизит «ЭтоСтеллаж» (тип:Булево)
Составы стеллажей хранятся в РС «СоставыСтеллажей».
Измерения:
Деталь (тип СпарвочникСсылка.Номенклатура). Для исключения выбора стеллажей – указываем «Параметры выбора» - Отбор.ЭтоСтеллаж – Ложь.
Ресурсы:
Стеллаж (тип СпарвочникСсылка.Номенклатура). Для исключения выбора деталей – указываем «Параметры выбора» - Отбор.ЭтоСтеллаж – Истина.
КоличествоВСтеллаже (тип Число)
РС «СоставыСтеллажей»
Стеллаж отнесен к ресурсам, чтобы выполнить условие задачи - «одна и та же деталь не может относиться к разным стеллажам»
Приходная накладная – для реквизита Номенклатура табличной части указываем ПараметрыВыбора (аналогично как в РС для детали)
Учет остатков ведется в деталях только по количеству в разрезе складов (соответственно нужно добавить справочник Склады, измерение в регистре Остатки номенклатуры и реквизит в шапке приходной и расходной накладной)
Проведение приходной накладной - стандартно.
При проведении расходной накладной используется «новая» методика, единственное, стеллажи нужно пересчитать в детали.
Схема проведения по «новой» методике – стандартная, посмотреть можно например здесь https://xn----1-bedvffifm4g.xn--p1ai/articles/2017-02-12-two-methods-for-inventory-check/ или например здесь https://1c.chistov.pro/2010/06/1-82.html
Не забываем, что при новой методике при проверке остатков используем не момент времени, а создаем границу (т.к. МоментВремени() не включает сам документ, а необходимо, чтобы документ включатся)
ГраницаПериода=новый Граница(МоментВремени(),ВидГраницы.Включая);
Запрос.УстановитьПараметр("ГраницаПериода", ГраницаПериода);
Для пересчета стеллажей в детали левым соединением к табличной части присоединяем регистр сведений с комплектациями (по стеллажу). Далее если поле стеллаж из регистра сведений «ЕСТЬ NULL», то тогда номенклатуру берем из табличной части (т.е. если стеллаж в РС не найден, значит это деталь), количество просто берем из табличной части. Если стеллаж найден (т.е. это стеллаж), то номенклатуру (деталь) берем из РС, а количество - из табличной части умножаем на количество в стеллаже.
Текс запроса сразу формируем конструктором и для записи движений, и для последующей проверки (потом разделим как надо)
Базовая заготовка, которую нужно будет разделить на часть для записи движений, и часть для проверки отрицательных остатков :
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВЫБОР
| КОГДА СоставыСтеллажей.Стеллаж ЕСТЬ NULL
| ТОГДА РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
| ИНАЧЕ СоставыСтеллажей.Деталь
| КОНЕЦ КАК Номенклатура,
| СУММА(ВЫБОР
| КОГДА СоставыСтеллажей.Стеллаж ЕСТЬ NULL
| ТОГДА РасходнаяНакладнаяСписокНоменклатуры.Количество
| ИНАЧЕ РасходнаяНакладнаяСписокНоменклатуры.Количество * СоставыСтеллажей.КоличествоВСтеллаже
| КОНЕЦ) КАК Количество
|ПОМЕСТИТЬ ТабЧасть
|ИЗ
| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыСтеллажей КАК СоставыСтеллажей
| ПО РасходнаяНакладнаяСписокНоменклатуры.Номенклатура = СоставыСтеллажей.Стеллаж
|ГДЕ
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ВЫБОР
| КОГДА СоставыСтеллажей.Стеллаж ЕСТЬ NULL
| ТОГДА РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
| ИНАЧЕ СоставыСтеллажей.Деталь
| КОНЕЦ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТабЧасть.Номенклатура,
| ТабЧасть.Количество
|ИЗ
| ТабЧасть КАК ТабЧасть
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПРЕДСТАВЛЕНИЕССЫЛКИ(ОстаткиНоменклатурыОстатки.Номенклатура) КАК Представление,
| -ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК Нехватка
|ИЗ
| РегистрНакопления.ОстаткиНоменклатуры.Остатки(
| &ГраницаПериода,
| Склад = &Склад
| И Номенклатура В
| (ВЫБРАТЬ
| ТабЧасть.Номенклатура
| ИЗ
| ТабЧасть)) КАК ОстаткиНоменклатурыОстатки
|ГДЕ
| ОстаткиНоменклатурыОстатки.КоличествоОстаток < 0";
Запрос.УстановитьПараметр("ГраницаПериода", ГраницаПериода);
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Отчеты:
Отчет по стеллажам имеет определенные подводные камни. Можно посмотреть здесь://infostart.ru/public/969323/
Как добавить параметр в заголовок – можно посмотреть здесь://infostart.ru/public/963368/
Интерфейс задачи – 8.2, (тестировалось на релизе 8.3.9.2170)
Подсистемы не создавались.
Благодарю за внимание!