Как найти и отредактировать печатную форму в 1С 7.7: от поиска макета до программного изменения окончаний

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

Переход с платформы 1С 8.3 на старую добрую 1С 7.7 часто вызывает у новичков культурный шок. Отсутствие привычного слова «Макет», иная структура метаданных и специфические механизмы работы с внешними формами заставляют тратить часы на простые задачи. В этой статье мы подробно разберем, как найти, отредактировать и настроить печатную форму договора в среде 1С 7.7, особенно если вы работаете с конфигурациями типа «Камин».

Где искать макет? Понятие «Таблица» в 1С 7.7

Первое, что нужно усвоить: в 1С 7.7 нет «Макетов» в том виде, к которому мы привыкли в «восьмерке». Аналогом макета здесь выступает Таблица. Она может находиться в трех местах, и нам необходимо последовательно их проверить:

  1. Внутри формы документа или справочника: Откроем конфигуратор, найдем нужный объект, перейдем на закладку «Формы» и нажмем кнопку «Таблица» на нижней панели инструментов. Если там пусто, значит, макет подключается иначе.
  2. Общие таблицы: Перейдем в меню «Действия» — «Общие таблицы». Здесь часто хранятся унифицированные формы (например, ТОРГ-12 или счета-фактуры), которые используются несколькими документами сразу.
  3. Внешние файлы (характерно для конфигураций «Камин»): Это наиболее вероятный вариант для печатных форм договоров. Разработчики часто выносят их во внешние файлы с расширением .mxl (только таблица) или .ert (внешняя обработка с формой и кодом).

Проанализируем ситуацию: как понять, какой файл используется? Для этого воспользуемся отладчиком. Поставим точку останова в процедуре Печать модуля формы документа. Нам нужно найти вызов функции ОткрытьФорму или ОткрытьФормуМодально, где в качестве параметра указан путь к файлу в папке ExtForms. Обычно в «Камине» печатные формы лежат по пути: КаталогИБ() + "\ExtForms\PrnForms\".

Редактирование внешней печатной формы

Если мы выяснили, что макет находится во внешнем файле .ert, откроем его через меню «Файл — Открыть» в Конфигураторе. Внутри мы увидим привычное окно с закладками «Диалог», «Модуль» и «Таблица». Если же перед нами файл .mxl, его можно редактировать как обычную таблицу. Рассмотрим основные типы ячеек, которые нам встретятся:

Работа с контекстом: использование n_Контекст

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

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

[n_Контекст.Статус]

Если же Статус — это ссылка на справочник, а нам нужно вывести его текстовое наименование, используем конструкцию:

[n_Контекст.Статус.Наименование]

Реализация логики множественного числа (склонения)

Рассмотрим задачу: в договоре нужно писать «Автор», если сотрудник один, и «Соавторы», если их несколько. В 1С 7.7 нет встроенного механизма склонений, поэтому нам придется реализовать простую логику в модуле обработки. Разберем по шагам, как это сделать.

Для начала создадим СписокЗначений, в котором сопоставим формы единственного и множественного числа. Это удобнее, чем писать бесконечные условия Если...Иначе.


// Создаем соответствие ед. и мн. числа
СЗ_Статусы = СоздатьОбъект("СписокЗначений");
СЗ_Статусы.ДобавитьЗначение("авторы", "автор");
СЗ_Статусы.ДобавитьЗначение("соавторы", "соавтор");
СЗ_Статусы.ДобавитьЗначение("наследники", "наследник");
СЗ_Статусы.ДобавитьЗначение("составители", "составитель");

Затем определим количество сотрудников в документе и выберем нужную форму слова. Предположим, у нас есть переменная КолвоСотрудников, которую мы получили из табличной части документа.


// Получаем статус из контекста (например, "автор")
ТекущийСтатусЕд = n_Контекст.Статус.Наименование;

// Ищем множественное число в нашем списке
МнЧисло = "";
Позиция = СЗ_Статусы.НайтиЗначение(ТекущийСтатусЕд);
Если Позиция > 0 Тогда
    ТекущийСтатусМн = СЗ_Статусы.ПолучитьЗначение(Позиция, МнЧисло);
Иначе
    ТекущийСтатусМн = ТекущийСтатусЕд; // Если не нашли, оставляем как есть
КонецЕсли;

// Финальный выбор для печатной формы
ПечСтатус = ?(КолвоСотрудников > 1, МнЧисло, ТекущийСтатусЕд);

Теперь в ячейке таблицы (тип «Шаблон») мы можем просто написать: именуемые в дальнейшем [ПечСтатус]. Переменная ПечСтатус будет автоматически подставлена при выводе секции.

Управление слоями и секциями

Проанализируем еще одну особенность 1С 7.7 — Слои. В редакторе таблицы вы можете увидеть, что некоторые элементы перекрывают друг друга. Это сделано для того, чтобы выводить разный контент в зависимости от условий. Например, слой «Организация» и слой «ФизЛицо».

Управление слоями в коде происходит при выводе секции:

Таб.ВывестиСекцию("Шапка|СлойОрганизации");

Если вы добавили новых сотрудников и хотите, чтобы они выводились списком, убедитесь, что вы используете цикл в модуле и метод ВывестиСекцию. В макете (таблице) это должна быть одна строка, оформленная как секция (меню «Таблица — Секции — Назначить имя»).


// Пример вывода списка сотрудников
n_Контекст.ВыбратьСтроки();
Пока n_Контекст.ПолучитьСтроку() = 1 Цикл
    // Заполняем переменные для текущей строки
    ПечСотрудник = n_Контекст.Сотрудник.Наименование;
    // Выводим секцию "СтрокаСотрудника" из макета
    Таб.ВывестиСекцию("СтрокаСотрудника");
КонецЦикла;

Важный совет: При работе с внешними файлами всегда делайте резервную копию файла .ert или .mxl перед началом редактирования. В 1С 7.7 нет системы отката изменений (Undo), которая работала бы после сохранения файла.

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

← На главную