При переходе на 1С:ERP программисты и аналитики, привыкшие к архитектуре «1С:Управление торговлей 10.3» или «1С:Бухгалтерия», часто сталкиваются с трудностями при поиске данных о продажах. Прямых измерений вроде Контрагент или Склад в привычном виде в основных регистрах накопления может не оказаться. В этой статье мы разберем, где хранятся данные о реализации, как они структурированы и почему архитектура системы выглядит именно так.
Для начала ответим на главный вопрос: основным регистром накопления, в котором фиксируются данные о выручке, объемах продаж и себестоимости в 1С:ERP (и в «1С:Комплексная автоматизация 2»), является регистр «Выручка и себестоимость продаж» (имя в метаданных — ВыручкаИСебестоимостьПродаж).
Этот регистр является «сердцем» подсистемы финансового результата. Именно на его данных строятся отчеты по валовой прибыли, анализу продаж и эффективности работы менеджеров. Однако при попытке написать запрос к этому регистру «в лоб» разработчик замечает странность: в измерениях нет ни клиента, ни договора, ни номенклатуры.
Разберем ситуацию, которая часто вызывает недоумение: почему вместо понятных ссылок на справочники мы видим поля типа АналитикаУчетаПоПартнерам или АналитикаУчетаНоменклатуры? Причина кроется в архитектурном подходе, называемом нормализацией данных (в контексте обсуждения упоминалась 3-я нормальная форма или 3-БНФ).
Рассмотрим подробнее: в системе 1С:ERP данные сильно нормализованы для оптимизации производительности и уменьшения объема базы данных. Если бы в каждой строке регистра (а их могут быть миллионы) записывались отдельно Организация, Партнер, Контрагент, Договор и Направление деятельности, это привело бы к колоссальному избыточному росту индексов и объема таблиц. Вместо этого система использует механизм ключей аналитики.
Проанализируем, как работает эта технология. Вместо хранения набора ссылок в самом регистре, система создает уникальную запись в специальном вспомогательном справочнике. Рассмотрим основные ключи, которые используются в регистре ВыручкаИСебестоимостьПродаж:
КлючиАналитикиУчетаПоПартнерам). Этот ключ объединяет в себе:
КлючиАналитикиУчетаНоменклатуры). Включает в себя:
Выясним причину удобства такого подхода для системы: когда документ «Реализация товаров и услуг» проводится, программа сначала проверяет, существует ли уже сочетание «Партнер + Контрагент + Договор» в справочнике ключей. Если существует — в регистр записывается одна короткая ссылка на найденный ключ. Если нет — создается новый ключ. Это позволяет значительно ускорить проведение документов и упростить работу оптимизатора СУБД.
Посмотрим на практический пример. Если нам нужно вытащить данные о продажах в разрезе клиентов с помощью обычного запроса (не в СКД), нам придется выполнить соединение. Рассмотрим, как это выглядит в коде:
ВЫБРАТЬ
РегистрПродаж.Период КАК ДатаПродажи,
КлючПартнера.Партнер КАК Клиент,
КлючПартнера.Контрагент КАК ЮрЛицо,
КлючНоменклатуры.Номенклатура КАК Товар,
РегистрПродаж.Количество КАК КолВо,
РегистрПродаж.ВыручкаБезНДСРегл КАК Сумма
ИЗ
РегистрНакопления.ВыручкаИСебестоимостьПродаж КАК РегистрПродаж
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаПоПартнерам КАК КлючПартнера
ПО РегистрПродаж.АналитикаУчетаПоПартнерам = КлючПартнера.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК КлючНоменклатуры
ПО РегистрПродаж.АналитикаУчетаНоменклатуры = КлючНоменклатуры.Ссылка
ГДЕ
РегистрПродаж.Период МЕЖДУ &ДатаНачала И &ДатаКонца
Важный момент для разработчика: если вы используете Систему компоновки данных (СКД), то платформа 1С автоматически «разворачивает» эти поля. Вам достаточно выбрать поле АналитикаУчетаПоПартнерам.Партнер, и СКД сама добавит необходимые соединения в итоговый SQL-запрос. Это значительно упрощает разработку отчетов.
Проанализируем еще одну важную деталь: наличие данных в ресурсах регистра. Регистр называется «Выручка и себестоимость продаж», но сразу после проведения документа реализации поле Себестоимость часто остается пустым. Почему так происходит?
В 1С:ERP расчет финансового результата разделен на два этапа:
Это критически важно понимать при построении отчетов: если вы пытаетесь анализировать валовую прибыль в середине месяца без предварительного расчета себестоимости, данные будут неточными или неполными.
Подведем итоги нашего разбора. Мы выяснили, что основной регистр для анализа реализации — это ВыручкаИСебестоимостьПродаж. Его структура базируется на принципах нормализации данных и использовании ключей аналитики. Несмотря на кажущуюся сложность (необходимость соединений в запросах), такая архитектура обеспечивает высокую производительность системы в условиях больших объемов данных, характерных для ERP-решений.
При работе с этим регистром всегда помните о необходимости соединения со справочниками ключей для получения человекочитаемой аналитики и учитывайте цикл закрытия месяца для получения корректных данных по себестоимости.