Как отобразить реквизиты объекта «Операция» в журнале документов 1С 7.7

Программист 1С v7.7 Бухгалтерский учет
← На главную

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

Анализ технической особенности объекта «Операция»

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

Решение проблемы через создание вычисляемой графы

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

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

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


Функция глПолучитьРеквизитОперации(Док)
    // Проверим, выбран ли документ в строке
    Если Док.Выбран() = 0 Тогда
        Возврат "";
    КонецЕсли;

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

Нюансы работы с конфигурацией ПУБ

Проанализируем ситуацию применительно к конфигурации «Производство + Услуги + Бухгалтерия». В ПУБ существует особенность: многие документы (например, «Поступление ТМЦ» или «Реализация») делают движения не только по бухгалтерским счетам, но и по оперативным регистрам. Важно помнить, что объект Операция в этой конфигурации отвечает исключительно за бухгалтерский учет. Если вы выводите данные из операции в общий журнал, убедитесь, что это не введет пользователей в заблуждение, так как остатки по складам или взаиморасчеты могут вестись в этой базе по регистрам, а не только по проводкам.

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

Оптимизация производительности журнала

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

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

Альтернативные подходы

Если производительность системы является критическим фактором, рассмотрим альтернативный вариант — использование внешней компоненты FormEx. Это мощный инструмент для 1С 7.7, который позволяет перехватывать событие отрисовки таблицы. С помощью FormEx можно программно «раскрашивать» ячейки и подставлять в них значения гораздо быстрее, чем через стандартные формулы. Однако этот метод требует установки дополнительных библиотек на рабочие места пользователей.

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

Подводя итог, можно сказать, что наиболее эффективным и доступным методом остается создание функции в модуле формы журнала с обращением к ТекущийДокумент.Операция.ИмяРеквизита. Это решение позволяет гибко управлять отображением данных и сохранять работоспособность типовой конфигурации без глобальных переделок.

← На главную