Как вывести сумму и количество в отчете по документу «Требование-накладная»?

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

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

Анализ типичной ошибки при составлении запроса

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


|ИЗ
|    Документ.ТребованиеНакладная КАК ТребованиеНакладная
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
|    ПО ТребованиеНакладная.Материалы.Номенклатура = Хозрасчетный.Регистратор

В данном фрагменте мы видим сразу две критические ошибки. Во-первых, поле Регистратор в регистре содержит ссылку на документ, а не на объект справочника Номенклатура. Во-вторых, даже если соединение выполнено по регистратору, без привязки к конкретным строкам или аналитике (субконто), суммы будут дублироваться или выводиться неверно. Выясним причину: регистр бухгалтерии хранит данные в разрезе проводок, и для получения корректной суммы списания конкретного материала нужно обращаться к субконто счета учета.

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

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

Рассмотрим пример исправленного запроса, который позволяет вытащить номенклатуру, склад, количество и сумму одним набором данных:


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

Проанализируем, почему этот вариант работает лучше:

  1. Источник данных: Мы используем таблицу ДвиженияССубконто. Она автоматически разворачивает аналитику (Субконто1, Субконто2) в отдельные поля, что упрощает доступ к номенклатуре и складу.
  2. Связь данных: Сумма и количество берутся из одной проводки. Нам не нужно сопоставлять строки документа и записи регистра — они уже связаны в учетной системе.
  3. Производительность: Фильтрация по счету (например, счет 10 «Материалы») существенно ускоряет выполнение запроса, отсекая лишние бухгалтерские операции.

Нюансы работы с субконто и виртуальными таблицами

Важно помнить, что обращение к СубконтоКт1 или СубконтоКт2 напрямую («жесткое кодирование») может привести к ошибкам, если в плане счетов изменен порядок субконто. Профессиональный подход подразумевает использование функции ВЫРАЗИТЬ или обращение к типам через параметры виртуальной таблицы.

Разберем, как сделать запрос более гибким. Вместо физической таблицы движений лучше использовать виртуальную таблицу Обороты. Это позволит избежать дублирования строк в случае сложных проводок. Посмотрим на пример структуры такого запроса:


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

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

Особенности расчета себестоимости в 1С

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

Обратите внимание на следующие моменты:

Практические рекомендации по выводу отчета

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


Выборка = Запрос.Выполнить().Выбрать();
нпп = 0;
Пока Выборка.Следующий() Цикл
    нпп = нпп + 1;
    ОбластьДетальныхЗаписей.Параметры.Нпп = нпп;
    ОбластьДетальныхЗаписей.Параметры.Номенклатура = Выборка.Номенклатура;
    ОбластьДетальныхЗаписей.Параметры.Количество = Выборка.Количество;
    ОбластьДетальныхЗаписей.Параметры.Сумма = Выборка.Сумма;
    ТабДок.Вывести(ОбластьДетальныхЗаписей);
КонецЦикла;

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

Подведем итог: ключ к успешному отчету по суммам в Требовании-накладной — это отказ от прямого чтения табличных частей документа в пользу работы с регистрами бухгалтерии и их виртуальными таблицами.

← На главную