Как получить в запросе движения с нулевой стоимостью из регистра «Партии товаров на складах»

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

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

Анализ проблемы: почему исчезают записи с нулевой суммой

Рассмотрим типовую ситуацию в ювелирной отрасли или на производстве, связанном с драгоценными металлами. Часто возникает необходимость скорректировать только физический вес изделия, не меняя его общую балансовую стоимость. Для этого используется документ «Акт расхождения веса», который делает запись в регистр ПартииТоваровНаСкладах: приходуется определенное количество грамм, но поле Стоимость остается равным нулю. Это необходимо для того, чтобы не искажать общую себестоимость партии, а лишь уточнить массу.

Проблема возникает при попытке выбрать эти данные через виртуальную таблицу ОстаткиИОбороты. Если в секции ВЫБРАТЬ вашего запроса указаны только регистратор и суммовые показатели, система оптимизирует выполнение запроса. Поскольку сумма равна нулю, а других значимых ресурсов (количество, вес) в выборке нет, запись может быть проигнорирована или «схлопнута» при группировке. Проанализируем исходный запрос, который вызывал затруднения:


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

В данном примере, если у документа «Акт расхождения веса» поле СтоимостьПриход равно нулю, СУБД может не вернуть строку, так как итоговая сумма по группировке будет нулевой. Это поведение характерно для оптимизированных механизмов расчета итогов в платформе 1С.

Решение 1: Добавление количественных ресурсов в выборку

Самый простой и эффективный способ «заставить» систему показать записи с нулевой стоимостью — это добавить в запрос ресурс, который в этих записях не равен нулю. В случае с металлами это будет вес, а в обычном товароучете — количество. Посмотрим, как изменится логика работы запроса при добавлении поля ВесПриход.

Как только мы добавляем количественный показатель, строка становится «значимой» для виртуальной таблицы. Теперь даже при нулевой стоимости запись попадет в результат, так как в ней присутствует движение по весу. Разберем исправленный фрагмент кода:


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

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

Решение 2: Использование детальных записей (физическая таблица)

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

Основные преимущества работы с физической таблицей в данной задаче:

  1. Отсутствие агрегации: Вы получаете записи «как есть», без предварительного суммирования платформой.
  2. Прозрачность: Легко отследить движения по конкретным видам документов (Акт, Приходный ордер и т.д.).
  3. Производительность: При выборке за небольшой период по конкретному складу запрос к физической таблице может отработать быстрее, так как системе не нужно рассчитывать остатки на границы периода.

Особенности настройки условий ГДЕ для поиска нулевых сумм

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


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

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

Рекомендации по учету в ювелирной сфере

В ювелирном производстве ситуация со «сменой пробы» или «корректировкой веса» является штатной. При реализации отчета ТОРГ-29 важно учитывать, что один и тот же «Акт расхождения» может делать несколько записей:

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

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

← На главную