Как изменить дату учетной политики в шапке печатной формы ОС-1 в 1С:Бухгалтерия?

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

При работе с регламентированными формами учета основных средств, такими как Унифицированная форма № ОС-1 (Акт о приеме-передаче объекта основных средств), пользователи часто сталкиваются с необходимостью изменить нормативные реквизиты в шапке документа. Например, требуется указать актуальный год утверждения учетной политики (скажем, 2020 год) или изменить номер приказа.

Однако при попытке отредактировать макет напрямую мы часто сталкиваемся со странным техническим парадоксом: в макете ячейка имеет тип «Текст» со стандартным системным содержанием, но на печати выводится совершенно другая информация (например, ссылка на приказ или другую дату учетной политики). В этой статье мы подробно разберем, почему так происходит, как устроен этот механизм «изнутри» и какими способами можно решить эту задачу в конфигурации 1С:Бухгалтерия предприятия 3.0.

Проанализируем ситуацию по шагам и рассмотрим все доступные методы — от простых настроек без программирования до доработки кода.

---

Технический парадокс: почему меняется ячейка со свойством «Текст»?

В платформе «1С:Предприятие 8» разработчики конфигураций используют разные подходы к заполнению печатных форм. Традиционный путь — назначить ячейке тип Параметр или Шаблон и передавать туда данные через структуру параметров области макета. Но в случае с регламентированными шапками (особенно утвержденными Госкомстатом) часто применяется механизм динамической замены текста.

Для этого в программном коде перед выводом табличного документа на экран используется метод Заменить объекта ТабличныйДокумент. Синтаксис этого метода выглядит следующим образом:

ТабличныйДокумент.Заменить("СтарыйТекст", "НовыйТекст");

Этот метод выполняет глобальный поиск по всему сформированному документу (или по определенной области) и заменяет точное совпадение одной строки на другую. При этом тип ячейки в исходном макете остается обычным Текстом. Именно поэтому визуальный анализ макета в Конфигураторе или в режиме «1С:Предприятие» не показывает наличие параметров в нужной ячейке, хотя по факту текст при печати изменяется.

---

Где искать код замены в конфигурации?

Если мы хотим понять, откуда именно программа берет новые данные для шапки документа, нам необходимо заглянуть в программный код. В конфигурации «Бухгалтерия предприятия 3.0» логика формирования печатной формы ОС-1 для документа ПринятиеКУчетуОС (или ПередачаОС) расположена в модуле менеджера соответствующего документа.

Давайте выполним глобальный поиск по конфигурации, чтобы быстро локализовать место подмены:

  1. Откроем базу в режиме Конфигуратор.
  2. Нажмем комбинацию клавиш Ctrl + Shift + F для вызова диалога глобального поиска.
  3. В поле поиска введем точную фразу из стандартного макета, например: "Унифицированная форма № ОС-1" или фрагмент "Утверждена постановлением Госкомстата".
  4. Нажмем кнопку Искать.

Поиск укажет нам на строку кода в общем модуле или модуле менеджера документа, где происходит вызов метода замены. Обычно это выглядит следующим образом:


ТекстДляЗамены = ПолучитьТекстПриказаОбУчетнойПолитике(ВыборкаПоОС.Организация, ВыборкаПоОС.Дата);
ТабличныйДокумент.Заменить("Унифицированная форма № ОС-1", ТекстДляЗамены);

Метод ПолучитьТекстПриказаОбУчетнойПолитике (название может отличаться в зависимости от версии релиза БП 3.0) обращается к регистру сведений «Учетная политика» или к дополнительным реквизитам организации, откуда извлекает номер и дату утверждающего приказа за соответствующий год.

---

Способ 1. Редактирование макета через пользовательский интерфейс (без программирования)

Это самый простой и быстрый способ, не требующий изменения конфигурации или написания кода. Он базируется на интересной особенности метода Заменить: если мы изменим исходный текст в макете, метод просто не найдет совпадения и выведет наш отредактированный текст «как есть».

Выполним следующие шаги:

  1. Перейдем в раздел Администрирование — Печатные формы, отчеты и обработки — Макеты печатных форм.
  2. В списке макетов найдем макет для нужного нам документа (например, Принятие к учету ОС: Акт о приеме-передаче ОС (ОС-1)).
  3. Нажмем кнопку Изменить макет (или дважды кликнем по строке).
  4. В открывшемся табличном документе найдем нужную ячейку в правом верхнем углу (шапку).
  5. Впишем туда наш собственный текст, например: Приложение № 1 к приказу об учетной политике от 09.01.2020 № 12-ОД.
  6. Нажмем кнопку Записать и закрыть.

Почему это сработает? Когда программа запустит процедуру печати, она попытается найти в макете стандартную строку "Унифицированная форма № ОС-1...". Так как мы заменили её на свой текст, метод Заменить завершит работу без ошибок, ничего не изменив в этой ячейке. На печать выведется именно тот текст, который мы сохранили в макете.

---

Способ 2. Использование внешней печатной формы (безопасный способ)

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

Рассмотрим алгоритм создания такой формы:

  1. Выгрузим стандартный макет ОС-1 из базы во внешний файл (в формате .mxl).
  2. Создадим новую внешнюю обработку в Конфигураторе.
  3. Подключим к ней наш сохраненный макет.
  4. В модуле объекта внешней обработки пропишем стандартную экспортную функцию для регистрации во внешней системе:
    
    Функция СведенияОВнешнейОбработке() Экспорт
        // Заполняем параметры регистрации внешней печатной формы
    КонецФункции
    
  5. В процедуре печати макета заменим логику заполнения шапки. Мы можем сделать ячейку полноценным параметром (например, Параметры.ТекстШапкиУчетнойПолитики) и программно передавать туда нужную дату или текст приказа напрямую из кода обработки.
  6. Зарегистрируем готовую внешнюю печатную форму в базе через меню Администрирование — Дополнительные отчеты и обработки.

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

---

Способ 3. Изменение алгоритма с помощью расширения конфигурации (для разработчиков)

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

Создадим расширение и перехватим процедуру печати:

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

&После("ПечатьАктаОС1")
Процедура Расш_ПечатьАктаОС1(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
    
    // Получаем печатную форму из коллекции
    СтрокаПечатнойФормы = КоллекцияПечатныхФорм.Найти("ОС1", "ИмяИспользуемогоМакета");
    Если СтрокаПечатнойФормы <> Неопределено Тогда
        ТабДок = СтрокаПечатнойФормы.ТабличныйДокумент;
        
        // Определяем нужный текст на основе года документа
        // Например, для 2020 года:
        НовыйТекстШапки = "Утверждена приказом об учетной политике от 31.12.2019 № 45";
        
        // Производим замену
        ТабДок.Заменить("Унифицированная форма № ОС-1", НовыйТекстШапки);
    КонецЕсли;
    
КонецПроцедуры

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

---

Резюме

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

Для быстрого исправления «здесь и сейчас» отлично подойдет Способ 1 с изменением текста макета в пользовательском режиме. Если же требуется долгосрочное системное решение, не зависящее от обновлений программного продукта, рекомендуем воспользоваться Способом 2 (внешняя печатная форма) или Способом 3 (написание небольшого расширения конфигурации).

← На главную