Как вывести номер строки в табличной части внешней печатной формы в 1С:Управление торговлей 10.3

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При разработке внешних печатных форм (ВПФ) в среде 1С:Предприятие 8, особенно для конфигураций на обычных формах, таких как Управление торговлей 10.3, разработчики часто сталкиваются с задачей вывода порядкового номера строки в таблице товаров. Несмотря на то что НомерСтроки является стандартным реквизитом любой табличной части, его корректный вывод в макет требует понимания механизмов работы с областями макета и параметрами. Проанализируем типичные ситуации, разберем ошибки и рассмотрим наиболее эффективные способы решения этой задачи.

Использование стандартного реквизита НомерСтроки

Рассмотрим стандартный подход, который часто используют начинающие разработчики. В объектах 1С у каждой строки табличной части (например, Товары) есть системное поле НомерСтроки. Казалось бы, достаточно просто использовать метод ЗаполнитьЗначенияСвойств(), чтобы все данные, включая номер, попали в печатную форму. Однако здесь есть важный нюанс: название параметра в макете должно строго совпадать с именем реквизита в объекте.

Проанализируем пример кода, который часто вызывает затруднения из-за мелких опечаток:


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

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

Вывод номера строки через ручной счетчик

Хотя использование системного реквизита НомерСтроки кажется удобным, опытные специалисты рекомендуют использовать ручной счетчик (переменную-итератор). Выясним причину: если перед печатью табличная часть была отфильтрована программно или отсортирована отличным от стандартного способом, системные номера строк могут идти не по порядку (например: 1, 4, 8...). Для печатной формы документа это обычно недопустимо — покупатель ожидает увидеть непрерывную нумерацию 1, 2, 3 и так далее.

Разберем по шагам, как реализовать сквозную нумерацию с помощью счетчика:

  1. Перед началом цикла обхода таблицы инициализируем переменную (например, Ном или Нпп).
  2. Внутри цикла увеличиваем значение переменной на единицу.
  3. Присваиваем полученное значение параметру области макета.

Посмотрим на пример реализации:


// Инициализируем счетчик
НомерПоПорядку = 0;

Для Каждого ТекущаяСтрока Из СсылкаНаОбъект.Товары Цикл
    НомерПоПорядку = НомерПоПорядку + 1;
    
    ОбластьДанные = Макет.ПолучитьОбласть("Данные");
    
    // Заполняем основные данные (Артикул, Номенклатура, Количество и т.д.)
    ЗаполнитьЗначенияСвойств(ОбластьДанные.Параметры, ТекущаяСтрока);
    
    // Устанавливаем порядковый номер в печатной форме
    // Предполагаем, что в макете параметр называется "Номер"
    ОбластьДанные.Paraметры.Номер = НомерПоПорядку;
    
    ТабДок.Вывести(ОбластьДанные);
КонецЦикла;

Настройка макета: свойство Заполнение

Если в коде всё написано верно, но в печатной форме вместо цифр (1, 2, 3) отображается текст "НомерСтроки" или "Номер", это однозначно указывает на проблему в свойствах ячейки макета. Проанализируем, как правильно настроить макет в конфигураторе.

Для того чтобы 1С воспринимала текст в ячейке как имя переменной, а не как обычную строку текста, необходимо:

Если выбрано значение Текст, система просто выведет то, что написано в ячейке. Если выбрано Шаблон, вы можете комбинировать текст и параметры (например, "№ [НомерСтроки]"), но для простого вывода числа наиболее подходит именно тип Параметр.

Проблема кэширования внешних печатных форм

Бывают ситуации, когда вы внесли изменения в код или макет обработки .epf, сохранили её и обновили в справочнике "Внешние обработки", но при формировании печати видите старый результат. Выясним причину этого поведения. В 1С:Предприятии 8 внешние формы при запуске копируются во временную папку пользователя (кэшируются). Иногда система "забывает" обновить этот файл.

Чтобы гарантированно увидеть изменения, рекомендуем следующие действия:

  1. Убедитесь, что вы загрузили обновленный файл .epf в справочник и нажали кнопку ОК или Записать.
  2. Перезапустите сеанс 1С:Предприятия (полный перезапуск клиента).
  3. В некоторых случаях помогает временное удаление регистрации обработки и её повторное добавление в справочник дополнительных отчетов и обработок.
  4. При отладке используйте метод ВнешниеОбработки.Создать() в тестовой обработке — это позволит запускать форму напрямую из файла, минуя механизмы справочников и кэширования.

Итоги

Мы рассмотрели, что вывод номера строки — это комплексная задача, включающая как программную часть, так и настройку визуального макета. Для обеспечения максимальной надежности и корректности печатного документа рекомендуется использовать внутренний счетчик в цикле, так как это защищает от сбоев нумерации при сортировках. Не забывайте тщательно проверять имена параметров и свойство Заполнение в макете. Эти простые правила помогут вам создавать качественные и безошибочные печатные формы для любых конфигураций на платформе 1С.

← На главную