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