При проведении платежных документов, накладных или списаний с расчетного счета пользователи могут внезапно столкнуться с фатальной ошибкой. В журнале регистрации и на экране появляется сообщение: Ошибка при выполнении обработчика - 'ОбработкаПроведения' по причине: {ОбщийМодуль.УправлениеВзаиморасчетами}: Ошибка при вызове метода контекста (Выполнить) по причине: {(7, 2)}: Тип не может быть выбран в запросе <<?>>Таб.ДокументРасчетов. При этом примечательно, что у одного сотрудника документ не проводится, а у коллеги этот же самый документ проводится без каких-либо нареканий. Разберем по шагам, почему возникает эта неполадка и как ее быстро устранить.
Проанализируем ситуацию и выясним причину сбоя. Реквизит ДокументРасчетов представляет собой составной ссылочный тип, объединяющий множество различных документов взаиморасчетов. В типовых конфигурациях при проведении формируется промежуточная таблица значений, которая передается в запрос в виде параметра через конструкцию ПОМЕСТИТЬ ВТ ИЗ &Таб. Ошибка появляется в трех основных случаях:
ДокументРасчетов, либо на эти документы наложено ограничение доступа на уровне записей, платформа не может однозначно обработать типы колонок во временной таблице запроса.Неопределено или объект системного типа, запрос завершится аварийно.Рассмотрим самое простое и действенное решение, которое помогло автору обсуждения на форуме. При удалении базы из списка запуска и ее повторном добавлении платформа создает новую локальную директорию для хранения кэшированных файлов, избавляясь от накопившихся сбоев.
Если мы не хотим вручную пересоздавать строку подключения, воспользуемся штатным механизмом очистки кэша платформы при старте. Разберем порядок действий:
Иногда файлы кэша оказываются заблокированы или повреждены настолько, что стандартные ключи не дают нужного результата. В таком случае почистим каталоги вручную:
Win + R, введем команду %LOCALAPPDATA%\1C\1cv8 и нажмем «OK».%APPDATA%\1C\1cv8, также очистив папки с хеш-именами.Если сбой возникает сразу у группы сотрудников, а индивидуальная чистка пользовательских компьютеров не помогает, очистим кэш на стороне сервера приложений 1С:
1C:Enterprise Server Agent.srvinfo (по умолчанию расположена в профиле службы сервера 1С).snccntx*.1C:Enterprise Server Agent и проверим работу пользователей.Если очистка кэша не исправила ситуацию, проблема кроется в структуре прав или программном коде. Проанализируем роль пользователя и логику работы с временными таблицами:
ДокументРасчетов. Если прав на один из документов нет, составной тип не сможет корректно развернуться в запросе.ОписаниеТипов. Посмотрим на пример правильной инициализации колонки:
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("ДокументСсылка.РеализацияТоваровУслуг"));
МассивТипов.Добавить(Тип("ДокументСсылка.ПоступлениеТоваровУслуг"));
Квалификаторы = Новый ОписаниеТипов(МассивТипов);
ТаблицаВзаиморасчетов.Колонки.Добавить("ДокументРасчетов", Квалификаторы);
Также внутри текста запроса для составных типов рекомендуется использовать явное приведение с помощью конструкции ВЫРАЗИТЬ(Таб.ДокументРасчетов КАК ...). Это исключает передачу неподдерживаемых типов и обеспечивает стабильное выполнение запроса независимо от прав текущего пользователя.