Как сравнить Заказ покупателя и Реализацию товаров для анализа дефицита в 1С:УПП 1.3

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

В системе 1С:Управление производственным предприятием 1.3 часто возникает необходимость оперативно проанализировать, в каком объеме были выполнены обязательства перед покупателями. Основная задача такого отчета — сопоставить количество заказанного товара с фактически отгруженным. Мы разберем, как реализовать такой отчет с помощью Системы компоновки данных (СКД), рассмотрим типичные ошибки при написании запросов и узнаем, как сделать отчет максимально точным.

Метод 1: Объединение табличных частей документов

Рассмотрим наиболее простой и интуитивно понятный способ — сбор данных напрямую из табличных частей документов ЗаказПокупателя.Товары и РеализацияТоваровУслуг.Товары. Проанализируем логику построения такого запроса. Чтобы данные из разных документов попали в одну строку, мы будем использовать конструкцию ОБЪЕДИНИТЬ ВСЕ, а затем сгруппируем результат по заказу и номенклатуре.

Посмотрим на пример текста запроса, который позволяет собрать исходные данные:


ВЫБРАТЬ
    ЗаказыРеализации.ЗаказПокупателя КАК ЗаказПокупателя,
    ЗаказыРеализации.Номенклатура КАК Номенклатура,
    СУММА(ЗаказыРеализации.КоличествоЗаказ) КАК КоличествоЗаказ,
    СУММА(ЗаказыРеализации.КоличествоРеализация) КАК КоличествоРеализация
ИЗ
    (ВЫБРАТЬ
        ЗаказПокупателяТовары.Ссылка КАК ЗаказПокупателя,
        ЗаказПокупателяТовары.Номенклатура КАК Номенклатура,
        ЗаказПокупателяТовары.Количество КАК КоличествоЗаказ,
        0 КАК КоличествоРеализация
    ИЗ
        Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
    ГДЕ
        ЗаказПокупателяТовары.Ссылка.Проведен

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
        РеализацияТоваровУслугТовары.Ссылка.Сделка,
        РеализацияТоваровУслугТовары.Номенклатура,
        0,
        РеализацияТоваровУслугТовары.Количество
    ИЗ
        Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    ГДЕ
        РеализацияТоваровУслугТовары.Ссылка.Проведен
        И РеализацияТоваровУслугТовары.Ссылка.Сделка ССЫЛКА Документ.ЗаказПокупателя) КАК ЗаказыРеализации

СГРУППИРОВАТЬ ПО
    ЗаказыРеализации.ЗаказПокупателя,
    ЗаказыРеализации.Номенклатура

В этом запросе мы используем поле Сделка в документе реализации. В УПП 1.3 именно это поле чаще всего хранит ссылку на ЗаказПокупателя, на основании которого создана отгрузка. Выясним причину, по которой такой отчет может работать некорректно.

Разбор ошибок: Фильтрация по периоду

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

  1. Отбор для заказов: Устанавливаем период по дате самого заказа.
  2. Отбор для реализаций: Крайне важно фильтровать реализации не по их собственной дате, а по дате документа-основания (заказа).

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


ГДЕ
    РеализацияТоваровУслугТовары.Ссылка.Сделка.Дата МЕЖДУ &НачПериода И &КонПериода

Это обеспечит попадание в отчет всех отгрузок, относящихся к выбранным заказам, даже если сами отгрузки произошли за пределами периода.

Настройка СКД: Ресурсы и группировки

Чтобы в отчете СКД данные не дублировались, а суммы считались корректно, выполним следующие шаги по настройке схемы:

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

Метод 2: Профессиональный подход через регистры (Рекомендуемый)

Для конфигурации УПП 1.3 использование табличных частей — не самый оптимальный путь. В системе существует специализированный Регистр накопления "Заказы покупателей". Рассмотрим его преимущества:

В этом регистре движение "Приход" делает ЗаказПокупателя, а движение "Расход" — РеализацияТоваровУслуг. Использование виртуальной таблицы ОстаткиИОбороты позволит получить те же данные гораздо быстрее и точнее.

Проанализируем структуру запроса к регистру:


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

Преимущества работы с регистром:

Дополнительные расчеты: Вычисление дефицита

Для наглядности добавим в СКД вычисляемое поле Дефицит. В реальной практике бывает, что отгрузили больше, чем заказали (например, при замене товара). Чтобы отчет выглядел корректно, используем формулу:

ВЫБОР КОГДА КоличествоЗаказано - КоличествоПродано > 0 ТОГДА КоличествоЗаказано - КоличествоПродано ИНАЧЕ 0 КОНЕЦ

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

Резюме

Мы рассмотрели, как построить отчет по дефициту заказов. Несмотря на то что работа с табличными частями документов кажется проще, использование регистров накопления является более правильным и надежным методом для УПП 1.3. Это позволяет избежать проблем с периодами, учитывает специфику управленческого учета и обеспечивает высокую скорость работы отчета.

← На главную