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