Как получить остатки и обороты номенклатуры в суммовом выражении в 1С

Программист 1С v8.3 (Обычные формы) Управленческий учет Торговля и дистрибуция
← На главную

При разработке отчетов и обработок часто возникает задача получить данные о движении товарно-материальных ценностей не только в количественном, но и в денежном выражении (начальный остаток, приход, расход, конечный остаток). Типичная ошибка начинающих разработчиков — попытка извлечь стоимостные показатели из регистра накопления ТоварыНаСкладах.

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

Архитектура складских и стоимостных регистров в 1С

В типовых конфигурациях 1С (таких как УТ 10.3, УПП, УТП и аналогичных) реализовано четкое разделение складского и финансового учета:

  1. Регистр накопления ТоварыНаСкладах предназначен исключительно для оперативного складского количественного учета. В его ресурсах присутствует только Количество.
  2. Регистр накопления ПартииТоваровНаСкладах используется при классическом партионном учете (FIFO, по средней). Он хранит как количество, так и стоимостные ресурсы: Стоимость, НДС и другие. Для регламентированного учета могут также использоваться регистры ПартииТоваровНаСкладахБухгалтерскийУчет и ПартииТоваровНаСкладахНалоговыйУчет.
  3. Регистр накопления УчетЗатрат (или УчетЗатратРегл) применяется в конфигурациях с включенным режимом расширенной аналитики учета затрат (РАУЗ). При РАУЗ вся себестоимость аккумулируется в данном регистре.

Получение суммовых остатков и оборотов при партионном учете

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

Посмотрим на пример программного формирования запроса:


ЗапросОборотНоменклатур = Новый Запрос;
ЗапросОборотНоменклатур.Текст = 
"ВЫБРАТЬ
|	ПартииОстаткиИОбороты.Номенклатура КАК Номенклатура,
|	ПартииОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
|	ПартииОстаткиИОбороты.СтоимостьНачальныйОстаток КАК СтоимостьНачальныйОстаток,
|	ПартииОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
|	ПартииОстаткиИОбороты.СтоимостьПриход КАК СтоимостьПриход,
|	ПартииОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход,
|	ПартииОстаткиИОбороты.СтоимостьРасход КАК СтоимостьРасход,
|	ПартииОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
|	ПартииОстаткиИОбороты.СтоимостьКонечныйОстаток КАК СтоимостьКонечныйОстаток
|ИЗ
|	РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(
|		&ДатаНачала,
|		&ДатаОкончания,
|		,
|		,
|		Номенклатура = &ВхНоменклатура
|			И Склад В (&ВхСклады)
|	) КАК ПартииОстаткиИОбороты";

ГраницаКонца = Новый Граница(КонецДня(Объект.ДатаКонца), ВидГраницы.Включая);

ЗапросОборотНоменклатур.УстановитьПараметр("ВхСклады", Объект.Склад);
ЗапросОборотНоменклатур.УстановитьПараметр("ВхНоменклатура", вхНоменклатура);
ЗапросОборотНоменклатур.УстановитьПараметр("ДатаНачала", НачалоДня(Объект.ДатаНачало));
ЗапросОборотНоменклатур.УстановитьПараметр("ДатаОкончания", ГраницаКонца);

РезультатЗапроса = ЗапросОборотНоменклатур.Выполнить();

Ошибки при составлении запросов к остаткам и оборотам

Разберем важные нюансы, которые необходимо учитывать при работе с виртуальными таблицами:

  1. Перенос условий в параметры виртуальной таблицы: Никогда не накладывайте фильтры по измерениям в блоке ГДЕ. Условия Номенклатура = &ВхНоменклатура и Склад В (&ВхСклады) должны находиться исключительно в параметре УсловиеОтбора самой виртуальной таблицы. Иначе СУБД сначала рассчитает итоги по всей базе, а затем отфильтрует результат, что вызовет сильные просадки производительности.
  2. Отказ от лишней периодичности: Если задача — получить сводные итоги за период без детализации по дням или регистраторам, параметры периодичности (третий и четвертый параметры) следует оставить пустыми. Указание Период и ДвиженияИГраницыПериода заставляет платформу рассчитывать остатки на каждый момент движения внутри интервала.
  3. Точность границ периода: Использование объекта Граница с видом ВидГраницы.Включая гарантирует корректный захват документов, проведенных в последнюю секунду дня (23:59:59).
  4. Суммовой учет по складам: В настройках параметров учета флаг суммового учета по складам может быть отключен. В этом случае измерение Склад в партиях может не заполняться, а себестоимость будет рассчитываться в целом по организации.
  5. Актуальность партий: Если в системе используется неоперативное проведение документов по партиям, суммы списания и остатков будут корректны только после выполнения регламентной обработки Проведение по партиям.

Альтернативные способы получения сумм

В зависимости от поставленной задачи можно использовать другие источники стоимостных данных:

  1. Регистр бухгалтерии: Если требуются данные регламентированного бухгалтерского учета, используйте виртуальную таблицу ОстаткиИОбороты регистра бухгалтерии (счета 41, 281 и т. д.), где остатки и обороты рассчитываются в разрезе субконто Номенклатура, Склады и Партии.
  2. Оценка в учетных ценах: Если требуется сумма не по фактической себестоимости партии, а в прайсовых или плановых ценах, выполните левое соединение регистра ТоварыНаСкладах.ОстаткиИОбороты со срезом последних регистра сведений ЦеныНоменклатуры и перемножьте количество на цену.
← На главную