При работе в конфигурации 1С:Управление торговлей 11.4 пользователи часто сталкиваются с ситуацией, когда при автоматическом заполнении документа Сверка взаиморасчетов колонка Договор остается пустой. При этом в самих первичных документах (заказах, накладных, платежах) договор указан корректно. Такая ситуация приводит к тому, что при печати акта сверки невозможно выполнить группировку по договорам, и все расчеты выводятся «единым списком». Рассмотрим подробно, почему это происходит и как настроить систему для правильного отображения данных.
Чтобы понять причину проблемы, нам необходимо проанализировать, как система хранит данные о долгах. В 1С:УТ 11 используется регистр накопления Расчеты с клиентами. Ключевым реквизитом в этом регистре является Объект расчетов. Именно этот реквизит определяет «глубину» детализации долга.
Проанализируем три основных варианта настройки в карточке договора (раздел Детализация расчетов):
Объект расчетов в регистре всегда равен самому договору. При заполнении сверки программа легко «видит» договор, так как он является главным разрезом учета.Заказ клиента. В регистре Расчеты с клиентами в поле Объект расчетов будет стоять ссылка на заказ, а договор будет храниться как дополнительный реквизит внутри этого заказа.Реализация товаров и услуг.Выясним причину: Если у вас в договоре установлена детализация По заказам, то алгоритм заполнения сверки ищет данные по объектам расчетов. Поскольку объект расчетов — это заказ, система может не выводить договор в отдельную колонку ТЧ (табличной части), так как формально долг «висит» на заказе. Это стандартное поведение для определенных релизов УТ 11.4, где логика построения сверки ориентирована на первичный документ расчетов.
Рассмотрим по шагам, как убедиться, что проблема именно в настройках договора:
Важный момент: Изменить настройку детализации в уже используемом договоре (по которому есть движения) напрямую нельзя. Система заблокирует редактирование, так как это повлияет на целостность данных в регистрах.
Если нам необходимо, чтобы договор заполнялся автоматически даже при детализации по заказам, нам придется заглянуть в код конфигурации. Проанализируем ситуацию с точки зрения программиста.
Основная логика сбора данных для документа СверкаВзаиморасчетов сосредоточена в Модуле менеджера этого документа. Нас интересуют следующие функции:
ПолучитьВзаиморасчеты(КомпоновщикОтбор) — здесь формируется запрос к регистрам.СформироватьТаблицуДанных — функция, преобразующая результат запроса в строки табличной части.Разберем пример того, как система получает данные. Внутри функции используется механизм КомпоновщикНастроекКомпоновкиДанных. Проблема заключается в том, что в запросе поле Договор может выбираться из АналитикиУчетаПоПартнерам или определяться через ОбъектРасчетов. Если ОбъектРасчетов — это заказ, то для получения договора нужно выполнить «левое соединение» с таблицей заказов или обращение через точку (что в запросах компоновки может быть не предусмотрено в базовом варианте).
Посмотрим на примерный фрагмент кода, который отвечает за выборку данных:
// Фрагмент кода из модуля менеджера СверкаВзаиморасчетов
Функция ПолучитьВзаиморасчеты(Параметры) Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
| Расчеты.ОбъектРасчетов КАК ОбъектРасчетов,
| Расчеты.СуммаОстаток КАК Сумма,
| ВЫРАЗИТЬ(Расчеты.ОбъектРасчетов КАК Документ.ЗаказКлиента).Договор КАК ДоговорИзЗаказа
|ИЗ
| РегистрНакопления.РасчетыСКлиентами.Остатки(&Период, ) КАК Расчеты";
// В типовом решении поле Договор может заполняться только если
// ОбъектРасчетов САМ ЯВЛЯЕТСЯ договором.
КонецФункции
Чтобы исправить это поведение без изменения кода (с помощью настроек), попробуем воспользоваться расширенным отбором.
Если вы не хотите вносить изменения в конфигурацию, воспользуемся стандартными инструментами УТ 11.4:
Обратите внимание: Если при указании конкретного договора в отборе табличная часть заполняется, но колонка Договор всё равно пустая — это означает, что в коде заполнения ТЧ просто отсутствует передача этого значения из результата запроса в колонку формы. В этом случае группировка в печатной форме всё равно может не сработать.
В версии 11.4 существует два режима ведения взаиморасчетов: Онлайн и Офлайн. Проверим настройки в меню: НСИ и администрирование -> Казначейство и взаиморасчеты.
Если у вас включен Офлайн-режим, то данные в аналитических регистрах появляются не сразу, а после выполнения регламентного задания Выполнение отложенных движений по расчетам с клиентами. Пока это задание не выполнено, связь между заказом и договором в разрезе сверки может быть «разорвана» для системы. Проанализируем состояние регламентных заданий и убедимся, что они завершены без ошибок.
Если ваша основная задача — получить печатную форму с группировкой по договорам, а в табличной части договора нет, можно пойти по пути настройки макета:
Договор для группировки.Договор пустое, попробуйте изменить запрос печатной формы (через механизм дополнительных отчетов и обработок), чтобы система вытягивала договор из Объекта расчетов.Технический совет: В запросе печатной формы используйте конструкцию ЕСТЬNULL(Договор, ОбъектРасчетов.Договор). Это позволит корректно отобразить договор как в случае, когда он сам является объектом расчетов, так и в случае, когда расчеты ведутся по заказам.
Подведем итоги нашего исследования. Отсутствие договора в сверке — это не случайная ошибка, а следствие выбранной модели учета «По заказам». Для решения ситуации мы рекомендуем:
ПолучитьВзаиморасчеты, чтобы она принудительно подтягивала договор из объекта расчетов, если сам объект расчетов договором не является.Помните, что Сверка взаиморасчетов в УТ 11 — это инструмент, который полностью опирается на данные регистров накопления. Если в регистрах чистота аналитики соблюдена, то любая проблема с отображением решается небольшой корректировкой запроса в модуле менеджера или правильной настройкой прав доступа к объектам расчетов.