В процессе управления производством часто возникает задача: оперативно понять, хватит ли материалов на складе для выпуска конкретного изделия по определенной спецификации еще до того, как будет сформирован документ Заказ на производство. Рассмотрим детально, как реализовать такой механизм в конфигурации 1С:Управление нашей фирмой (УНФ), используя как встроенные инструменты, так и возможности самостоятельной разработки на системе компоновки данных (СКД).
Прежде чем приступать к программированию, проанализируем типовой функционал программы. В 1С:УНФ существует мощный инструмент — Расчет потребностей в запасах. Зачастую он полностью перекрывает потребность в создании отдельного отчета, описанного в теме форума.
Разберем, как работает этот механизм:
Заказ на производство в статусе «В работе» или «Заявка» (не проводя его по учету, а просто записав).Запасы) и выведет дефицит в колонке Дефицит/Излишек. Недостающее количество будет подсвечено красным цветом.Преимущество этого метода: система позволяет сразу же сформировать документы Заказ поставщику на то количество материала, которого не хватает для выполнения производственной программы.
Если типовая обработка по каким-то причинам не подходит и нужен именно отчет с жестко заданной структурой (Остаток, Необходимо, Дефицит), воспользуемся Системой компоновки данных (СКД). Как справедливо отмечено в сообщении 4, «Универсальный отчет» в данном контексте менее гибок, чем прямое создание схемы компоновки.
Проанализируем структуру запроса, который ляжет в основу нашего отчета. Нам необходимо соединить данные о составе спецификации и актуальные остатки материалов.
Для построения отчета нам потребуются две таблицы:
Рассмотрим пример запроса для СКД. Нам важно учесть, что количество материала в спецификации указано на определенное количество готовой продукции (поле КоличествоПродукции в шапке спецификации).
ВЫБРАТЬ
СпецификацияСостав.Номенклатура КАК Материал,
СпецификацияСостав.Характеристика КАК ХарактеристикаМатериала,
(СпецификацияСостав.Количество / СпецификацияСостав.Ссылка.КоличествоПродукции) * &КоличествоКВыпуску КАК НеобходимоНаПроизводство,
ЕСТЬNULL(ЗапасыОстатки.КоличествоОстаток, 0) КАК ОстатокНаСкладе
ИЗ
Справочник.Спецификации.Состав КАК СпецификацияСостав
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы.Остатки(Период = &Период) КАК ЗапасыОстатки
ПО СпецификацияСостав.Номенклатура = ЗапасыОстатки.Номенклатура
И СпецификацияСостав.Характеристика = ЗапасыОстатки.Характеристика
ГДЕ
СпецификацияСостав.Ссылка = &ВыбраннаяСпецификация
Разберем по шагам ключевые моменты этого запроса:
ЛЕВОЕ СОЕДИНЕНИЕ, чтобы в отчет попали все материалы из спецификации, даже если их физически нет на складе (в этом случае ЕСТЬNULL вернет 0).&ВыбраннаяСпецификация позволяет формировать отчет по конкретному прибору (Прибор 1, Прибор 2 и т.д.).Чтобы реализовать логику «Конечного остатка» и выделения красным (как просил автор в сообщении 9), перейдем на закладку Вычисляемые поля в СКД:
КонечныйОстаток с формулой: ОстатокНаСкладе - НеобходимоНаПроизводство.КонечныйОстаток < 0, то цвет текста — Красный.В сообщении 6 упоминается проблема «разузловки». Если ваш прибор состоит из узлов, которые сами имеют спецификации, простой запрос к табличной части Состав покажет только узлы, но не их компоненты.
Для решения этой задачи в 1С:УНФ рекомендуется использовать механизм обеспечения или писать рекурсивный запрос в СКД. Однако для начинающего разработчика проще всего будет применить следующий подход: в настройках спецификации для вложенных узлов указывать способ пополнения «Производство». Тогда типовой отчет Анализ потребности сможет «раскрутить» дерево изделий до самого нижнего уровня — до покупных материалов.
Проанализируем нюансы, которые могут возникнуть при эксплуатации:
Характеристика в условия соединения таблиц. Иначе отчет может ошибочно показать наличие материала, хотя на складе лежит тот же материал, но с другой характеристикой.КоличествоОстаток показывает общий остаток. Если часть материалов уже зарезервирована под другие заказы, реальное доступное количество будет меньше. Для учета резервов используйте таблицу ЗапасыОстаткиИОбороты или виртуальную таблицу остатков с вычитанием данных из регистра ЗапасыВРезерве.ГДЕ Номенклатура.Используется = ИСТИНА (предполагая, что вы создали такой дополнительный реквизит в справочнике).Таким образом, для быстрого решения задачи лучше всего использовать встроенный Расчет потребностей, а для получения специфической печатной формы — создать отчет на СКД, соединив данные спецификации с остатками по регистрам накопления.