Как добавить дополнительный столбец в журнал документов 1С 7.7?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

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

Способ 1: Использование «Графы журнала» (Рекомендуемый)

Проанализируем самый правильный с точки зрения производительности метод — создание Графы журнала. Этот метод позволяет платформе обращаться к данным напрямую из индексов таблиц базы данных, что гарантирует высокую скорость работы даже при больших объемах документов.

Разберем этот процесс по шагам:

  1. Откроем Конфигуратор и перейдем в ветку Журналы.
  2. Найдем нужный журнал (или выберем Общие журналы, если документ отображается там) и раскроем ветку Графы.
  3. Создадим новую графу, например, с идентификатором НомерРН.
  4. В свойствах новой графы перейдем на закладку Данные. Здесь мы должны указать, из каких реквизитов каких документов будут браться данные для этой колонки. Нажмем кнопку Добавить и выберем соответствующий документ (например, Реализация) и его реквизит (НомерРН).
  5. После создания графы перейдем к форме журнала. Нажмем правую кнопку мыши на табличной части журнала и выберем Вставить колонку. В списке доступных данных теперь появится наша новая графа НомерРН.

Важное преимущество: При использовании граф журнала пользователь получает возможность выполнять быструю сортировку и поиск по этому столбцу, так как 1С создает соответствующие индексы в таблице _1SJOURN.

Способ 2: Использование текстовой колонки и функции

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

Рассмотрим, как это реализовать:

  1. Откроем форму журнала в конфигураторе.
  2. Добавим новую колонку в таблицу журнала. В свойствах этой колонки выберем тип Текст.
  3. В поле Формула впишем название функции, которая будет возвращать значение, например: глПолучитьНомерРН().
  4. Теперь нам необходимо прописать саму функцию. Лучше всего это сделать в модуле формы журнала или в глобальном модуле (если функция будет использоваться в нескольких местах).

Проанализируем пример кода для такой функции:


Функция глПолучитьНомерРН()
    Перем ТекДок;
    ТекДок = ТекущийДокумент;
    
    // Проверяем вид документа, чтобы избежать ошибок при обращении к несуществующим реквизитам
    Если ТекДок.Вид() = "Реализация" Тогда
        Возврат ТекДок.НомерРН;
    Иначе
        // Для других видов документов возвращаем пустую строку
        Возврат "";
    КонецЕсли;
КонецФункции

Важный нюанс: Помните, что эта функция будет вызываться при отрисовке каждой строки журнала. Если в ней будут сложные вычисления или запросы к базе данных через СоздатьОбъект, это приведет к значительным «тормозам» при прокрутке списка.

Управление видимостью колонок в типовых конфигурациях

Выясним причину, по которой колонка может не отображаться, даже если она добавлена в форму. В конфигурациях, основанных на «Торговля и Склад» или «Комплексная поставка», часто используется программное управление составом колонок через список значений. Если вы встретили в коде строку СписокКолонок.AddValue("НомерРН", "Номер РН") (или на русском СписокКолонок.ДобавитьЗначение), значит, интерфейс журнала динамический.

Для корректной работы в таких системах нужно выполнить следующие действия:

  1. В модуле формы журнала (процедура ПриОткрытии) или в глобальном модуле (процедура глПриОткрытииЖурнала) найти место формирования списка доступных колонок.
  2. Добавить идентификатор вашей колонки в этот список.
  3. Убедиться, что в процедуре управления видимостью (часто это глПриВыбореЗакладкиВЖурналеДокументов) прописана логика включения видимости для новой колонки.

Пример программного управления видимостью:


// В процедуре настройки колонок
СписокКолонок.ДобавитьЗначение("НомерРН", "Номер РН");

// В процедуре обновления интерфейса
Форма.НомерРН.Видимость(1); // 1 - показать, 0 - скрыть

Типичные ошибки при добавлении столбцов

Рассмотрим ситуацию, с которой столкнулся автор темы: «ковырял не тот журнал». В 1С 7.7 документы могут отображаться в нескольких местах одновременно:

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

Оптимизация работы

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

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

Таким образом, мы разобрали два основных пути решения задачи. Выбор между «Графой журнала» и «Текстовым полем» зависит от того, нужна ли вам сортировка по новому полю и насколько критична скорость работы интерфейса в вашем конкретном случае.

← На главную