Почему задваиваются суммы сальдо в печатной форме акта сверки в 1С:КА 2.4.11 и как это исправить?

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

После обновления конфигураций 1С:Комплексная автоматизация 2 или 1С:ERP Управление предприятием до версии 2.4.11.63 (и смежных релизов этой ветки) многие пользователи столкнулись с неприятным поведением системы. При попытке сформировать и распечатать документ Акт сверки взаиморасчетов, суммы начального и конечного сальдо в печатной форме оказываются увеличенными ровно в два или более раз. При этом в самом документе на вкладках расчетов суммы отображаются корректно.

В этой статье мы подробно разберем техническую причину возникновения этой ошибки, проанализируем структуру запроса и рассмотрим несколько способов решения проблемы: от быстрой «чистки» данных до полноценного исправления программного кода.

Выясняем причину ошибки

Давайте проанализируем ситуацию. Начиная с версии 2.4.11, разработчики 1С существенно переработали механизмы работы с взаиморасчетами, особенно для режима Онлайн-взаиморасчеты. Вместе с архитектурой изменились и запросы, формирующие данные для печатных форм. В модуле менеджера документа АктСверкиВзаиморасчетов появился объемный многостраничный запрос, который собирает данные из нескольких регистров накопления и сведений.

Проанализируем работу этого запроса. Проблема кроется в механизме получения курсов валют. Запрос выполняет соединение таблиц расчетов с регистром сведений КурсыВалют. Если в вашей базе данных в регистре КурсыВалют для валюты взаиморасчетов (чаще всего это рубль) создано несколько записей на одну и ту же дату или присутствуют технические дубли, запрос отрабатывает некорректно.

Вместо того чтобы получить одну актуальную запись курса, система выполняет левое соединение, которое из-за наличия нескольких подходящих записей в регистре курсов приводит к так называемому «декартову произведению». Каждая строка расчетов умножается на количество найденных записей в курсах валют, что и приводит к кратному увеличению итоговых сумм (сальдо) в печатной форме.

Способ 1: Очистка регистра «Курсы валют» (Быстрое решение)

Как показывает практика и обсуждения на форумах, самым быстрым способом «вылечить» печатную форму без изменения кода является проверка данных регистра сведений. Рассмотрим, как это сделать по шагам:

  1. Перейдем в раздел НСИ и администрирование — См. также — Валюты.
  2. Найдем в списке Рубль (или ту валюту, в которой формируется акт сверки и наблюдается задвоение).
  3. Откроем историю курсов валюты.
  4. Проанализируем записи. Часто бывает так, что для рубля по ошибке введена запись курса (например, курс 1, кратность 1). Для корректной работы системы в последних релизах КА 2.4 записи для рубля в этом регистре вообще могут быть лишними или должны быть строго уникальны по датам.
  5. Если мы видим несколько записей на одну дату или подозрительные дубли — оставляем только одну корректную запись, а остальные удаляем.

Важно: После удаления лишних записей в регистре КурсыВалют, переформируйте печатную форму акта сверки. В большинстве случаев суммы сразу придут в норму.

Способ 2: Установка официального исправления (патча)

Поскольку проблема носит массовый характер и признана разработчиками 1С (ошибка EF_00150247), компания выпустила официальное исправление. Если у вас включена автоматическая загрузка патчей, система должна была предложить установку расширения-исправления.

Разберем, как проверить наличие патча вручную:

  1. Перейдем в меню НСИ и администрирование — Обслуживание — Обновление программы.
  2. Выберем пункт Установленные исправления (патчи).
  3. Убедимся, что в списке присутствует патч, исправляющий запрос в акте сверки для версии 2.4.11.63.
  4. Если патча нет, его можно скачать с портала поддержки 1С и установить вручную через кнопку Установить исправление.

Способ 3: Корректировка запроса в расширении (Для программистов)

Если вы не можете обновить конфигурацию или установить патч, рассмотрим вариант исправления кода. Нам необходимо доработать модуль менеджера документа АктСверкиВзаиморасчетов. Основная задача — обеспечить выборку курса через СрезПоследних или добавить жесткое условие в соединение таблиц.

Проанализируем фрагмент проблемного запроса. Обычно он выглядит примерно так:


ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&МоментВремени, ) КАК КурсыВалют
ПО (ДанныеРасчетов.Валюта = КурсыВалют.Валюта)

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

Рассмотрим пример того, как можно ограничить выборку в расширении, перехватив процедуру печати:


&Вместо("СформироватьЗапросДляПечатиАктаСверки")
Функция Мой_СформироватьЗапросДляПечатиАктаСверки(ПараметрыПечати)
    // Получаем стандартный текст запроса
    ТекстЗапроса = ПродолжитьВызов(ПараметрыПечати);
    
    // Вносим правки в текст запроса, добавляя ГРУППИРОВКУ 
    // или уточняя условия соединения с курсами валют, 
    // чтобы исключить дублирование строк при левом соединении.
    
    Возврат ТекстЗапроса;
КонецФункции

Однако наиболее правильным программным методом будет использование временной таблицы, в которую заранее помещаются уникальные курсы валют на нужные даты, и последующее соединение основной таблицы данных именно с этой временной таблицей.

Дополнительные факторы: Режим онлайн-взаиморасчетов

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

Посмотрим на ситуацию со стороны настроек документа. Иногда помогает изменение детализации. Если в настройках печати акта сверки установлена галочка Разделять по партнерам, попробуйте ее снять и проверить результат. Это изменит структуру группировок в запросе и может временно скрыть проблему до момента установки полноценного исправления.

Резюме

Подводя итог, можно сказать, что ошибка задвоения сальдо в 1С:КА 2.4.11.63 — это классический пример «недокументированной особенности» сложного SQL-запроса при соединении с данными, имеющими дубли в измерениях времени.

Рекомендованный порядок действий:

  1. Проверить и почистить регистр КурсыВалют для валюты "Рубль".
  2. Если не помогло — установить официальный патч EF_00150247.
  3. В крайнем случае — обновить конфигурацию до версии 2.4.11.71 или выше, где этот функционал был полностью пересмотрен.
← На главную