Как определить партии поступления материалов, находящихся в незавершенном производстве (НЗП) в 1С?

Программист 1С v8.3 (Обычные формы) 1С:ERP Управление предприятием Бухгалтерский учет Промышленность, строительство и АПК
← К списку

Приветствуем вас! Сегодня мы вместе разберем одну из важных и часто встречающихся задач в учете на предприятиях, использующих 1С: как отследить, из каких конкретных партий поступления состоят материалы, которые сейчас находятся в незавершенном производстве (НЗП). Эта задача критически важна для правильного расчета себестоимости, эффективного управления запасами и точного анализа затрат. Мы рассмотрим несколько подходов к решению этой проблемы, от общего алгоритма до детализированного запроса, а также углубимся в стандартные механизмы 1С, которые помогают в партионном учете. Приступим к совместной работе!

Подход 1: Концептуальный алгоритм поиска партий для внешнего отчета

Давайте начнем с высокоуровневого алгоритма, который можно реализовать в виде внешнего отчета. Этот подход основан на логике последовательного сопоставления расхода материалов в НЗП с их поступлениями.

Суть метода: Мы ищем документы поступления, которые покрывают количество материалов, находящихся в НЗП, двигаясь от самых свежих поступлений к более ранним, пока не наберем требуемое количество.

  1. Определяем потребность: Сначала нам нужно точно узнать, какое количество конкретной номенклатуры находится в НЗП. Это будет наша "целевая" потребность.
  2. Ищем последнее поступление: Мы начинаем поиск с последнего по времени документа поступления (например, ПоступлениеТоваровУслуг, ПриходныйОрдерНаТовары или аналогичный), в табличной части которого присутствует искомая номенклатура.
  3. Сверяем количество:
    • Если количество номенклатуры в найденном документе поступления больше или равно количеству, необходимому для покрытия НЗП, то мы считаем, что эта партия покрывает всю потребность. Документ найден.
    • Если количества в документе поступления недостаточно для покрытия всей потребности НЗП, мы фиксируем, сколько из НЗП покрывается этим документом, и уменьшаем нашу целевую потребность на это количество. Затем мы запоминаем этот документ как использованный и переходим к следующему шагу.
  4. Итерируем поиск: Если количество из первого документа поступления оказалось недостаточным, мы продолжаем искать следующий по времени, более ранний документ поступления той же номенклатуры. Аналогично сверяем остаток НЗП после первого документа и пришедшее количество по второму документу.
  5. Повторяем до полного покрытия: Мы продолжаем этот итеративный процесс, пока вся потребность в материалах НЗП не будет покрыта найденными партиями поступления.

Этот алгоритм позволяет нам определить, какие именно документы поступления (и, соответственно, партии) потенциально формируют текущие остатки материалов в незавершенном производстве, основываясь на хронологическом принципе списания (похожем на ФИФО, но в обратном порядке).

Подход 2: Детализированный SQL-запрос для комплексного анализа

Теперь давайте рассмотрим более сложный, но и более точный подход с использованием запросов 1С. Этот метод позволяет не только найти партии поступления, но и связать их с различными видами списаний и движений материалов. Мы будем использовать временные таблицы для пошагового сбора и анализа данных.

Цель запроса: Выявить все движения материалов (списание в производство, передача, реализация), которые могли бы быть связаны с определенными партиями поступления, и затем сопоставить их с фактическими закупками.


////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ДоговорыКонтрагентов.Ссылка КАК Договор,
	ДоговорыКонтрагентов.ОсновнойПроект КАК Проект,
	НоменклатурныеГруппы.Ссылка КАК НГ,
	НоменклатурныеГруппы.аркс_ЭтоСтроительныйОбъект
ПОМЕСТИТЬ мСоответсвиеПроектНГ
ИЗ
	Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НоменклатурныеГруппы КАК НоменклатурныеГруппы
		ПО ДоговорыКонтрагентов.ОсновнойПроект = НоменклатурныеГруппы.Проект
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	СУММА(УчетЗатратРегл.Количество) КАК Количество,
	СУММА(УчетЗатратРегл.Стоимость) КАК Стоимость,
	мАналитикаУчетаЗатрат.Затрата,
	УчетЗатратРегл.КодОперации,
	мАналитикаВидаУчета.Склад,
	мАналитикаВидаУчета.СчетУчета
ПОМЕСТИТЬ мСписаниеВПроизводство
ИЗ
	РегистрНакопления.УчетЗатратРегл КАК УчетЗатратРегл
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаВидаУчета КАК мАналитикаВидаУчета
		ПО УчетЗатратРегл.АналитикаВидаУчета = мАналитикаВидаУчета.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаЗатрат КАК мАналитикаУчетаЗатрат
		ПО УчетЗатратРегл.АналитикаУчетаЗатрат = мАналитикаУчетаЗатрат.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаРаспределенияЗатрат КАК мКорАналитикаРаспределенияЗатрат
		ПО УчетЗатратРегл.КорАналитикаРаспределенияЗатрат = мКорАналитикаРаспределенияЗатрат.Ссылка
ГДЕ
	УчетЗатратРегл.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
	И мАналитикаВидаУчета.РазделУчета = ЗНАЧЕНИЕ(Перечисление.РазделыУчета.МПЗ)
	И мКорАналитикаРаспределенияЗатрат.НоменклатурнаяГруппа В (&НоменклатурнаяГруппа)
	И УчетЗатратРегл.КодОперации = ЗНАЧЕНИЕ(Перечисление.КодыОперацийПартииТоваров.СписаниеПартийВПроизводствоОперативно)

СГРУППИРОВАТЬ ПО
	мАналитикаУчетаЗатрат.Затрата,
	мАналитикаВидаУчета.Склад,
	мАналитикаВидаУчета.СчетУчета,
	УчетЗатратРегл.КодОперации
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	СУММА(УчетЗатратРегл.Количество) КАК Количество,
	СУММА(УчетЗатратРегл.Стоимость) КАК Стоимость,
	мАналитикаУчетаЗатрат.Затрата,
	УчетЗатратРегл.КодОперации,
	мАналитикаВидаУчета.Склад,
	мАналитикаВидаУчета.СчетУчета
ПОМЕСТИТЬ мПередача
ИЗ
	РегистрНакопления.УчетЗатратРегл КАК УчетЗатратРегл
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаВидаУчета КАК мАналитикаВидаУчета
		ПО УчетЗатратРегл.АналитикаВидаУчета = мАналитикаВидаУчета.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаЗатрат КАК мАналитикаУчетаЗатрат
		ПО УчетЗатратРегл.АналитикаУчетаЗатрат = мАналитикаУчетаЗатрат.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаРаспределенияЗатрат КАК мКорАналитикаРаспределенияЗатрат
		ПО УчетЗатратРегл.КорАналитикаРаспределенияЗатрат = мКорАналитикаРаспределенияЗатрат.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПартий КАК мКорАналитикаУчетаПартий
			ВНУТРЕННЕЕ СОЕДИНЕНИЕ мСоответсвиеПроектНГ КАК мСоответсвиеПроектНГ
			ПО мКорАналитикаУчетаПартий.ДоговорКомиссионера = мСоответсвиеПроектНГ.Договор
		ПО УчетЗатратРегл.КорАналитикаУчетаПартий = мКорАналитикаУчетаПартий.Ссылка
ГДЕ
	УчетЗатратРегл.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
	И мАналитикаВидаУчета.РазделУчета = ЗНАЧЕНИЕ(Перечисление.РазделыУчета.МПЗ)
	И мСоответсвиеПроектНГ.НГ В (&НоменклатурнаяГруппа)
	И УчетЗатратРегл.КодОперации = ЗНАЧЕНИЕ(Перечисление.КодыОперацийПартииТоваров.ПередачаВПереработку)

СГРУППИРОВАТЬ ПО
	УчетЗатратРегл.КодОперации,
	мАналитикаВидаУчета.СчетУчета,
	мАналитикаУчетаЗатрат.Затрата,
	мАналитикаВидаУчета.Склад
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	СУММА(УчетЗатратРегл.Количество) КАК Количество,
	СУММА(УчетЗатратРегл.Стоимость) КАК Стоимость,
	мАналитикаУчетаЗатрат.Затрата,
	УчетЗатратРегл.КодОперации,
	мАналитикаВидаУчета.Склад,
	мАналитикаВидаУчета.СчетУчета
ПОМЕСТИТЬ мРеализация
ИЗ
	РегистрНакопления.УчетЗатратРегл КАК УчетЗатратРегл
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаВидаУчета КАК мАналитикаВидаУчета
		ПО УчетЗатратРегл.АналитикаВидаУчета = мАналитикаВидаУчета.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаЗатрат КАК мАналитикаУчетаЗатрат
		ПО УчетЗатратРегл.АналитикаУчетаЗатрат = мАналитикаУчетаЗатрат.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.УчетПродажИСебестоимости КАК УчетПродажИСебестоимости
			ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПартий КАК мАналитикаУчетаПартий
				ВНУТРЕННЕЕ СОЕДИНЕНИЕ мСоответсвиеПроектНГ КАК мСоответсвиеПроектНГ
				ПО мАналитикаУчетаПартий.ДоговорКомиссионера = мСоответсвиеПроектНГ.Договор
			ПО УчетПродажИСебестоимости.АналитикаУчетаПартий = мАналитикаУчетаПартий.Ссылка
		ПО УчетЗатратРегл.Регистратор = УчетПродажИСебестоимости.Регистратор
			И УчетЗатратРегл.НомерСтроки = УчетПродажИСебестоимости.НомерСтроки
ГДЕ
	УчетЗатратРегл.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
	И мАналитикаВидаУчета.РазделУчета = ЗНАЧЕНИЕ(Перечисление.РазделыУчета.МПЗ)
	И УчетЗатратРегл.КодОперации = ЗНАЧЕНИЕ(Перечисление.КодыОперацийПартииТоваров.Реализация)
	И мСоответсвиеПроектНГ.НГ В (&НоменклатурнаяГруппа)

СГРУППИРОВАТЬ ПО
	УчетЗатратРегл.КодОперации,
	мАналитикаВидаУчета.Склад,
	мАналитикаВидаУчета.СчетУчета,
	мАналитикаУчетаЗатрат.Затрата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	мСписаниеВПроизводство.Склад,
	мСписаниеВПроизводство.СчетУчета,
	мСписаниеВПроизводство.Затрата
ПОМЕСТИТЬ мСписокДляОтбораЗакупок
ИЗ
	мСписаниеВПроизводство КАК мСписаниеВПроизводство

ОБЪЕДИНИТЬ

ВЫБРАТЬ
	мПередача.Склад,
	мПередача.СчетУчета,
	мПередача.Затрата
ИЗ
	мПередача КАК мПередача

ОБЪЕДИНИТЬ

ВЫБРАТЬ
	мРеализация.Склад,
	мРеализация.СчетУчета,
	мРеализация.Затрата
ИЗ
	мРеализация КАК мРеализация
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ХозрасчетныйОборотыДтКт.СубконтоКт1 КАК Контрагент,
	ХозрасчетныйОборотыДтКт.СуммаОборот КАК СуммаПриход,
	ХозрасчетныйОборотыДтКт.КоличествоОборотДт КАК КоличествоПриход,
	ХозрасчетныйОборотыДтКт.СубконтоДт1 КАК Склад,
	ХозрасчетныйОборотыДтКт.СубконтоДт2 КАК Затрата,
	ХозрасчетныйОборотыДтКт.СчетДт КАК СчетУчета
ПОМЕСТИТЬ мЗакупка
ИЗ
	РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(, , Авто, , &СубконтоДТ, , &СубконтоКТ, ) КАК ХозрасчетныйОборотыДтКт
ГДЕ
	(ХозрасчетныйОборотыДтКт.СчетДт, ХозрасчетныйОборотыДтКт.СубконтоДт1, ХозрасчетныйОборотыДтКт.СубконтоДт2) В
			(ВЫБРАТЬ
				Таб.СчетУчета,
				Таб.Склад,
				Таб.Затрата
			ИЗ
				мСписокДляОтбораЗакупок КАК Таб)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	СУММА(Таб.Количество) КАК Количество,
	СУММА(Таб.Стоимость) КАК Стоимость,
	Таб.Затрата,
	Таб.КодОперации,
	мЗакупка.Контрагент,
	СУММА(мЗакупка.СуммаПриход) КАК СуммаПриход,
	СУММА(мЗакупка.КоличествоПриход) КАК КоличествоПриход,
	Таб.Склад,
	Таб.СчетУчета
ИЗ
	(ВЫБРАТЬ
		мСписаниеВПроизводство.Количество КАК Количество,
		мСписаниеВПроизводство.Стоимость КАК Стоимость,
		мСписаниеВПроизводство.Затрата КАК Затрата,
		мСписаниеВПроизводство.КодОперации КАК КодОперации,
		мСписаниеВПроизводство.Склад КАК Склад,
		мСписаниеВПроизводство.СчетУчета КАК СчетУчета
	ИЗ
		мСписаниеВПроизводство КАК мСписаниеВПроизводство
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		мПередача.Количество,
		мПередача.Стоимость,
		мПередача.Затрата,
		мПередача.КодОперации,
		мПередача.Склад,
		мПередача.СчетУчета
	ИЗ
		мПередача КАК мПередача
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		мРеализация.Количество,
		мРеализация.Стоимость,
		мРеализация.Затрата,
		мРеализация.КодОперации,
		мРеализация.Склад,
		мРеализация.СчетУчета
	ИЗ
		мРеализация КАК мРеализация) КАК Таб
		ЛЕВОЕ СОЕДИНЕНИЕ мЗакупка КАК мЗакупка
		ПО Таб.Затрата = мЗакупка.Затрата
			И Таб.Склад = мЗакупка.Склад
			И Таб.СчетУчета = мЗакупка.СчетУчета

СГРУППИРОВАТЬ ПО
	Таб.КодОперации,
	Таб.Затрата,
	мЗакупка.Контрагент,
	Таб.Склад,
	Таб.СчетУчета

Давайте разберем этот запрос по шагам, чтобы понять его логику:

  1. Временная таблица мСоответсвиеПроектНГ:

    Мы начинаем с создания вспомогательной таблицы, которая связывает договоры контрагентов с их основными проектами и номенклатурными группами. Это позволяет нам в дальнейшем фильтровать данные по конкретным проектам или группам номенклатуры, что часто бывает необходимо для детализированного анализа.

    Используются справочники Справочник.ДоговорыКонтрагентов и Справочник.НоменклатурныеГруппы.

  2. Временная таблица мСписаниеВПроизводство:

    Здесь мы собираем информацию о материалах, списанных непосредственно в производство. Мы используем РегистрНакопления.УчетЗатратРегл, который хранит движения по затратам. Фильтруем по ВидДвиженияНакопления.Расход, РазделыУчета.МПЗ (материально-производственные запасы) и КодыОперацийПартииТоваров.СписаниеПартийВПроизводствоОперативно. Это позволяет нам увидеть количество и стоимость материалов, переданных в НЗП.

    Соединяемся с регистрами сведений АналитикаВидаУчета, АналитикаУчетаЗатрат и АналитикаРаспределенияЗатрат для получения детальной аналитики по складу, счету учета и самой затрате.

  3. Временная таблица мПередача:

    Аналогично предыдущей, эта таблица собирает данные о материалах, переданных в переработку (что также может рассматриваться как часть НЗП, но у внешних контрагентов). Здесь также используется РегистрНакопления.УчетЗатратРегл, но с фильтром по КодыОперацийПартииТоваров.ПередачаВПереработку. Важным дополнением является соединение через АналитикаУчетаПартий с нашей первой таблицей мСоответсвиеПроектНГ для фильтрации по договорам и проектам.

  4. Временная таблица мРеализация:

    Эта таблица собирает данные о материалах, которые были реализованы. Хотя реализация напрямую не связана с НЗП, она может быть частью общего цикла движения материалов и помогает в комплексном анализе партий. Фильтр здесь — КодыОперацийПартииТоваров.Реализация. Также используется РегистрНакопления.УчетПродажИСебестоимости для дополнительной связи.

  5. Временная таблица мСписокДляОтбораЗакупок:

    Мы объединяем ключевые аналитические разрезы (склад, счет учета, затрата) из всех предыдущих таблиц списаний/передач/реализаций. Эта таблица будет использоваться как фильтр для следующего шага – поиска фактических закупок.

  6. Временная таблица мЗакупка:

    Здесь мы обращаемся к РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт, чтобы получить информацию о приходах материалов. Используя фильтр по мСписокДляОтбораЗакупок, мы выбираем только те закупки, которые относятся к нашим списаниям. Мы получаем контрагента, сумму и количество прихода, а также склад, затрату и счет учета.

    Параметры &СубконтоДТ и &СубконтоКТ позволяют нам гибко настроить отбор по субконто дебета и кредита, что критически важно для корректного анализа бухгалтерских проводок.

  7. Финальный запрос:

    В завершение мы объединяем все наши движения (списания, передачи, реализации) из первых трех временных таблиц. Затем с помощью ЛЕВОЕ СОЕДИНЕНИЕ мы связываем эти обобщенные движения с данными о закупках из таблицы мЗакупка. Соединение происходит по полям Затрата, Склад и СчетУчета. Это позволяет нам увидеть, какие списанные материалы потенциально соответствуют каким закупкам, и тем самым определить партии поступления.

    Группировка по КодОперации, Затрата, Контрагент, Склад, СчетУчета позволяет получить сводные данные по каждому типу движения и связанной с ним закупке.

Этот запрос дает нам мощный инструмент для анализа движения партий и их связи с различными операциями. Он требует хорошего понимания структуры данных в вашей конфигурации 1С, особенно регистров и аналитик учета затрат и партий.

Стандартные механизмы 1С для партионного учета и анализа

Помимо создания собственных отчетов и запросов, важно использовать и понимать стандартные возможности 1С, которые по умолчанию предназначены для партионного учета и определения партий в НЗП. Давайте выясним, как система решает эту задачу.

Методы оценки и списания материалов:

Система 1С поддерживает различные методы оценки стоимости запасов при их списании в производство. Эти методы напрямую влияют на то, как "партии" материалов учитываются в НЗП и как их стоимость формируется:

  1. ФИФО (FIFO - First In, First Out): Материалы, поступившие первыми, списываются первыми. Это означает, что в НЗП остаются материалы из последних по времени партий поступления. Метод ФИФО часто используется для отражения фактического движения запасов и может быть реализован с помощью регистров накопления, отслеживающих остатки и обороты в разрезе партий.
  2. По средней стоимости: Списание происходит по средневзвешенной стоимости всех имеющихся на складе материалов данного наименования. При этом подходе концепция "партии поступления" становится менее значимой для стоимостной оценки, так как все партии усредняются. Однако для количественного учета и прослеживаемости партий все равно может потребоваться их детализация.
  3. ЛИФО (LIFO - Last In, First Out): Материалы, поступившие последними, списываются первыми. В НЗП остаются материалы из ранних партий. Важно отметить, что в российском учете метод ЛИФО не применяется с 2015 года, но может встречаться в старых системах или для специфических управленческих целей.
  4. По стоимости первых по времени поступления (ФИФО скользящая оценка): Отличается от классического ФИФО тем, что средняя стоимость рассчитывается при каждом поступлении, а не только на конец месяца.

Автоматизация партионного учета в 1С:

Для автоматического определения партий поступления, используемых в НЗП, 1С использует мощный механизм расчета себестоимости, который запускается регламентными операциями, чаще всего при выполнении процедуры "Закрытие месяца". Этот механизм анализирует движения по специализированным регистрам накопления, таким как Затраты или ПартииТоваровНаСкладах, и сопоставляет расход материалов с их поступлением согласно выбранному в учетной политике методу оценки.

Детализация партионного учета обеспечивается за счет ведения аналитики по:

Это позволяет отслеживать путь конкретной единицы материала от поставщика до готовой продукции, даже если для стоимостного учета используется усреднение.

Особенности учета в НЗП:

Материалы, переданные в производство, но еще не использованные для создания готовой продукции, остаются в НЗП. Их стоимость продолжает учитываться на соответствующих счетах затрат (например, на счетах 20, 23, 25, 26 в бухгалтерском учете). Для определения конкретных партий, находящихся в НЗП, необходимо анализировать остатки по регистрам, которые ведут учет в разрезе партий (например, регистр ПартииТоваровНаСкладах или специализированные регистры по материалам в производстве).

Если материалы передаются в НЗП, но их потребление не привязано к конкретным партиям до момента выпуска продукции, то на счетах НЗП они могут учитываться по средней стоимости или другим методам, а уже при фактическом списании в производство или выпуске продукции происходит детализация по партиям в соответствии с выбранной учетной политикой.

Инструменты для анализа:

Помимо внешних отчетов и сложных запросов, как мы рассмотрели выше, для анализа партий в НЗП в 1С используются стандартные отчеты. Мы рекомендуем обратить внимание на следующие:

  1. Ведомость по товарам на складах (по партиям): Этот отчет позволяет увидеть остатки и обороты материалов в разрезе партий. Его можно адаптировать для анализа материалов, находящихся в производстве, если настроена соответствующая аналитика.
  2. Анализ себестоимости выпуска: Помогает понять, из каких партий и по какой стоимости были списаны материалы на конкретный выпуск продукции.
  3. Отчеты по движению материалов в производстве: Специализированные отчеты, которые могут показывать, какие материалы и в каком количестве были переданы в НЗП, а затем использованы. Названия таких отчетов могут варьироваться в зависимости от конфигурации (например, в УПП/ERP это могут быть отчеты подсистемы "Производство").

Таким образом, для более глубокого понимания и контроля партий поступления материалов в НЗП в 1С, помимо предложенных нами методов, важно учитывать стандартные возможности системы по партионному учету, выбранные методы оценки запасов и активно использовать специализированные отчеты для анализа движений и остатков в разрезе партий. Сочетание этих подходов позволит вам получить полную и точную картину.

← К списку