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