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