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