Как создать отчет по продажам, оплатам и заказам на СКД в «1С:Бухгалтерия 3.0»?

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

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

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

В чем специфика учета данных в «1С:Бухгалтерии 3.0»?

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

Перед нами стоит задача вывести в единый отчет следующие показатели в разрезе Периода, Подразделения и Менеджера:

  1. Сумма выставленных счетов (заказов).
  2. Сумма полученных оплат от клиентов.
  3. Сумма реализации (выручка) и себестоимость продаж.

Рассмотрим пошагово, откуда и какими методами мы будем извлекать эти данные.

Шаг 1. Получение данных по продажам (Выручка и Себестоимость)

Данные о реализации товаров и услуг в БП 3.0 отражаются на счетах бухгалтерского учета 90-й группы. Для построения запроса в СКД мы будем использовать виртуальную таблицу РегистрБухгалтерии.Хозрасчетный.Обороты.

Выясним, какие счета нам необходимы:

Напишем фрагмент запроса для получения данных по продажам:


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

Шаг 2. Получение данных по оплатам от клиентов

Взаиморасчеты с покупателями ведутся на счете 62 («Расчеты с покупателями и заказчиками»), включая субсчета 62.01 (расчеты по отгруженным товарам) и 62.02 (полученные авансы). Фактическая оплата от клиента — это погашение задолженности или поступление аванса, то есть кредитовый оборот по счету 62.

При этом важно отсечь неденежные операции (например, взаимозачеты или корректировки долга). Для этого мы анализируем корреспонденцию счета 62 со счетами учета денежных средств:

Сформируем запрос для получения чистых денежных оплат покупателей:


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

Шаг 3. Как получить данные по заказам (Счетам на оплату)

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

Однако в системе есть специализированный регистр накопления — «ОплатаСчетов». Записи в этот регистр попадают при проведении платежных документов, если в них выбран конкретный счет на оплату в качестве документа-основания. Из таблицы РегистрНакопления.ОплатаСчетов.Обороты мы можем вытащить информацию о выставленных счетах и их оплате.

Рассмотрим структуру запроса к этому регистру:


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

Шаг 4. Решение проблемы с аналитикой «Менеджер»

В типовой конфигурации «1С:Бухгалтерия 3.0» в регистре бухгалтерии нет измерения «Менеджер» или «Ответственный». Как же сгруппировать данные по сотрудникам, ответственным за продажи?

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

Если в вашей базе настроено заполнение менеджеров через дополнительные реквизиты или сведения, то данные можно получить путем левого соединения с регистром сведений РегистрСведений.ДополнительныеСведения.

Шаг 5. Объединение данных в итоговый пакетный запрос СКД

Теперь соберем все полученные временные таблицы в единую структуру с помощью конструкции ОБЪЕДИНИТЬ ВСЕ. Это наиболее производительный способ в СКД, который исключает потерю данных при отсутствии связей по какому-либо одному из направлений (например, если была оплата без счета или отгрузка без оплаты).

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


ВЫБРАТЬ
    Обороты.Период КАК Период,
    Обороты.Подразделение КАК Подразделение,
    Обороты.Контрагент КАК Контрагент,
    Обороты.Договор КАК Договор,
    Обороты.Регистратор КАК Регистратор,
    Обороты.Регистратор.Ответственный КАК Менеджер,
    СУММА(Обороты.СуммаВыставленногоСчета) КАК СуммаВыставленногоСчета,
    СУММА(Обороты.СуммаОплаченоПоСчетам) КАК СуммаОплаченоПоСчетам,
    СУММА(Обороты.СуммаПродаж) КАК СуммаПродаж,
    СУММА(Обороты.Себестоимость) КАК Себестоимость,
    СУММА(Обороты.СуммаОплаты) КАК СуммаОплаты
ИЗ
    (
        ВЫБРАТЬ
            ВТ_Счета.Период КАК Период,
            ВТ_Счета.Подразделение КАК Подразделение,
            ВТ_Счета.Контрагент КАК Контрагент,
            ВТ_Счета.Договор КАК Договор,
            ВТ_Счета.Регистратор КАК Регистратор,
            ВТ_Счета.СуммаВыставленногоСчета КАК СуммаВыставленногоСчета,
            ВТ_Счета.СуммаОплаченоПоСчетам КАК СуммаОплаченоПоСчетам,
            0 КАК СуммаПродаж,
            0 КАК Себестоимость,
            0 КАК СуммаОплаты
        ИЗ
            ВТ_Счета КАК ВТ_Счета
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            ВТ_Продажи.Период КАК Период,
            ВТ_Продажи.Подразделение КАК Подразделение,
            ВТ_Продажи.Контрагент КАК Контрагент,
            ВТ_Продажи.Договор КАК Договор,
            ВТ_Продажи.Регистратор КАК Регистратор,
            0 КАК СуммаВыставленногоСчета,
            0 КАК СуммаОплаченоПоСчетам,
            ВТ_Продажи.СуммаПродаж КАК СуммаПродаж,
            ВТ_Продажи.Себестоимость КАК Себестоимость,
            0 КАК СуммаОплаты
        ИЗ
            ВТ_Продажи КАК ВТ_Продажи
        
        ОБЪЕДИНИТЬ ВСЕ
        
        ВЫБРАТЬ
            ВТ_Оплаты.Период КАК Период,
            ВТ_Оплаты.Подразделение КАК Подразделение,
            ВТ_Оплаты.Контрагент КАК Контрагент,
            ВТ_Оплаты.Договор КАК Договор,
            ВТ_Оплаты.Регистратор КАК Регистратор,
            0 КАК СуммаВыставленногоСчета,
            0 КАК СуммаОплаченоПоСчетам,
            0 КАК СуммаПродаж,
            0 КАК Себестоимость,
            ВТ_Оплаты.СуммаОплаты КАК СуммаОплаты
        ИЗ
            ВТ_Оплаты КАК ВТ_Оплаты
    ) КАК Обороты

СГРУППИРОВАТЬ ПО
    Обороты.Период,
    Обороты.Подразделение,
    Обороты.Контрагент,
    Обороты.Договор,
    Обороты.Регистратор,
    Обороты.Регистратор.Ответственный

Настройка СКД для вывода результатов

После того как текст запроса добавлен в набор данных СКД, выполним финальные настройки отчета:

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

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

← На главную