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

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

При формировании отчетов по запасам на счету 10 «Материалы» программисты часто сталкиваются с ситуацией, когда запрос к регистру бухгалтерии выводит количественные остатки по складам, но поле суммы остается нулевым или пустым. Проанализируем, почему возникает эта проблема и какими способами её можно решить.

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

Разберем механику работы платформы 1С:Предприятие с субконто. В типовых конфигурациях (например, 1С:Бухгалтерия) для счета 10 по умолчанию настроен следующий состав аналитики:

  1. Субконто 1 («Номенклатура»): ведется количественный и суммовой учет.
  2. Субконто 2 («Склады»): по умолчанию ведется только количественный учет.

Если для субконто «Склады» на уровне плана счетов или параметров учета отключен признак «Суммовой», платформа физически не рассчитывает и не хранит суммовые показатели в разрезе складов в таблицах регистра бухгалтерии. При попытке получить ресурс СуммаОстаток с детализацией по несуммовому субконто виртуальная таблица РегистрБухгалтерии.Хозрасчетный.Остатки всегда возвращает нулевое значение.

Варианты решения задачи

Рассмотрим два основных подхода к получению данных по складам с суммами.

Способ 1. Включение суммового учета по складам в настройках программы

Если методология учета предприятия допускает расчет себестоимости отдельно по каждому складу, можно включить суммовой учет в настройках параметров учета (раздел настройки плана счетов — учет запасов). Порядок действий следующий:

  1. Переключить настройку учета запасов в режим «По количеству и сумме».
  2. После изменения настройки платформа сделает субконто «Склады» суммовым.
  3. Выполнить перепроведение документов движения ТМЦ и регламентные операции закрытия месяца (расчет себестоимости).

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

Способ 2. Расчет сумм в запросе пропорционально количеству

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

Практическая реализация расчета суммы в запросе

Проанализируем алгоритм построения запроса с использованием временных таблиц:

  1. Во временной таблице ВТОстаткиНоменклатуры получаем суммовой и количественный остаток в целом по номенклатуре (без детализации по складам).
  2. Во временной таблице ВТОстаткиСклад получаем количественные остатки с детализацией по номенклатуре и складам.
  3. В основном запросе соединяем таблицы по номенклатуре и вычисляем сумму для каждого склада по формуле: (КоличествоНаСкладе / ОбщееКоличество) * ОбщаяСумма.

Рассмотрим пример кода на языке запросов 1С:


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

// Установка параметров запроса
Запрос.УстановитьПараметр("ДатаОстатков", ТекущаяДата());
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.Материалы);
Запрос.УстановитьПараметр("Организация", Организация);

// Параметры субконто
Запрос.УстановитьПараметр("ВидСубконтоНоменклатура", ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура);

МассивСубконто = Новый Массив;
МассивСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура);
МассивСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады);
Запрос.УстановитьПараметр("МассивВидовСубконто", МассивСубконто);

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

Особенности и нюансы расчётного метода

При использовании расчетного распределения сумм в запросе необходимо учитывать следующие важные моменты:

  1. Защита от деления на ноль: В запросе обязательно должна присутствовать конструкция ВЫБОР КОГДА ... = 0. Если по позиции номенклатуры количественный остаток равен нулю (например, из-за суммовой погрешности при списании), деление без проверки вызовет ошибку выполнения запроса.
  2. Погрешность округления: При использовании функции ВЫРАЗИТЬ(... КАК ЧИСЛО(15, 2)) сумма распределенных по складам значений в редких случаях может расходиться с итоговой суммой по номенклатуре на несколько копеек из-за округления каждой строки.
  3. Комплексные конфигурации (ERP, КА, УТ): В решениях уровня ERP или Комплексная автоматизация оперативный учет материалов и их себестоимость ведутся в специализированных регистрах накопления (например, РегистрНакопления.СебестоимостьТоваров или РегистрНакопления.ДетализацияПартийТоваровДляНДСиУСН). В таких системах для получения точной себестоимости по складам рекомендуется обращаться к виртуальным таблицам этих регистров накопления, а не к регистру бухгалтерии.
← На главную