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

Программист 1С v7.7 Бухгалтерский учет
← На главную

Переход с платформы 1С 8.х на 1С 7.7 часто вызывает у начинающих разработчиков замешательство. Архитектура старой платформы значительно отличается: здесь нет привычных систем компоновки данных (СКД), объектов «Параметры» в макетах и четкого разделения на данные и оформление в том виде, к которому мы привыкли. В данной статье мы подробно разберем, как доработать печатную форму счета-фактуры в конфигурации «Бухгалтерский учет для Украины» (или аналогичных), если макет хранится во внешнем файле .mxl, а данные необходимо подтянуть из подчиненных справочников.

Понимание архитектуры печатных форм в 1С 7.7

Для начала проанализируем, как 1С 7.7 понимает, что именно нужно вывести на печать. В отличие от восьмой версии, где макет — это чаще всего часть объекта конфигурации, в семерке печатные формы часто выносятся во внешние файлы. Рассмотрим основные типы файлов, которые могут встретиться в папке ExtForms\PrnForms:

  1. .mxl — это файл таблицы (макет). Его можно открыть через «Файл» -> «Открыть» в Конфигураторе.
  2. .ert — внешний отчет или обработка. Иногда логика печати полностью выносится в такой файл.
  3. .efd — файл описания внешней печатной формы, который связывает документ и файл .ert.

В нашем случае используется прямой вызов внешнего макета из кода документа с помощью метода Таб.ИсходнаяТаблица(ПутьКФайлу). Это означает, что логика подготовки данных остается в модуле документа, а макет лишь визуализирует их.

Связь кода и макета: механизм переменных

Разберем важнейший аспект: как данные из кода попадают в ячейку таблицы. В 1С 7.7 нет метода Параметры.ИмяПараметра = Значение. Вместо этого используется прямое обращение к переменным, которые находятся в области видимости процедуры Печать().

Когда вы вызываете Таб.ВывестиСекцию("Шапка"), система «просматривает» все ячейки в этой секции. Если в свойствах ячейки установлен тип Выражение, 1С пытается вычислить то, что там написано, обращаясь к переменным модуля.

Рассмотрим пошагово, как добавить новый реквизит (например, банк контрагента):

  1. Откроем внешний файл SF3_ukr.mxl в Конфигураторе.
  2. Выберем нужную ячейку, нажмем правую кнопку мыши -> «Свойства».
  3. На вкладке «Текст» в поле «Содержимое» выберем Выражение.
  4. В самом поле текста напишем имя переменной, например: БанкКонтрагента.

Теперь нам нужно сделать так, чтобы в коде процедуры Печать() эта переменная была определена и заполнена до момента вызова секции.

Программное получение расчетного счета из подчиненного справочника

В конфигурации «Бухгалтерия для Украины» 7.7 (и многих других) расчетные счета не являются реквизитами справочника Контрагенты. Они хранятся в подчиненном справочнике РасчетныеСчета. Это означает, что мы не можем просто написать Контрагент.РасчетныйСчет.

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


// Объявляем переменные, которые мы вписали в макет
Переменная НомерСчета, НазваниеБанка, МФОБанка;

// Создаем объект для работы со справочником расчетных счетов
СпрРС = СоздатьОбъект("Справочник.РасчетныеСчета");
// Устанавливаем фильтр по владельцу (нашему контрагенту из документа)
СпрРС.ИспользоватьВладельца(Контрагент);

// Пытаемся найти хотя бы один счет
Если СпрРС.ВыбратьЭлементы() = 1 Тогда
    // Получаем первый найденный элемент
    СпрРС.ПолучитьЭлемент();
    НомерСчета = СпрРС.НомерСчета;
    НазваниеБанка = СпрРС.Банк.Наименование;
    МФОБанка = СпрРС.Банк.Код;
Иначе
    НомерСчета = "Не указан";
    НазваниеБанка = "";
    МФОБанка = "";
КонецЕсли;

// Теперь формируем общую строку для вывода
БанкКонтрагента = "р/р " + НомерСчета + " в " + НазваниеБанка + " МФО " + МФОБанка;

После того как переменная БанкКонтрагента заполнена, при выполнении команды Таб.ВывестиСекцию("Шапка") значение автоматически отобразится в макете.

Использование глобальных функций для сокращения кода

В типовых конфигурациях 1С 7.7 разработчики часто создавали универсальные функции в Глобальном модуле, чтобы не писать один и тот же код в разных документах. Перед тем как писать свой велосипед, рекомендуется проверить наличие функций, начинающихся на гл....

Например, в украинских конфигурациях часто встречается функция глПредставлениеРасчетногоСчета(Контрагент). Она уже содержит логику поиска основного счета и форматирования строки. В этом случае задача упрощается до одной строки в коде:

БанкКонтрагента = глПредставлениеРасчетногоСчета(Контрагент);

Типичные ошибки и нюансы при редактировании MXL

Рассмотрим подробнее проблемы, с которыми сталкиваются новички при работе с внешними таблицами:

  1. Несоответствие имен: Если вы написали в макете Банк_Контрагента (с подчеркиванием), а в коде БанкКонтрагента, система выдаст ошибку "Переменная не определена" или просто выведет пустое поле.
  2. Тип "Шаблон": Если вам нужно вывести текст вместе с переменной в одной ячейке (например: "Ваш банк: [БанкКонтрагента]"), установите в свойствах ячейки тип Шаблон. Все, что в квадратных скобках, будет вычисляться как код.
  3. Область видимости: Если вы определяете переменную внутри цикла Пока ПолучитьСтроку() = 1 Цикл, она не будет доступна в секции "Шапка", которая выводится до цикла. Всегда определяйте общие данные до вывода соответствующих секций.

Алгоритм внесения изменений (итоговое резюме)

Подведем итог и составим четкий план действий по редактированию счета в 1С 7.7:

  1. Определяем источник данных: Выясняем, где в конфигурации хранятся нужные данные (реквизит документа, реквизит справочника или подчиненный справочник).
  2. Дорабатываем макет: Открываем файл .mxl, добавляем ячейки, задаем им тип Выражение или Шаблон и придумываем имена переменных.
  3. Объявляем переменные в коде: В модуле документа в процедуре Печать() создаем эти переменные.
  4. Пишем логику заполнения: Используем СоздатьОбъект для поиска данных в справочниках или вычисляем значения на основе реквизитов документа.
  5. Тестируем: Сохраняем макет и модуль, перезапускаем печать счета из программы.

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

← На главную