При работе с регламентированными формами учета основных средств, такими как Унифицированная форма № ОС-1 (Акт о приеме-передаче объекта основных средств), пользователи часто сталкиваются с необходимостью изменить нормативные реквизиты в шапке документа. Например, требуется указать актуальный год утверждения учетной политики (скажем, 2020 год) или изменить номер приказа.
Однако при попытке отредактировать макет напрямую мы часто сталкиваемся со странным техническим парадоксом: в макете ячейка имеет тип «Текст» со стандартным системным содержанием, но на печати выводится совершенно другая информация (например, ссылка на приказ или другую дату учетной политики). В этой статье мы подробно разберем, почему так происходит, как устроен этот механизм «изнутри» и какими способами можно решить эту задачу в конфигурации 1С:Бухгалтерия предприятия 3.0.
Проанализируем ситуацию по шагам и рассмотрим все доступные методы — от простых настроек без программирования до доработки кода.
---
В платформе «1С:Предприятие 8» разработчики конфигураций используют разные подходы к заполнению печатных форм. Традиционный путь — назначить ячейке тип Параметр или Шаблон и передавать туда данные через структуру параметров области макета. Но в случае с регламентированными шапками (особенно утвержденными Госкомстатом) часто применяется механизм динамической замены текста.
Для этого в программном коде перед выводом табличного документа на экран используется метод Заменить объекта ТабличныйДокумент. Синтаксис этого метода выглядит следующим образом:
ТабличныйДокумент.Заменить("СтарыйТекст", "НовыйТекст");
Этот метод выполняет глобальный поиск по всему сформированному документу (или по определенной области) и заменяет точное совпадение одной строки на другую. При этом тип ячейки в исходном макете остается обычным Текстом. Именно поэтому визуальный анализ макета в Конфигураторе или в режиме «1С:Предприятие» не показывает наличие параметров в нужной ячейке, хотя по факту текст при печати изменяется.
---
Если мы хотим понять, откуда именно программа берет новые данные для шапки документа, нам необходимо заглянуть в программный код. В конфигурации «Бухгалтерия предприятия 3.0» логика формирования печатной формы ОС-1 для документа ПринятиеКУчетуОС (или ПередачаОС) расположена в модуле менеджера соответствующего документа.
Давайте выполним глобальный поиск по конфигурации, чтобы быстро локализовать место подмены:
"Унифицированная форма № ОС-1" или фрагмент "Утверждена постановлением Госкомстата".Поиск укажет нам на строку кода в общем модуле или модуле менеджера документа, где происходит вызов метода замены. Обычно это выглядит следующим образом:
ТекстДляЗамены = ПолучитьТекстПриказаОбУчетнойПолитике(ВыборкаПоОС.Организация, ВыборкаПоОС.Дата);
ТабличныйДокумент.Заменить("Унифицированная форма № ОС-1", ТекстДляЗамены);
Метод ПолучитьТекстПриказаОбУчетнойПолитике (название может отличаться в зависимости от версии релиза БП 3.0) обращается к регистру сведений «Учетная политика» или к дополнительным реквизитам организации, откуда извлекает номер и дату утверждающего приказа за соответствующий год.
---
Это самый простой и быстрый способ, не требующий изменения конфигурации или написания кода. Он базируется на интересной особенности метода Заменить: если мы изменим исходный текст в макете, метод просто не найдет совпадения и выведет наш отредактированный текст «как есть».
Выполним следующие шаги:
Принятие к учету ОС: Акт о приеме-передаче ОС (ОС-1)).Приложение № 1 к приказу об учетной политике от 09.01.2020 № 12-ОД.Почему это сработает? Когда программа запустит процедуру печати, она попытается найти в макете стандартную строку "Унифицированная форма № ОС-1...". Так как мы заменили её на свой текст, метод Заменить завершит работу без ошибок, ничего не изменив в этой ячейке. На печать выведется именно тот текст, который мы сохранили в макете.
---
Если вы хотите избежать проблем при последующих обновлениях конфигурации 1С и гарантировать стабильность печатной формы, лучшим решением будет создание Внешней печатной формы (ВПФ).
Рассмотрим алгоритм создания такой формы:
.mxl).
Функция СведенияОВнешнейОбработке() Экспорт
// Заполняем параметры регистрации внешней печатной формы
КонецФункции
Параметры.ТекстШапкиУчетнойПолитики) и программно передавать туда нужную дату или текст приказа напрямую из кода обработки.Этот способ позволяет гибко настраивать печать для разных организаций, если в одной базе их ведется несколько, и у каждой своя дата утверждения учетной политики.
---
Если в вашей компании учетная политика меняется ежегодно, и вы не хотите каждый раз вручную переписывать макеты, можно автоматизировать этот процесс с помощью механизма расширений конфигурации. Это позволит динамически определять нужную дату учетной политики в зависимости от даты документа.
Создадим расширение и перехватим процедуру печати:
Документ.ПринятиеКУчетуОС и перенесем в расширение метод печати (например, функцию ПечатьОС).&Вместо или &После. При использовании &После мы можем скорректировать уже сформированный табличный документ перед его выводом на экран.
&После("ПечатьАктаОС1")
Процедура Расш_ПечатьАктаОС1(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
// Получаем печатную форму из коллекции
СтрокаПечатнойФормы = КоллекцияПечатныхФорм.Найти("ОС1", "ИмяИспользуемогоМакета");
Если СтрокаПечатнойФормы <> Неопределено Тогда
ТабДок = СтрокаПечатнойФормы.ТабличныйДокумент;
// Определяем нужный текст на основе года документа
// Например, для 2020 года:
НовыйТекстШапки = "Утверждена приказом об учетной политике от 31.12.2019 № 45";
// Производим замену
ТабДок.Заменить("Унифицированная форма № ОС-1", НовыйТекстШапки);
КонецЕсли;
КонецПроцедуры
Использование расширения гарантирует, что основная конфигурация останется на замке (типовой), обновления будут проходить в автоматическом режиме, а логика формирования шапки печатной формы будет работать строго по вашим корпоративным правилам.
---
Мы подробно разобрали внутреннее устройство механизма печати регламентированных форм в 1С и выяснили, почему статичные ячейки макетов могут динамически меняться в готовых печатных формах.
Для быстрого исправления «здесь и сейчас» отлично подойдет Способ 1 с изменением текста макета в пользовательском режиме. Если же требуется долгосрочное системное решение, не зависящее от обновлений программного продукта, рекомендуем воспользоваться Способом 2 (внешняя печатная форма) или Способом 3 (написание небольшого расширения конфигурации).