Как исправить ошибку «Разное количество полей в объединяемых запросах» при закрытии месяца в УТ 11.4?

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

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

Анализ проблемы: взаимосвязь ошибок и причины сбоя

Давайте проанализируем ситуацию, когда при закрытии месяца система выдает сразу два сообщения об ошибках:

  1. Техническая ошибка выполнения запроса: Разное количество полей в объединяемых запросах {Документ.РаспределениеПрочихЗатрат.МодульМенеджера(855)}.
  2. Методологическая ошибка остатков: По организации "СТИМУЛ" на конец периода есть остатки по регистру прочих расходов.

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

Суть программной ошибки кроется в архитектуре конфигурации. В линейке решений 11.4.13 разработчики фирмы 1С объединили логику распределения затрат для ERP, Комплексной автоматизации и Управления торговлей. При использовании оператора ОБЪЕДИНИТЬ ВСЕ (UNION ALL) в тексте запроса в одной из частей выборки были добавлены поля, отвечающие за производственный учет, а в другой ветке (предназначенной для УТ, где производства нет) эти поля оказались пропущены или закомментированы. Из-за этого СУБД возвращает ошибку несовпадения структуры объединяемых таблиц.

---

Способ 1. Исправление кода в основной конфигурации

Если ваша база данных снята с поддержки или допускает непосредственное изменение кода конфигурации, мы можем выполнить оперативное исправление исходного текста запроса.

Рассмотрим этот процесс по шагам:

  1. Откроем базу в режиме Конфигуратор.
  2. В дереве метаданных найдем документ РаспределениеПрочихЗатрат.
  3. Нажмем на него правой кнопкой мыши и выберем пункт Открыть модуль менеджера.
  4. Найдем процедуру РаспределитьРасходыНаФинансовыйРезультат (ошибка указывает примерно на строку 855, где вызывается метод Запрос.ВыполнитьПакет()).
  5. Проанализируем текст многострочного запроса выше этой строки. Нам необходимо найти фрагменты объединения таблиц, где фигурируют пустые заглушки для производственных реквизитов. Нам нужно закомментировать следующие строки кода в тексте запроса:

// Комментируем некорректные поля-заглушки в запросе
// |	НЕОПРЕДЕЛЕНО КАК ЗаказНаПроизводство,
// |	НЕОПРЕДЕЛЕНО КАК КодСтрокиПродукция,
// |	НЕОПРЕДЕЛЕНО КАК ПартияПроизводства,

После комментирования данных строк структура объединяемых частей запроса станет полностью идентичной. Сохраним изменения в конфигурации базы данных и повторно запустим процедуру закрытия месяца. Для автоматического выполнения регламентных операций за несколько периодов с уведомлением об итогах подойдёт обработка для группового закрытия месяцев с отправкой отчета в Telegram.

---

Способ 2. Корректное исправление через расширение конфигурации

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

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

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

При использовании расширений разработчики часто сталкиваются со следующей ошибкой компиляции:

неверное значение перечисления указано для строки:


И ТекущиеДвижения.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РаспределениеРасходовПоНаправлениямДеятельности)

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

  1. В дереве основной конфигурации найдем перечисление ХозяйственныеОперации.
  2. Нажмем по нему правой кнопкой мыши и выберем команду Добавить в расширение.
  3. Убедимся, что значение РаспределениеРасходовПоНаправлениямДеятельности также перенеслось в область видимости расширения.

После выполнения этой операции программный код успешно скомпилируется без ошибок валидации типов.

---

Методологические нюансы распределения по направлениям деятельности

Даже после исправления синтаксиса запроса вы можете обнаружить, что остатки по некоторым статьям расходов все равно не закрываются до конца. Это происходит из-за особенностей учета финансового результата по направлениям деятельности в УТ 11.4.

Если в вашей информационной базе включена опция Финансовый результат по направлениям деятельности, обратим внимание на настройки самих статей расходов:

Как избежать этой проблемы без программирования:

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

Применение данных рекомендаций и исправление кода запроса позволят вам успешно завершить закрытие месяца без ошибок и зависших остатков по регистрам управленческого учета. Для наглядного контроля этапов регламентных процедур и быстрого поиска проблемных периодов можно использовать монитор операций закрытия месяца для УТ и КА.

← На главную