Задачи, связанные с расчетом себестоимости и формированием аналитической отчетности в производстве, являются фундаментальными для разработчика 1С. В данной статье мы подробно разберем решение классической задачи: учет сборки мебели, списание комплектующих по методу FIFO, учет дополнительных работ и построение сложного отчета в Системе компоновки данных (СКД), где требуется рассчитать средний состав изделий.
Прежде чем приступать к реализации, проанализируем основные требования. Компания занимается производством мебели. Процесс отражается документом Сборка. Нам необходимо решить три подзадачи:
Для реализации партионного учета нам понадобится настроить ПланСчетов. Разумно использовать счет "Материалы" (например, 10) и счет "Основное производство" (20), а также "Товары" (41) или "Готовая продукция" (43).
На счете "Материалы" необходимо организовать аналитику (Субконто) по Номенклатуре и Партиям. В качестве типа данных для субконто Партии обычно выступает документ поступления. Помните, что для корректного расчета FIFO признак "Учет по партиям" должен быть установлен в настройках параметров учета или реализован через соответствующее измерение регистра бухгалтерии.
Проанализируем логику проведения. Документ должен формировать две группы проводок. Сначала мы списываем материалы в производство, а затем приходуем готовую продукцию на склад.
Разберем пример кода для получения остатков по партиям и формирования проводок списания (FIFO):
// 1. Создаем блокировку данных для обеспечения целостности остатков
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Хозрасчетный");
ЭлементБлокировки.УстановитьЗначение("Счет", ПланыСчетов.Хозрасчетный.Материалы);
// ... установка фильтров по номенклатуре из ТЧ документа
Блокировка.Заблокировать();
// 2. Запрос к остаткам в разрезе партий
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
| ХозрасчетныйОстатки.Субконто2 КАК Партия,
| ХозрасчетныйОстатки.КоличествоОстаток КАК Количество,
| ХозрасчетныйОстатки.СуммаОстаток КАК Сумма
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&МоментВремени, Счет = &СчетМатериалы, , ) КАК ХозрасчетныйОстатки
|ГДЕ
| ХозрасчетныйОстатки.Субконто1 В (&СписокНоменклатуры)
|УПОРЯДОЧИТЬ ПО
| ХозрасчетныйОстатки.Субконто2.Дата ВОЗР";
После получения выборки мы обходим партии и списываем необходимое количество. Сумма списания для готового изделия будет складываться из себестоимости материалов и стоимости работ. Стоимость работ мы получаем из периодического Регистра Сведений, так как по условию она меняется не чаще раза в месяц.
Это самая интересная часть задачи. Нам нужно получить иерархию Изделие -> Материал. Рассмотрим подробнее, как вычислить колонки "Количество" и "Сумма".
Для уровня изделия:
Количество = Общее количество выпущенных изделий за период.Сумма = Общая себестоимость выпуска (материалы + работы).Цена = Сумма / Количество.Для уровня материала (вложенный уровень):
Количество = (Общее количество данного материала) / (Количество родительского изделия). Это и есть "средний состав".Сумма = (Общая стоимость материала) / (Количество родительского изделия).Цена = Сумма (материала) / Количество (материала).Для реализации такой логики в СКД проанализируем использование функций Вычисляемые поля и настроек ресурсов. Нам понадобятся два поля в наборе данных: КоличествоСписано (для материалов) и КоличествоВыпущено (для изделий).
Выясним, как прописать формулы ресурсов. Для поля Количество формула будет выглядеть так:
ВЫБОР КОГДА Уровень() = 0 ТОГДА Сумма(КоличествоВыпущено) ИНАЧЕ Сумма(КоличествоСписано) / Сумма(КоличествоВыпущено) КОНЕЦ
Важно помнить: чтобы значение КоличествоВыпущено было доступно на уровне группировки по материалам, в запросе СКД эти данные должны быть связаны. Обычно используется левое соединение оборотов по выпуску продукции и оборотов по списанию материалов в рамках одного документа или периода.
Согласно условию, работы входят в стоимость изделия, но не детализируются как материалы. Чтобы добиться этого, выполним следующие действия:
Таким образом, на уровне Изделия мы увидим полную себестоимость (с учетом работ), а в списке Материалов под ним будут только физические комплектующие.
Чтобы отчет выглядел профессионально и соответствовал требованиям, в настройках СКД на вкладке "Наборы данных" установим правильные Роли для полей. Для полей количества и суммы на разных уровнях можно использовать разные заголовки или условное оформление, чтобы визуально разделить показатели "Всего по изделию" и "Среднее на единицу".
Резюмируем: решение данной задачи требует четкого понимания работы с итогами в СКД и механизмов бухгалтерского учета в 1С. Использование функций ВычислитьВыражение или грамотное распределение ресурсов по группировкам позволяет создавать гибкие отчеты, которые невозможно построить простым запросом.