Многие разработчики, особенно начинающие, сталкиваются с проблемой: при попытке добавить новый столбец с данными в печатную форму документа, поле остается пустым, даже если реквизит в базе данных заполнен. Давайте разберем по шагам, почему так происходит и как правильно внести изменения, чтобы данные корректно отображались на бумаге или в табличном документе.
Первое, что необходимо осознать: печатная форма в 1С — это не статичная таблица, а результат работы программного алгоритма. Редактирование макета в пользовательском режиме (через кнопку «Изменить макет») в большинстве случаев не дает результата для новых данных, так как макет — это лишь визуальный шаблон. Чтобы в нем появились новые данные, их нужно сначала «достать» из базы данных с помощью запроса, а затем «передать» в параметры макета через программный код.
Для того чтобы вывести реквизит, например AddРазмеры из справочника Номенклатура, необходимо найти место, где формируется запрос для печатной формы. Обычно это происходит в Модуле менеджера документа (например, ПриобретениеТоваровУслуг) в функции, отвечающей за печать (например, СформироватьПечатнуюФормуНакладная).
В тексте запроса вы увидите выборку полей. Вам нужно добавить туда ваш реквизит. Помните, что если вы работаете с табличной частью документа, вам нужно обращаться к полю через точку от номенклатуры:
ВЫБРАТЬ
...
ВложенныйЗапрос.Номенклатура.AddРазмеры КАК Размеры,
...
ИЗ
...
Убедитесь, что вы присвоили полю понятный псевдоним через ключевое слово КАК. Именно этот псевдоним будет использоваться как имя параметра в макете.
Теперь, когда данные приходят в выборку, откройте макет печатной формы в Конфигураторе. Найдите нужную область — например, строку таблицы, где выводятся данные по товарам.
Параметр.Параметр впишите то же самое имя, которое вы указали в псевдониме запроса (в нашем примере — Размеры).После изменения макета и запроса, система должна «привязать» значение из запроса к параметру макета. В модуле менеджера найдите цикл, в котором происходит вывод строк:
Пока ВыборкаПоТоварам.Следующий Цикл
// ... здесь идет формирование строк ...
ОбластьТовар.Параметры.Заполнить(ВыборкаПоТоварам);
// ...
КонецЦикла;
Метод Параметры.Заполнить(ВыборкаПоТоварам) автоматически ищет в макете параметры с именами, совпадающими с полями выборки. Если вы назвали поле в запросе Размеры и параметр в макете тоже назвали Размеры, 1С сама подставит значение. Если автоматическое заполнение не работает, вы можете присвоить значение явно:
ОбластьТовар.Параметры.Размеры = ВыборкаПоТоварам.Размеры;
Редактирование макетов через пользовательский режим сохраняет изменения в информационной базе в специальном хранилище. Однако, если конфигурация типовая, алгоритм печати часто запрашивает «оригинальный» макет из конфигуратора, игнорируя пользовательские правки. Кроме того, пользовательский режим не позволяет изменить SQL-запрос, который физически выбирает данные из базы. Без изменения запроса в модуле данные просто не попадают в структуру выборки, и, следовательно, не могут быть переданы в макет.
Если вы внесли изменения, но колонка все равно пустая, выполните следующие действия:
Точку останова в модуле менеджера в том месте, где выполняется цикл вывода строк.ВыборкаПоТоварам.Размеры и заполнено ли оно данными для текущей строки.Следуя этим шагам, вы сможете гибко настраивать любые печатные формы под требования вашего бизнеса, не полагаясь на удачу, а понимая логику работы платформы 1С.