При разработке управленческих отчетов в конфигурации 1С:Управление торговлей 11 часто возникает задача свести в единую таблицу данные по взаиморасчетам с контрагентами (начальное и конечное сальдо в виде Дебета и Кредита) и динамические колонки ежедневных отгрузок за выбранный период. Разберем архитектурные особенности регистров УТ 11, выясним причины типичных ошибок при выборке данных и построим правильный запрос для схемы компоновки данных (СКД).
В типовой конфигурации 1С:УТ 11 взаиморасчеты и продажи разделены по разным регистрам накопления, так как факт перехода права собственности (реализация), факт отгрузки со склада и расчеты по долгам могут происходить в разные моменты времени:
РасчетыСКлиентамиПоСрокам) — остаточный регистр, предназначенный для хранения текущей задолженности, авансов и графиков платежей. Из него мы получаем входящее и исходящее сальдо расчетов.Продажи) — оборотный регистр, где фиксируются финансовые суммы реализации и выручки без влияния взаимозачетов, оплат и авансов.При попытке сделать прямую выборку из физической таблицы регистра РасчетыСКлиентами разработчики нередко сталкиваются с ситуацией, когда поле Сумма оказывается пустым. Проанализируем причину:
Регистр накопления РасчетыСКлиентами содержит сразу несколько ресурсов: Сумма (фактический долг), Отгружается, Оплачивается, КВозврату и КПлановомуПогашению. При проведении заказов клиентов или предварительных документов формируются движения только по плановым ресурсам, а ресурс Сумма остается нулевым до момента проведения первичных расчетных документов (например, документа Реализация товаров и услуг).
Важное правило: никогда не следует выбирать остатки и обороты из физической таблицы движений. Всегда используем виртуальную таблицу РегистрНакопления.РасчетыСКлиентами.ОстаткиИОбороты.
В УТ 11 измерением регистра расчетов выступает не ссылка на справочник Контрагенты, а ключ аналитики — АналитикаУчетаПоПартнерам. Чтобы извлечь конкретного контрагента, организацию или партнера, необходимо соединять виртуальную таблицу с регистром сведений АналитикаУчетаПоПартнерам.
Посмотрим на пример правильного формирования выборки данных в запросе:
ВЫБРАТЬ
Аналитика.Партнер КАК Партнер,
Аналитика.Контрагент КАК Контрагент,
Аналитика.Организация КАК Организация,
// Расчет Дебета (наш долг / долг клиента) и Кредита (аванс клиента) на начало
ВЫБОР
КОГДА Расчеты.СуммаНачальныйОстаток > 0 ТОГДА Расчеты.СуммаНачальныйОстаток
ИНАЧЕ 0
КОНЕЦ КАК ДебетНачальныйОстаток,
ВЫБОР
КОГДА Расчеты.СуммаНачальныйОстаток < 0 ТОГДА -Расчеты.СуммаНачальныйОстаток
ИНАЧЕ 0
КОНЕЦ КАК КредитНачальныйОстаток,
// Ежедневные обороты отгрузок
ВЫРАЗИТЬ(Расчеты.ПериодДень КАК ДАТА) КАК ПериодДень,
Расчеты.СуммаРасход КАК СуммаОтгрузкиДень,
// Расчет Дебета и Кредита на конец
ВЫБОР
КОГДА Расчеты.СуммаКонечныйОстаток > 0 ТОГДА Расчеты.СуммаКонечныйОстаток
ИНАЧЕ 0
КОНЕЦ КАК ДебетКонечныйОстаток,
ВЫБОР
КОГДА Расчеты.СуммаКонечныйОстаток < 0 ТОГДА -Расчеты.СуммаКонечныйОстаток
ИНАЧЕ 0
КОНЕЦ КАК КредитКонечныйОстаток
ИЗ
РегистрНакопления.РасчетыСКлиентами.ОстаткиИОбороты(
&НачалоПериода,
&КонецПериода,
Авто,
,
) КАК Расчеты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПоПартнерам КАК Аналитика
ПО Расчеты.АналитикаУчетаПоПартнерам = Аналитика.КлючАналитики
Разберем по шагам, как настроить отчет в СКД, чтобы получить фиксированные колонки сальдо по краям и динамически разворачиваемые дни посередине:
ПериодДень обязательно указываем признак Период, 1, чтобы компоновка данных корректно обрабатывала даты и могла дополнять пропущенные дни.Сумма(СуммаОтгрузкиДень), а для начальных и конечных сальдо используем стандартные агрегатные функции с учетом измерений группировок.Контрагент (или Партнер).ДебетНачальныйОстаток, КредитНачальныйОстаток.ПериодДень. В выбранные поля этой группировки помещаем только ресурс СуммаОтгрузкиДень.ДебетКонечныйОстаток, КредитКонечныйОстаток.При такой структуре компоновщик автоматически создаст колонки под каждый календарный день периода, в котором были движения, оставив общие начальные и конечные остатки в рамке отчета.
Обратим внимание на важные особенности ведения расчетов в конфигурации:
СуммаРегл (в валюте регламентированного учета) или СуммаУпр (в валюте управленческого учета), либо накладывать фильтр по конкретной валюте взаиморасчетов.