Топ-5 запросов СКД для инвентаризации по ФСБУ 28/2023

Коротко: для инвентаризации запасов по ФСБУ 28/2023 в 1С нужны 5 ключевых запросов СКД: учётные остатки на дату приказа, фактические данные подсчёта, расхождения (недостачи/излишки), оценка по чистой стоимости продажи и резерв под обесценение. Все строятся на регистре «ТоварыНаСкладах», виртуальной таблице .Остатки() и соединениях с документом инвентаризации. Ниже — готовые тексты запросов с комментариями.
- Запрос №1 — учётные остатки на дату приказа через .Остатки(&ДатаИнвентаризации).
- Запрос №2 — фактическое количество из табличной части документа «ИнвентаризацияТоваров».
- Запрос №3 — расхождения с разбивкой на излишки и недостачи через ВЫБОР КОГДА.
- Запрос №4 — чистая стоимость продажи (ЧСП) для теста на обесценение по ФСБУ 5/2019.
- Запрос №5 — сводная ведомость с резервом под снижение стоимости.
Почему инвентаризация по ФСБУ 28/2023 требует новых запросов?
С 1 апреля 2025 года ФСБУ 28/2023 «Инвентаризация» стал обязательным. Стандарт изменил подход к документированию: теперь важна не только фиксация фактического наличия, но и привязка результатов к дате принятия решения о проведении инвентаризации, а также проверка балансовой стоимости запасов на соответствие чистой стоимости продажи по ФСБУ 5/2019.
Типовая обработка «ИнвентаризацияТоваров» в 1С:Бухгалтерии и 1С:ERP формирует сличительную ведомость, но для аналитики, контроля и формирования резерва под обесценение бухгалтеру и разработчику нужны собственные отчёты на СКД. Подробнее о подготовке базы мы писали в материале про чек-лист готовности 1С к ФСБУ 28/2023.
Главное отличие нового стандарта — инвентаризация теперь не самоцель, а инструмент подтверждения достоверности оценки активов. Поэтому запросы должны сравнивать не только количество, но и стоимость.
На каких регистрах строить запросы инвентаризации?
Для запасов в типовых конфигурациях используются следующие объекты метаданных:
| Объект | Назначение | Тип |
|---|---|---|
| РегистрНакопления.ТоварыНаСкладах | Количественный учёт по складам | Остатки |
| РегистрБухгалтерии.Хозрасчетный | Стоимостной учёт (счёт 10, 41, 43) | Остатки |
| Документ.ИнвентаризацияТоваров | Фактические данные подсчёта | Документ |
| РегистрСведений.ЦеныНоменклатуры | Цены продажи для расчёта ЧСП | Сведения |
Ключевой момент — корректное использование виртуальных таблиц. Подбор остатков должен выполняться на дату, указанную в приказе о проведении инвентаризации, а не на текущий момент.
Запрос №1: учётные остатки на дату приказа
Первый и базовый запрос получает учётное количество и стоимость на дату принятия решения. Именно эти данные сравниваются с фактическим наличием.
ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.Склад КАК Склад,
| ТоварыНаСкладахОстатки.Характеристика КАК Характеристика,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК УчетноеКоличество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаИнвентаризации, Склад = &Склад) КАК ТоварыНаСкладахОстатки
|ГДЕ
| ТоварыНаСкладахОстатки.КоличествоОстаток <> 0Обратите внимание: параметр &ДатаИнвентаризации должен включать конец дня. В коде формирования параметров используйте границу периода:
// Формируем дату на конец дня приказа об инвентаризации
ДатаПриказа = Объект.Дата;
ДатаНаКонецДня = КонецДня(ДатаПриказа);
Компоновщик.НастройкиЗагрузки.ПараметрыДанных.УстановитьЗначениеПараметра(
"ДатаИнвентаризации", ДатаНаКонецДня);Запрос №2: фактическое количество из документа инвентаризации
Второй запрос извлекает результаты подсчёта из табличной части документа «ИнвентаризацияТоваров». Эти цифры заносит инвентаризационная комиссия.
ВЫБРАТЬ
| ИнвентаризацияТовары.Номенклатура КАК Номенклатура,
| ИнвентаризацияТовары.Характеристика КАК Характеристика,
| СУММА(ИнвентаризацияТовары.КоличествоФакт) КАК ФактическоеКоличество
|ИЗ
| Документ.ИнвентаризацияТоваров.Товары КАК ИнвентаризацияТовары
|ГДЕ
| ИнвентаризацияТовары.Ссылка = &ДокументИнвентаризации
|СГРУППИРОВАТЬ ПО
| ИнвентаризацияТовары.Номенклатура,
| ИнвентаризацияТовары.ХарактеристикаГруппировка нужна на случай, если одна и та же номенклатура встречается в нескольких строках документа (например, при подсчёте партиями). Функция СУММА() объединит количество.
Запрос №3: расчёт расхождений (недостачи и излишки)
Третий запрос — ядро сличительной ведомости. Здесь соединяются учётные и фактические данные, а отклонение классифицируется через конструкцию ВЫБОР КОГДА.
ВЫБРАТЬ
| ЕСТЬNULL(Учет.Номенклатура, Факт.Номенклатура) КАК Номенклатура,
| ЕСТЬNULL(Учет.УчетноеКоличество, 0) КАК УчетноеКоличество,
| ЕСТЬNULL(Факт.ФактическоеКоличество, 0) КАК ФактическоеКоличество,
| ЕСТЬNULL(Факт.ФактическоеКоличество, 0) - ЕСТЬNULL(Учет.УчетноеКоличество, 0) КАК Отклонение,
| ВЫБОР
| КОГДА ЕСТЬNULL(Факт.ФактическоеКоличество, 0) > ЕСТЬNULL(Учет.УчетноеКоличество, 0)
| ТОГДА "Излишек"
| КОГДА ЕСТЬNULL(Факт.ФактическоеКоличество, 0) < ЕСТЬNULL(Учет.УчетноеКоличество, 0)
| ТОГДА "Недостача"
| ИНАЧЕ "Совпадение"
| КОНЕЦ КАК ТипРасхождения
|ИЗ
| УчетныеОстатки КАК Учет
| ПОЛНОЕ СОЕДИНЕНИЕ ФактическиеДанные КАК Факт
| ПО Учет.Номенклатура = Факт.Номенклатура
| И Учет.Характеристика = Факт.ХарактеристикаЗдесь критично применять ПОЛНОЕ СОЕДИНЕНИЕ: оно покажет не только расхождения по учтённым позициям, но и излишки (товар есть в наличии, но отсутствует в учёте). Функция ЕСТЬNULL() заменяет пустые значения нулями — никогда не используйте SQL-аналог ISNULL в языке запросов 1С. О типичных ошибках мы разбирали в статье про оптимизацию запросов 1С в платформе 8.3.25.
Как объединить три запроса во временные таблицы?
Запросы №1, №2 и №3 удобно объединить в пакет с временными таблицами через менеджер временных таблиц:
// Помещаем учётные остатки во временную таблицу
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура КАК Номенклатура,
| ОстаткиТоваров.КоличествоОстаток КАК УчетноеКоличество
|ПОМЕСТИТЬ ВТУчетныеОстатки
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаИнвентаризации) КАК ОстаткиТоваров";
Запрос.УстановитьПараметр("ДатаИнвентаризации", КонецДня(ДатаПриказа));
Запрос.Выполнить();Запрос №4: чистая стоимость продажи (ЧСП) для теста на обесценение
ФСБУ 5/2019 требует оценивать запасы по наименьшей из двух величин — фактической себестоимости или чистой стоимости продажи. Инвентаризация по ФСБУ 28/2023 — повод для проверки этого условия. Запрос №4 рассчитывает ЧСП из регистра цен продажи.
ВЫБРАТЬ
| ЦеныСрезПоследних.Номенклатура КАК Номенклатура,
| ЦеныСрезПоследних.Цена КАК ЦенаПродажи,
| ВЫРАЗИТЬ(ЦеныСрезПоследних.Цена * 0.95 КАК ЧИСЛО(15, 2)) КАК ЧистаяСтоимостьПродажи
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаИнвентаризации,
| ВидЦены = &ВидЦеныПродажи) КАК ЦеныСрезПоследних
|ГДЕ
| ЦеныСрезПоследних.Цена > 0Коэффициент 0.95 здесь условно отражает предполагаемые затраты на продажу (5%). В реальной практике эта величина зависит от учётной политики. Функция ВЫРАЗИТЬ() приводит результат к нужной разрядности — это корректный аналог SQL-функции CAST, который в языке запросов 1С использовать нельзя.
Подробнее о методике расчёта обесценения смотрите в материале про дашборд обесценения запасов по ФСБУ 5/2019.
Запрос №5: сводная ведомость с резервом под снижение стоимости
Финальный запрос объединяет фактические остатки, себестоимость и ЧСП, рассчитывая сумму резерва под обесценение. Резерв создаётся, когда балансовая стоимость превышает чистую стоимость продажи.
ВЫБРАТЬ
| Остатки.Номенклатура КАК Номенклатура,
| Остатки.ФактическоеКоличество КАК Количество,
| Остатки.Себестоимость КАК Себестоимость,
| ЧСП.ЧистаяСтоимостьПродажи КАК ЧСП,
| ВЫБОР
| КОГДА Остатки.Себестоимость > ЕСТЬNULL(ЧСП.ЧистаяСтоимостьПродажи, Остатки.Себестоимость)
| ТОГДА (Остатки.Себестоимость - ЧСП.ЧистаяСтоимостьПродажи) * Остатки.ФактическоеКоличество
| ИНАЧЕ 0
| КОНЕЦ КАК СуммаРезерва
|ИЗ
| ВТФактическиеОстатки КАК Остатки
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЧистаяСтоимость КАК ЧСП
| ПО Остатки.Номенклатура = ЧСП.Номенклатура
|УПОРЯДОЧИТЬ ПО
| СуммаРезерва УБЫВСортировка по убыванию суммы резерва позволяет бухгалтеру сразу видеть позиции с максимальным обесценением. Эти данные ложатся в основу проводки Дт 91.02 Кт 14 «Резервы под снижение стоимости материальных ценностей».
Как настроить ресурсы и итоги в СКД?
В компоновщике результата задайте ресурсы с агрегатной функцией Сумма() для полей СуммаРезерва, Себестоимость и Количество. Для группировки используйте поле Номенклатура и при необходимости родителя — группу номенклатуры. Это даст иерархическую ведомость с промежуточными итогами по складам и группам.
Какие ошибки чаще всего допускают при написании этих запросов?
- Остатки на текущую дату вместо даты приказа. Виртуальная таблица .Остатки() без параметра берёт актуальный момент — это искажает сличительную ведомость.
- Внутреннее соединение вместо полного. При ВНУТРЕННЕМ СОЕДИНЕНИИ теряются излишки и недостачи по позициям, отсутствующим в одной из таблиц.
- Игнорирование характеристик и серий. Если в учёте ведутся характеристики, соединение только по номенклатуре даёт задвоение строк.
- Использование SQL-синтаксиса. COALESCE, CASE WHEN, CAST не работают в языке запросов 1С — только ЕСТЬNULL(), ВЫБОР КОГДА, ВЫРАЗИТЬ().
Подробный обзор изменений учёта запасов и трендов автоматизации — в статье про учёт запасов в 1С:ERP 2026.
Часто задаваемые вопросы
На какую дату брать учётные остатки для инвентаризации?
На дату принятия решения о проведении инвентаризации (дату приказа), указанную в документе. В запросе используйте границу конца дня через функцию КонецДня() — иначе движения за день приказа не попадут в остатки.
Чем ПОЛНОЕ СОЕДИНЕНИЕ лучше ЛЕВОГО для сличительной ведомости?
ПОЛНОЕ СОЕДИНЕНИЕ показывает позиции из обеих таблиц: и недостачи (есть в учёте, нет по факту), и излишки (есть по факту, нет в учёте). ЛЕВОЕ соединение покажет только учтённые позиции и пропустит излишки.
Можно ли использовать готовый отчёт вместо самописных запросов СКД?
Типовая «Сличительная ведомость» (ИНВ-19) формируется автоматически из документа. Но для расчёта резерва под обесценение по ФСБУ 5/2019 и теста на ЧСП штатных отчётов нет — здесь нужны запросы №4 и №5.
Как обрабатывать характеристики и серии номенклатуры?
Добавляйте поля Характеристика и Серия во все запросы и в условия соединения. Иначе при пересортице одна номенклатура с разными характеристиками сольётся в одну строку и расхождения посчитаются неверно.
Где взять чистую стоимость продажи для расчёта обесценения?
Из регистра ЦеныНоменклатуры.СрезПоследних с фильтром по виду цены продажи, за минусом предполагаемых затрат на продажу. В сложных случаях ЧСП оценивает экономист отдельно по каждой группе запасов.
Нужно ли учитывать НДС в стоимости при расчёте резерва?
Балансовая стоимость запасов учитывается без возмещаемого НДС. Чистую стоимость продажи также берут без НДС, чтобы сравнение было корректным.
Какая проводка формируется по результатам теста на обесценение?
При превышении себестоимости над ЧСП создаётся резерв: Дт 91.02 Кт 14. При восстановлении стоимости — обратная проводка Дт 14 Кт 91.01.
Все пять запросов легко адаптируются под конкретную конфигурацию: 1С:Бухгалтерию, 1С:ERP или УНФ. Главное — соблюдать привязку к дате приказа, использовать полное соединение для сличения и применять язык запросов 1С без SQL-аналогов. Это обеспечит соответствие ФСБУ 28/2023 и достоверную оценку запасов по ФСБУ 5/2019.
Если нужна доработка отчётов СКД, настройка резерва под обесценение или полное внедрение инвентаризации по новому стандарту — найдите специалиста для решения этой задачи на koderion.ru.
Найдите специалиста для решения этой задачи на koderion.ru