Как вывести реквизит из табличной части документа в графу журнала в 1С 7.7

Программист 1С v7.7
← На главную

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

Почему реквизиты табличной части недоступны для граф журнала?

Для начала проанализируем архитектуру хранения данных в версии 7.7. Журнал документов предназначен для отображения списка самих документов, где одна строка журнала строго соответствует одному документу. В то же время табличная часть документа может содержать неограниченное количество строк. Если бы система позволяла напрямую выводить реквизит «Товар» в журнал, возникла бы неопределенность: какой именно товар из десяти или ста строк накладной следует показать в этой единственной строке журнала?

Именно поэтому в настройках графы журнала в Конфигураторе в списке «Возможные значения» отображаются только:

  1. Общие реквизиты документов (с установленным флагом «Сортировка»).
  2. Реквизиты шапки конкретных документов, которые входят в данный журнал.

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

Способ 1: Дублирование данных в реквизит шапки

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

Пошаговый алгоритм решения:

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

Пример кода для копирования первого товара:


Процедура ПриЗаписи()
    // Проверяем, есть ли строки в табличной части
    Если КоличествоСтрок() > 0 Тогда
        ВыбратьСтроки();
        ПолучитьСтрокуПоНомеру(1);
        ТоварДляЖурнала = Товар;
    Иначе
        ТоварДляЖурнала = ПолучитьПустоеЗначение("Справочник.Номенклатура");
    КонецЕсли;
КонецПроцедуры

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

Способ 2: Использование текстового поля с формулой на форме журнала

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

Порядок действий:

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

Функция может выглядеть так:


Функция глПолучитьСписокТоваров(КонтДок) Экспорт
    Перем Стр;
    Стр = "";
    // Код перебора строк документа и формирования строки с названиями товаров
    // Внимание: данный метод может существенно замедлять прокрутку журнала
    Возврат Стр;
КонецФункции

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

Способ 3: Использование специализированных отчетов

Как справедливо отмечено в обсуждении, если требуется видеть детальное движение товаров, стандартный журнал — не лучший инструмент. Рассмотрим вариант использования отчета «Ведомость по остаткам» или «Движения товаров». В 1С 7.7 отчеты позволяют группировать данные как по документам, так и по конкретным позициям номенклатуры, что полностью решает проблему «100500 строк» в документе.

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

Выводы и рекомендации

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

← На главную