При переходе с версии 1С:Комплексная автоматизация 2.2 на 2.4 пользователи часто сталкиваются с критической ошибкой во время выполнения регламентной операции «Закрытие месяца». Проблема локализуется в общем модуле ПартионныйУчет22 и сопровождается следующим системным сообщением:
{ОбщийМодуль.ПартионныйУчет22.Модуль(10987)}: Ошибка при вызове метода контекста (Выполнить): ДанныеДляРасчета = Запрос.Выполнить().Выгрузить(); по причине: {(194, 2)}: Неоднозначное поле "Организация"
В данной статье мы подробно разберем причины возникновения этой ситуации, проанализируем механизмы работы партионного учета версии 2.2 и рассмотрим пошаговые инструкции по устранению данной проблемы — от простых настроек интерфейса до вмешательства в программный код запроса.
Давайте проанализируем ситуацию с технической точки зрения. Ошибка «Неоднозначное поле» в языке запросов 1С означает, что в тексте запроса происходит обращение к полю (в нашем случае Организация), которое присутствует одновременно в нескольких таблицах, участвующих в соединении или объединении. При этом в тексте запроса не указан конкретный псевдоним (алиас) таблицы, из которой это поле должно быть получено.
В конфигурациях «Комплексная автоматизация 2.4» и «ERP 2.4» на ранних релизах (особенно в ветках 2.4.1 – 2.4.5) алгоритмы формирования динамических запросов в модуле ПартионныйУчет22 содержали программную недоработку. Система динамически собирает текст запроса для расчета себестоимости, объединяя временные таблицы остатков, таблицы документов-оснований и регистры накопления. Если в базе включена функциональность «Интеркампани» (передачи товаров между организациями), сложность запроса возрастает, и отсутствие явного указания источника поля Организация приводит к аварийной остановке процесса.
Прежде чем приступать к правке кода, рассмотрим наиболее простые способы, которые помогают в ряде случаев без внесения изменений в конфигурацию.
Во-первых, проверим общие настройки ведения учета. Выполним следующие действия:
Во-вторых, обратим внимание на настройки партионного учета, так как ошибка возникает именно в модуле ПартионныйУчет22. Рассмотрим подробнее:
В версии 2.4 реализовано два механизма: «Партионный учет 2.1» (устаревший) и «Партионный учет 2.2» (новый). После перехода с версии 2.2 система может автоматически переключить режим на более новый. Выясним, какой режим установлен у вас:
Важный момент: Как показывает практика (сообщение 6), переключение партионного учета или его кратковременное отключение/включение может «сбросить» некорректные настройки и позволить закрытию месяца пройти успешно. Однако помните, что переход на старую версию 2.1 лишит вас преимуществ новых алгоритмов распределения затрат.
Если обновление конфигурации до последнего релиза невозможно, а закрыть месяц необходимо срочно, мы можем прибегнуть к ручной правке кода. Рассмотрим, как это сделать правильно.
Нам необходимо найти процедуру, формирующую текст запроса в районе строки 10987 общего модуля ПартионныйУчет22. Наша задача — найти в тексте запроса конструкцию, где выбирается поле Организация, и добавить к нему префикс таблицы.
Примерный алгоритм действий в конфигураторе:
ДанныеДляРасчета = Запрос.Выполнить().Выгрузить();.Запрос.Текст.ОБЪЕДИНИТЬ ВСЕ) или выборка из нескольких временных таблиц (например, ВТРасчеты и РегистрПартииТоваров).Организация, необходимо прописать ИмяТаблицы.Организация,.Рассмотрим пример того, как может выглядеть исправленный участок кода в динамическом конструкторе:
// Было в коде (фрагмент формирования текста):
ТекстЗапроса = "ВЫБРАТЬ
| Организация,
| Номенклатура,
| Количество
|ИЗ
| ВТРасчеты КАК ТаблицаРасчетов";
// Нужно исправить на:
ТекстЗапроса = "ВЫБРАТЬ
| ТаблицаРасчетов.Организация КАК Организация,
| ТаблицаРасчетов.Номенклатура КАК Номенклатура,
| ТаблицаРасчетов.Количество КАК Количество
|ИЗ
| ВТРасчеты КАК ТаблицаРасчетов";
Обратите внимание, что в сложных запросах партионного учета 1С часто использует псевдонимы типа Т1, Т2 и так далее. Внимательно проанализируйте структуру запроса перед внесением изменений.
Иногда ошибка провоцируется тем, что в системе накопились некорректные записи в служебных регистрах, которые кэшируют данные для расчета. Посмотрим на ситуацию глубже: если расчет партий «спотыкается» на определенном документе, данные о котором передаются в запрос некорректно, имеет смысл почистить очередь заданий.
Выполним следующие шаги:
ЗаданияКРаспределениюРасчетов (через «Все функции» или «Функции для технического специалиста»).ПартииТоваровОрганизаций. Наличие в нем записей с «пустой» организацией или «битыми» ссылками может вызывать неоднозначность при попытке соединения таблиц в запросе.Чтобы избежать подобных ситуаций в будущем при переходе с 2.2 на 2.4, рекомендуем соблюдать следующую последовательность:
Подводя итог, отметим, что ошибка Неоднозначное поле "Организация" чаще всего является следствием программного сбоя в коде конфигурации. Если вы не являетесь разработчиком, попробуйте манипуляции с настройками партионного учета в интерфейсе. Если же вы сопровождаете базу, то наиболее правильным путем будет установка патча от 1С или ручная корректировка запроса в модуле ПартионныйУчет22 с указанием явных алиасов таблиц.