Как отобразить содержание операции в общем журнале документов 1С:Предприятие 7.7

Программист 1С v7.7 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

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

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

Разберем по шагам процесс настройки:

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

Теперь проанализируем код функции, который необходимо разместить в модуле формы журнала:


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

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

Способ 2: Создание общего реквизита документов

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

Выясним алгоритм реализации этого подхода:

  1. В дереве метаданных найдем ветку «Общие реквизиты документов».
  2. Создадим новый реквизит, например, СодержаниеДляЖурнала (тип — Строка, длина 50–100 символов).
  3. Критически важно: установите флажок «Сортировка» в свойствах реквизита. Это позволит не только видеть текст, но и выполнять быстрый поиск или отбор по этой колонке.
  4. Включите использование этого реквизита для тех видов документов, содержание которых нужно видеть (или для всех документов сразу).

Теперь нам нужно обеспечить автоматическое заполнение этого реквизита. Чтобы пользователю не пришлось вводить данные дважды, пропишем код в модуле формы тех документов, где это необходимо. Например, для документа Операция (ручная операция) в процедуре ПриЗаписи:


Процедура ПриЗаписи()
    // Копируем содержание операции в наш общий реквизит для журнала
    СодержаниеДляЖурнала = Операция.Содержание;
КонецПроцедуры

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

Различия между ручными операциями и документами

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

Если вы используете первый способ (функцию), вам нужно обращаться к Документ.Операция.Содержание. Если вы используете второй способ (общий реквизит), не забудьте добавить код заполнения в процедуру ОбработкаПроведения или ПриЗаписи соответствующих документов.

Продвинутые методы оптимизации (внешние компоненты)

В ситуациях, когда стандартных средств платформы 7.7 недостаточно, разработчики часто прибегают к использованию внешней компоненты 1CPP.dll. Посмотрим, как это помогает решить нашу задачу:

Используя объект TableField, можно заменить стандартный список документов на виртуальную таблицу. Это позволяет выполнять прямые SQL-запросы к базе данных (в версии SQL). Таким образом, можно мгновенно «подтянуть» содержание операции напрямую из таблицы _1SOPER (где хранятся операции), не создавая лишних реквизитов в конфигурации и не нагружая систему функциями в колонках.

Альтернативный взгляд: Журнал проводок

Иногда стоит предложить пользователю альтернативное решение, которое уже заложено в типовую конфигурацию. Рассмотрим Журнал проводок. В нем поле «Содержание» отображается штатно для каждой проводки. Если бухгалтеру нужно видеть именно суть операций, возможно, ему будет удобнее работать в журнале проводок, предварительно настроив в нем необходимые фильтры по видам документов. Это избавит вас от необходимости вносить изменения в структуру конфигурации.

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

← На главную