Как настроить автоматическое заполнение даты, номера договора и валюты в печатной форме 1С

Бухгалтер 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

Часто при использовании внешних печатных форм (например, МХ-3 или актов выполненных работ) пользователи сталкиваются с тем, что некоторые поля остаются пустыми. Попытки самостоятельно исправить макет в конфигураторе через изменение типа ячейки на "Текст" обычно приводят к фатальным ошибкам программы. Рассмотрим подробно, как правильно настроить заполнение номера и даты договора, а также вывод валюты, не будучи профессиональным программистом.

Почему нельзя просто вписать текст в макет печатной формы

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

Исправление алгоритма получения договора

Иногда авторы внешних обработок намеренно или по ошибке отключают автоматическое подтягивание договора. Чтобы это исправить, нам необходимо заглянуть в модуль объекта внешней обработки. Проанализируем код и найдем, где определяется переменная, отвечающая за договор. Скорее всего, там стоит пустая ссылка. Нам нужно заменить ее на обращение к данным документа.

Рассмотрим пример исправления в коде. Найдите строку, где инициализируется договор, и приведите ее к следующему виду:


// Вместо: ДоговорХранения = Справочники.ДоговорыКонтрагентов.ПустаяСсылка;
// Пишем:
ДоговорХранения = МассивОбъектов[0].ДоговорКонтрагента;

Здесь МассивОбъектов[0] — это ссылка на ваш текущий документ, из которого вызывается печать, а ДоговорКонтрагента — имя поля в этом документе.

Настройка вывода номера и даты в макете

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


ОбластьМакета.Параметры.ДоговорХраненияНомер = ?(ЗначениеЗаполнено(ДоговорХранения), ДоговорХранения.Номер, "");
ОбластьМакета.Параметры.ДоговорХраненияДата = ?(ЗначениеЗаполнено(ДоговорХранения), Формат(ДоговорХранения.Дата, "ДЛФ=Д"), "");

Разберем, что здесь написано. Функция ЗначениеЗаполнено проверяет, выбран ли договор в документе. Если да, то берется его номер или дата. Функция Формат с параметром "ДЛФ=Д" преобразует дату в человекочитаемый вид (например, "01 января 2024 г.").

Работа с валютой документа и типом заполнения «Шаблон»

Если ваша печатная форма всегда пишет "рубли", хотя документ оформлен в валюте, нам потребуется модифицировать запрос к базе данных и изменить настройки ячейки макета. Посмотрим на процесс по шагам.

Во-первых, нужно добавить поле валюты в запрос. В модуле объекта найдите функцию ПолучитьТекстЗапроса.... В тексте запроса (который начинается с вертикальных черт) нужно добавить выборку наименования валюты. Проанализируем пример добавления строки после организации:


| ЗапросПоТоварам.Ссылка.Организация как Организация,
| ЗапросПоТоварам.Ссылка.ВалютаДокумента.НаименованиеПолное как ВалютаДокумента,

Обратите внимание на вертикальную черту | — она обязательна, так как указывает на продолжение текста запроса в 1С.

Во-вторых, настроим макет. Выясним, как сделать так, чтобы текст и валюта были в одной ячейке. Для этого используем тип заполнения Шаблон:

  1. Выделите ячейку в макете (например, там, где написано "Цена").
  2. В свойствах ячейки в поле "Заполнение" выберите Шаблон.
  3. В тексте ячейки напишите: Цена, [ВалютаДокумента].

В режиме шаблона всё, что написано в квадратных скобках, 1С воспринимает как параметр и подставляет туда данные из запроса, а остальной текст остается неизменным.

Практические советы по редактированию ячеек

Часто бухгалтеры пытаются "втиснуть" данные в одну узкую ячейку. Рассмотрим, как сделать макет более гибким:

Разбиение ячеек. Если вам нужно разделить одну большую ячейку на несколько мелких, чтобы в одну вписать постоянный текст, а в другую — номер, нажмите правую кнопку мыши на ячейке и выберите пункт Разбить ячейку. Это гораздо надежнее, чем пытаться рисовать линии границами.

Скрытие ненужных данных. Если программа требует заполнения какого-то параметра, который вам не нужен на печати, не удаляйте его из макета. Просто выделите ячейку и установите цвет шрифта таким же, как цвет фона (белым). Параметр останется для программы "видимым", ошибка не возникнет, но на бумаге его не будет.

Проверка имен. Всегда проверяйте, чтобы имя параметра в коде (после слова Параметры.) в точности совпадало с именем параметра, написанным в макете. 1С чувствительна к опечаткам, хотя и не различает регистр букв.

Используя эти методы, мы сможем доработать практически любую внешнюю печатную форму под нужды бухгалтерии, сохраняя при этом работоспособность программного кода.

← На главную