В платформе 1С:Предприятие 7.7 работа с журналами документов имеет свои архитектурные особенности, существенно отличающиеся от более современных версий. Часто возникает задача вывести в общий список документов дополнительную информацию, которой нет в стандартном наборе полей. Рассмотрим подробно, как правильно добавить новый столбец, чтобы он не только отображал данные, но и корректно работал в условиях сложных интерфейсов с управлением видимостью.
Проанализируем самый правильный с точки зрения производительности метод — создание Графы журнала. Этот метод позволяет платформе обращаться к данным напрямую из индексов таблиц базы данных, что гарантирует высокую скорость работы даже при больших объемах документов.
Разберем этот процесс по шагам:
Журналы.Общие журналы, если документ отображается там) и раскроем ветку Графы.НомерРН.Данные. Здесь мы должны указать, из каких реквизитов каких документов будут браться данные для этой колонки. Нажмем кнопку Добавить и выберем соответствующий документ (например, Реализация) и его реквизит (НомерРН).Вставить колонку. В списке доступных данных теперь появится наша новая графа НомерРН.Важное преимущество: При использовании граф журнала пользователь получает возможность выполнять быструю сортировку и поиск по этому столбцу, так как 1С создает соответствующие индексы в таблице _1SJOURN.
Бывают ситуации, когда данные для колонки нужно вычислять программно или когда реквизит не может быть включен в графу журнала по техническим причинам. В этом случае мы воспользуемся методом текстовой колонки с вызовом функции.
Рассмотрим, как это реализовать:
Текст.Формула впишем название функции, которая будет возвращать значение, например: глПолучитьНомерРН().Проанализируем пример кода для такой функции:
Функция глПолучитьНомерРН()
Перем ТекДок;
ТекДок = ТекущийДокумент;
// Проверяем вид документа, чтобы избежать ошибок при обращении к несуществующим реквизитам
Если ТекДок.Вид() = "Реализация" Тогда
Возврат ТекДок.НомерРН;
Иначе
// Для других видов документов возвращаем пустую строку
Возврат "";
КонецЕсли;
КонецФункции
Важный нюанс: Помните, что эта функция будет вызываться при отрисовке каждой строки журнала. Если в ней будут сложные вычисления или запросы к базе данных через СоздатьОбъект, это приведет к значительным «тормозам» при прокрутке списка.
Выясним причину, по которой колонка может не отображаться, даже если она добавлена в форму. В конфигурациях, основанных на «Торговля и Склад» или «Комплексная поставка», часто используется программное управление составом колонок через список значений. Если вы встретили в коде строку СписокКолонок.AddValue("НомерРН", "Номер РН") (или на русском СписокКолонок.ДобавитьЗначение), значит, интерфейс журнала динамический.
Для корректной работы в таких системах нужно выполнить следующие действия:
ПриОткрытии) или в глобальном модуле (процедура глПриОткрытииЖурнала) найти место формирования списка доступных колонок.глПриВыбореЗакладкиВЖурналеДокументов) прописана логика включения видимости для новой колонки.Пример программного управления видимостью:
// В процедуре настройки колонок
СписокКолонок.ДобавитьЗначение("НомерРН", "Номер РН");
// В процедуре обновления интерфейса
Форма.НомерРН.Видимость(1); // 1 - показать, 0 - скрыть
Рассмотрим ситуацию, с которой столкнулся автор темы: «ковырял не тот журнал». В 1С 7.7 документы могут отображаться в нескольких местах одновременно:
Перед внесением изменений обязательно проверьте в окне свойств журнала на закладке Состав, какие именно документы в него включены. Если вы добавите графу для реквизита документа Реализация, а в журнале отображаются только Счета, данные никогда не появятся.
Проанализируем производительность. Если ваша база данных работает в режиме SQL, использование граф журнала критически важно. Платформа 1С 7.7 при открытии журнала делает запрос к таблице _1SJOURN. Если данные выведены через графы, они извлекаются одним запросом. Если данные выводятся через функции в текстовых колонках, системе приходится делать дополнительные запросы к таблицам конкретных документов для каждой строки, что может замедлить работу в десятки раз.
Если же вы все-таки вынуждены использовать функцию, старайтесь кэшировать данные или использовать метод Шаблон для быстрого форматирования строки, избегая сложных условий внутри тела функции.
Таким образом, мы разобрали два основных пути решения задачи. Выбор между «Графой журнала» и «Текстовым полем» зависит от того, нужна ли вам сортировка по новому полю и насколько критична скорость работы интерфейса в вашем конкретном случае.