Почему динамический список не видит новые созданные документы в 1С и как это исправить?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Ситуация, когда новый документ успешно создан и записан в базу данных, но упорно не появляется в форме списка даже после закрытия формы и принудительного обновления, является распространенной проблемой при разработке на платформе 1С:Предприятие. Рассмотрим подробнее основные причины такого поведения и разберем по шагам методы диагностики и устранения ошибки.

1. Проверка прав доступа и ролей

Динамический список всегда работает в непривилегированном режиме в контексте прав текущего пользователя. Если для нового объекта конфигурации или реквизитов не настроены права, платформа не вызовет исключение, а просто исключит недоступные строки из выборки.

Проанализируем необходимые действия:

  1. Откроем конфигуратор и перейдем к ветке Роли.
  2. Проверим, назначены ли текущему пользователю (или его профилю групп доступа) права на Чтение, Просмотр и Интерактивное добавление для созданного документа.
  3. Убедимся, что на уровне записей (RLS) не наложены ограничения, отсекающие документы без заполненных реквизитов (например, по организации, подразделению или группе доступа).

2. Программные и пользовательские отборы

Отсутствие условий на вкладке «Отбор» в свойствах динамического списка в конфигураторе не гарантирует отсутствия фильтрации. Отборы могут накладываться динамически в коде модулей формы или сохраняться в пользовательских настройках.

Выясним причину через следующие шаги:

  1. Программные отборы: Проверим модуль формы списка (события ПриСозданииНаСервере, ПриЗагрузкеПользовательскихНастроекНаСервере). Изучим коллекцию Список.Отбор.Элементы на предмет программно включенных условий.
  2. Сброс настроек формы: В режиме «1С:Предприятие» откроем форму списка, нажмем Еще — Установить стандартные настройки. Это исключит влияние скрытых пользовательских фильтров и сохраненных настроек поиска.
  3. Интервал журнала: Проверим установленный период отображения списка через команду Установить интервал. Если дата созданного документа выходит за границы текущего периода, он не отобразится.

3. Особенности текста запроса динамического списка

Если динамический список использует произвольный запрос, причиной скрытия строк часто становятся некорректные соединения таблиц или жесткие условия в блоке ГДЕ.

Разберем типичные ошибки в тексте запроса:

  1. Использование внутреннего соединения: Если к таблице документов применяется ВНУТРЕННЕЕ СОЕДИНЕНИЕ (INNER JOIN) с регистром или дополнительной таблицей, документ не попадет в выборку, пока в присоединенной таблице не появятся соответствующие записи. Заменим соединение на ЛЕВОЕ СОЕДИНЕНИЕ.
  2. Параметры запроса: Проверим коллекцию Список.Параметры. Жестко переданные параметры в секции ГДЕ могут скрывать новые документы со значениями по умолчанию.
  3. Основная таблица: Проверим свойство Основная таблица динамического списка. Если таблица не задана или указана неверно, динамическое считывание данных и стандартные механизмы позиционирования могут работать некорректно.

4. Проверка фактической записи документа через консоль запросов

Чтобы убедиться, что документ действительно физически записан в базу данных, выполним прямой запрос через внешнюю обработку «Консоль запросов» под полными правами:


ВЫБРАТЬ
    Док.Ссылка,
    Док.ПометкаУдаления,
    Док.Номер,
    Док.Дата
ИЗ
    Документ.ИмяВашегоДокумента КАК Док

Если документ отсутствует в результате выполнения запроса в консоли, значит, при программном создании не был вызван метод Записать(), либо создание выполнялось внутри транзакции, которая была отменена методом ОтменитьТранзакцию().

5. Альтернативное решение: вывод данных через таблицу значений

Если требуется гарантированно отобразить жестко сформированный список документов в привилегированном режиме в обход механизмов динамического списка, создадим невизуализированную таблицу на форме.

Посмотрим на пример реализации:

  1. Добавим в реквизиты формы элемент ТаблицаДокументов с типом ТаблицаЗначений и перенесем его в элементы формы.
  2. В модуле формы опишем процедуру заполнения:

&НаСервере
Процедура ЗаполнитьТаблицуНаСервере()
    
    УстановитьПривилегированныйРежим(Истина);
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Док.Ссылка КАК Документ,
        |   Док.Номер КАК Номер,
        |   Док.Дата КАК Дата
        |ИЗ
        |   Документ.ИмяВашегоДокумента КАК Док";
        
    ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
    ЗначениеВРеквизитФормы(ТаблицаРезультат, "ТаблицаДокументов");
    
КонецПроцедуры
← На главную