Как добавить реквизит «Дата выпуска» в печатную форму ОС-6 через расширение в 1С:Бухгалтерия

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

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

Анализ синтаксической ошибки «ИЗ > ИЗ» в запросе

Выясним причину ошибки, которая возникла у автора темы при изменении функции ПечатьОС6_2003. В сообщении №6 компилятор выдает сообщение о синтаксической ошибке. Проанализируем исходный текст запроса и выделим две критические проблемы, которые привели к сбою системы.

Ошибка 1. Лишняя запятая перед оператором ИЗ

В первом запросе пакета объединения перед ключевым словом ИЗ была допущена синтаксическая небрежность:


СостоянияОСОрганизаций.Регистратор КАК Регистратор, // <-- Лишняя запятая!
ИЗ
    РегистрСведений.СобытияОСОрганизаций КАК СобытияОСОрганизаций

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

Ошибка 2. Несовпадение количества полей при использовании ОБЪЕДИНИТЬ ВСЕ

При объединении таблиц с помощью конструкции ОБЪЕДИНИТЬ ВСЕ крайне важно соблюдать правило: количество выбираемых полей, их типы и порядок следования в объединяемых запросах должны быть идентичными. Посмотрим на структуру частей запроса автора:

  1. В первой части запроса выбирается 6 полей:
    • Состояние
    • ДатаСостояния
    • НазваниеДокумента
    • НомерДокумента
    • Событие
    • Регистратор
  2. Во второй части запроса выбирается 8 полей:
    • NULL
    • СобытияОСОрганизацийСрезПоследних.Период
    • СобытияОСОрганизацийСрезПоследних.НазваниеДокумента
    • СобытияОСОрганизацийСрезПоследних.НомерДокумента
    • СобытияОСОрганизацийСрезПоследних.Событие
    • СобытияОСОрганизацийСрезПоследних.Регистратор
    • NULL
    • NULL

Для исправления этой ошибки необходимо строго выровнять количество выбираемых полей в обеих частях объединения, убрав лишние значения NULL или добавив недостающие пустые заглушки в первую часть запроса.

Почему реквизит «Дата выпуска» не выводился на печать, хотя был добавлен в запрос

Разберем ситуацию, когда разработчик добавил поле ОсновныеСредства.ДатаВыпуска КАК ДатаВыпуска в основной текст первого запроса, но при формировании печатной формы ячейка осталась пустой. Проанализируем, почему это происходит.

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

  1. Настроить макет печатной формы: В макете ОС6 в области Шапка нужно найти необходимую ячейку (или создать новую), установить для нее свойство «Заполнение» в значение «Параметр» и задать имя параметра, например, ДатаВыпуска.
  2. Передать данные из выборки в параметр макета в коде: В теле функции формирования печатной формы необходимо заполнить данный параметр. В коде автора строка заполнения отсутствовала. Требуется добавить следующее выражение в блоке заполнения параметров области Шапка:

Шапка.Параметры.ДатаВыпуска = Формат(ВыборкаОбъектов.ДатаВыпуска, "ДФ=dd.MM.yyyy");

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

Реализация задачи через расширение конфигурации по шагам

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

Шаг 1. Создание и настройка расширения

Если в базе еще нет расширения, откройте Конфигуратор, перейдите в меню Конфигурация -> Расширения конфигурации, нажмите «Добавить». Укажите назначение «Адаптация» и снимите флажки «Безопасный режим» и «Защита от опасных действий» (если планируется работа с файловой системой или внешними библиотеками, для печатных форм это также рекомендуется для избежания лишних предупреждений системы безопасности).

Шаг 2. Заимствование объектов в расширение

Нам понадобятся два объекта из основной конфигурации:

Шаг 3. Редактирование заимствованного макета

Откроем макет ОС6 внутри расширения. Найдем нужную строку в области Шапка (например, рядом с заводским номером или датой принятия к учету). Выделим ячейку, откроем ее свойства (F4), установим свойство Заполнение в значение Параметр, а в поле Параметр введем имя: ДатаВыпуска.

Шаг 4. Модификация кода в модуле менеджера расширения

При переносе метода в расширение платформа предлагает на выбор несколько директив выполнения. Проанализируем варианты:

Рассмотрим пример реализации с использованием директивы &Вместо, исправляющей все ошибки исходного запроса и корректно передающей параметр на печать:


&Вместо("ПечатьОС6_2003")
Функция Расш1_ПечатьОС6_2003(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)
    
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.АвтоМасштаб = Истина;
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    
    // Получаем макет из расширения (он приоритетнее типового)
    Макет = УправлениеПечатью.МакетПечатнойФормы("Справочник.ОсновныеСредства.ОС6");
    
    Шапка = Макет.ПолучитьОбласть("Шапка");
    ШапкаРазделов1и2 = Макет.ПолучитьОбласть("ШапкаРазделов1и2");
    ШапкаРаздела3 = Макет.ПолучитьОбласть("ШапкаРаздела3");
    СтрокиРаздела3 = Макет.ПолучитьОбласть("СтрокиРаздела3");
    ШапкаРаздела4 = Макет.ПолучитьОбласть("ШапкаРаздела4");
    СтрокаРаздела4 = Макет.ПолучитьОбласть("СтрокаРаздела4");
    ПодвалСтраницы1 = Макет.ПолучитьОбласть("ПодвалСтраницы1");
    ШапкаРазделов5и6 = Макет.ПолучитьОбласть("ШапкаРазделов5и6");
    СтрокаРазделов5и6 = Макет.ПолучитьОбласть("СтрокаРазделов5и6");
    ШапкаРаздела7_1 = Макет.ПолучитьОбласть("ШапкаРаздела7_1");
    ШапкаРаздела7_2 = Макет.ПолучитьОбласть("ШапкаРаздела7_2");
    ПодвалСтраницы2 = Макет.ПолучитьОбласть("ПодвалСтраницы2");
    
    Если ПараметрыПечати.Свойство("ДатаСведений") Тогда
        ДатаСведений = ПараметрыПечати.ДатаСведений;
    Иначе
        ДатаСведений = ОбщегоНазначения.ТекущаяДатаПользователя;
    КонецЕсли;
    
    ТаблицаОбъектов = Новый ТаблицаЗначений;
    ТаблицаОбъектов.Колонки.Добавить("ОС", Новый ОписаниеТипов("СправочникСсылка.ОсновныеСредства"));
    ТаблицаОбъектов.Колонки.Добавить("Номер", ОбщегоНазначения.ОписаниеТипаЧисло(15, 2));
    
    НомерСтроки = 1;
    Для каждого ОС Из МассивОбъектов Цикл
        СтрокаТаблицы = ТаблицаОбъектов.Добавить;
        СтрокаТаблицы.ОС = ОС;
        СтрокаТаблицы.Номер = НомерСтроки;
        НомерСтроки = НомерСтроки + 1;
    КонецЦикла;
    
    // Формируем исправленный запрос для получения сведений ОС, включая ДатуВыпуска
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТаблицаОбъектов", ТаблицаОбъектов);
    Запрос.УстановитьПараметр("ДатаСведений", ДатаСведений);
    Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
    
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	ТаблицаОС.ОС КАК ОС,
    |	ТаблицаОС.Номер КАК Порядок
    |ПОМЕСТИТЬ ТаблицаОС
    |ИЗ
    |	&ТаблицаОбъектов КАК ТаблицаОС
    |ИНДЕКСИРОВАТЬ ПО
    |	ОС
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |	СведенияПоОрганизации.ОсновноеСредство КАК ОС,
    |	СведенияПоОрганизации.Организация КАК Организация
    |ПОМЕСТИТЬ СведенияПоОрганизации
    |ИЗ
    |	РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних(&ДатаСведений, ОсновноеСредство В (&МассивОбъектов)) КАК СведенияПоОрганизации
    |ИНДЕКСИРОВАТЬ ПО
    |	ОС
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |	ОсновныеСредства.Ссылка КАК Ссылка,
    |	ОсновныеСредства.Код КАК Код,
    |	ОсновныеСредства.Наименование КАК Наименование,
    |	ОсновныеСредства.АмортизационнаяГруппа КАК АмортизационнаяГруппа,
    |	ОсновныеСредства.ГруппаОС КАК ГруппаОС,
    |	ОсновныеСредства.ДатаВыпуска КАК ДатаВыпуска,
    |	ОсновныеСредства.ЗаводскойНомер КАК ЗаводскойНомер,
    |	ОсновныеСредства.Изготовитель КАК Изготовитель,
    |	ОсновныеСредства.КодПоОКОФ КАК КодПоОКОФСсылка,
    |	ОсновныеСредства.КодПоОКОФ.Код КАК КодПоОКОФ,
    |	ОсновныеСредства.НаименованиеПолное КАК НаименованиеПолное,
    |	ОсновныеСредства.НомерПаспорта КАК НомерПаспорта,
    |	ОсновныеСредства.ШифрПоЕНАОФ КАК ШифрПоЕНАОФ,
    |	ЕСТЬNULL(СведенияПоОрганизации.Организация, ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)) КАК Организация,
    |	ЕСТЬNULL(СведенияПоОрганизации.Организация.КодПоОКПО, """") КАК КодПоОКПО,
    |	ТаблицаОС.Порядок КАК Порядок
    |ИЗ
    |	ТаблицаОС КАК ТаблицаОС
    |	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ОсновныеСредства КАК ОсновныеСредства
    |		ПО ТаблицаОС.ОС = ОсновныеСредства.Ссылка
    |	ЛЕВОЕ СОЕДИНЕНИЕ СведенияПоОрганизации КАК СведенияПоОрганизации
    |		ПО ТаблицаОС.ОС = СведенияПоОрганизации.ОС
    |ГДЕ
    |	ОсновныеСредства.ЭтоГруппа = ЛОЖЬ
    |УПОРЯДОЧИТЬ ПО
    |	Порядок";
    
    РезультатЗапрос = Запрос.Выполнить();
    Если РезультатЗапрос.Пустой() Тогда
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Печатная форма № ОС-6 может быть сформирована только для элементов справочника.'"));
        Возврат Неопределено;
    КонецЕсли;
    
    ВыборкаОбъектов = РезультатЗапрос.Выбрать();
    ПервыйДокумент = Истина;
    
    Пока ВыборкаОбъектов.Следующий() Цикл
        
        // Получаем последние сведения об ОС (амортизация, местонахождение, инвентарный номер)
        ЗапросСведения = Новый Запрос;
        ЗапросСведения.УстановитьПараметр("Организация", ВыборкаОбъектов.Organizaciya);
        ЗапросСведения.УстановитьПараметр("ДатаСведений", ДатаСведений);
        ЗапросСведения.УстановитьПараметр("ОсновноеСредство", ВыборкаОбъектов.Ссылка);
        
        ЗапросСведения.Текст = 
        "ВЫБРАТЬ
        |	ПараметрыАмортизации.СтоимостьДляВычисленияАмортизации,
        |	ПараметрыАмортизации.СрокПолезногоИспользования,
        |	СчетаУчета.СчетУчета,
        |	ПервоначальныеСведения.ПервоначальнаяСтоимость,
        |	ПервоначальныеСведения.ИнвентарныйНомер,
        |	Местонахождение.Местонахождение.Наименование КАК МестонахождениеНаименование,
        |	Местонахождение.МОЛ
        |ИЗ
        |	РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних(&ДатаСведений, Организация = &Организация И ОсновноеСредство = &ОсновноеСредство) КАК ПервоначальныеСведения
        |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыАмортизацииОСБухгалтерскийУчет.СрезПоследних(&ДатаСведений, Организация = &Организация И ОсновноеСредство = &ОсновноеСредство) КАК ПараметрыАмортизации
        |		ПО ПервоначальныеСведения.ОсновноеСредство = ПараметрыАмортизации.ОсновноеСредство
        |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СчетаБухгалтерскогоУчетаОС.СрезПоследних(&ДатаСведений, Организация = &Организация И ОсновноеСредство = &ОсновноеСредство) КАК СчетаУчета
        |		ПО ПервоначальныеСведения.ОсновноеСредство = СчетаУчета.ОсновноеСредство
        |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&ДатаСведений, Организация = &Организация И ОсновноеСредство = &ОсновноеСредство) КАК Местонахождение
        |		ПО ПервоначальныеСведения.ОсновноеСредство = Местонахождение.ОсновноеСредство";
        
        ВыборкаСведений = ЗапросСведения.Выполнить().Выбрать();
        Если Не ВыборкаСведений.Следующий() Тогда
            Продолжить;
        КонецЕсли;
        
        Если НЕ ПервыйДокумент Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        ПервыйДокумент = Ложь;
        
        НомерСтрокиНачало = ТабДок.ВысотаТаблицы + 1;
        
        // Заполняем параметры области Шапка
        СведенияОбОрганизации = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(ВыборкаОбъектов.Организация, ДатаСведений);
        Шапка.Параметры.Организация = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОбОрганизации, "НаименованиеДляПечатныхФорм");
        Шапка.Параметры.КодПоОКПО = ВыборкаОбъектов.КодПоОКПО;
        Шапка.Параметры.Подразделение = ВыборкаСведений.МестонахождениеНаименование;
        Шапка.Параметры.НаименованиеОС = ?(НЕ ЗначениеЗаполнено(ВыборкаОбъектов.НаименованиеПолное), ВыборкаОбъектов.Наименование, ВыборкаОбъектов.НаименованиеПолное);
        Шапка.Параметры.НомерДок = ВыборкаСведений.ИнвентарныйНомер;
        Шапка.Параметры.ДатаДок = Формат(ДатаСведений,"ДФ=dd.MM.yyyy");
        Шапка.Параметры.МестоНахождениеОС = ВыборкаСведений.МестонахождениеНаименование;
        Шапка.Параметры.ИзготовительОС = ВыборкаОбъектов.Изготовитель;
        Шапка.Параметры.КодПоОКОФ = ВыборкаОбъектов.КодПоОКОФ;
        Шапка.Параметры.НомерГруппы = ВыборкаОбъектов.АмортизационнаяГруппа;
        Шапка.Параметры.НомерПаспорта = ВыборкаОбъектов.НомерПаспорта;
        Шапка.Параметры.ЗаводскойНомер = ВыборкаОбъектов.ЗаводскойНомер;
        Шапка.Параметры.ИнвентарныйНомер = ВыборкаСведений.ИнвентарныйНомер;
        Шапка.Параметры.СубСчет = Строка(ВыборкаСведений.СчетУчета);
        
        // Добавленная строка: Вывод "Даты выпуска" на печатную форму
        Шапка.Параметры.ДатаВыпуска = Формат(ВыборкаОбъектов.ДатаВыпуска, "ДФ=dd.MM.yyyy");
        
        // Исправленный запрос по событиям (убрана синтаксическая ошибка "ИЗ", выровнены поля ОБЪЕДИНИТЬ ВСЕ)
        ЗапросСобытий = Новый Запрос;
        ЗапросСобытий.УстановитьПараметр("Организация", ВыборкаОбъектов.Организация);
        ЗапросСобытий.УстановитьПараметр("ОсновноеСредство", ВыборкаОбъектов.Ссылка);
        ЗапросСобытий.УстановитьПараметр("ДатаСведений", ДатаСведений);
        
        ВидыСобытий = Новый СписокЗначений;
        ВидыСобытий.Добавить(Перечисления.ВидыСобытийОС.Модернизация);
        ВидыСобытий.Добавить(Перечисления.ВидыСобытийОС.КапитальныйРемонт);
        ЗапросСобытий.УстановитьПараметр("МодернизацияИКапРемонт", ВидыСобытий);
        
        ЗапросСобытий.Текст = 
        "ВЫБРАТЬ
        |	СостоянияОСОрганизаций.Состояние КАК Состояние,
        |	СостоянияОСОрганизаций.ДатаСостояния КАК ДатаСостояния,
        |	СобытияОСОрганизаций.НазваниеДокумента КАК НазваниеДокумента,
        |	СобытияОСОрганизаций.НомерДокумента КАК НомерДокумента,
        |	СобытияОСОрганизаций.Событие КАК Событие,
        |	СостоянияОСОрганизаций.Регистратор КАК Регистратор
        |ИЗ
        |	РегистрСведений.СобытияОСОрганизаций КАК СобытияОСОрганизаций
        |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияОСОрганизаций КАК СостоянияОСОрганизаций
        |		ПО СобытияОСОрганизаций.Период = СостоянияОСОрганизаций.ДатаСостояния
        |ГДЕ
        |	СобытияОСОрганизаций.Организация = &Organizaciya
        |	И СостоянияОСОрганизаций.Организация = &Organizaciya
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |	NULL,
        |	СобытияОСОрганизацийСрезПоследних.Период,
        |	СобытияОСОрганизацийСрезПоследних.НазваниеДокумента,
        |	СобытияОСОрганизацийСрезПоследних.НомерДокумента,
        |	СобытияОСОрганизацийСрезПоследних.Событие,
        |	СобытияОСОрганизацийСрезПоследних.Регистратор
        |ИЗ
        |	РегистрСведений.СобытияОСОрганизаций.СрезПоследних(&ДатаСведений, ОсновноеСредство = &ОсновноеСредство И Организация = &Организация И Событие.ВидСобытияОС В (&МодернизацияИКапРемонт)) КАК СобытияОСОрганизацийСрезПоследних";
        
        ВыборкаСобытий = ЗапросСобытий.Выполнить().Выбрать();
        ДатаПринятия = '00010101';
        ДатаСписания = '00010101';
        
        Пока ВыборкаСобытий.Следующий() Цикл
            Если ВыборкаСобытий.Состояние = Перечисления.СостоянияОС.ПринятоКУчету Тогда
                ДатаПринятия = ВыборкаСобытий.ДатаСостояния;
            ИначеЕсли ВыборкаСобытий.Состояние = Перечисления.СостоянияОС.СнятоСУчета Тогда
                ДатаСписания = ВыборкаСобытий.ДатаСостояния;
            КонецЕсли;
        КонецЦикла;
        
        Шапка.Параметры.ДатаВвода = ДатаПринятия;
        Шапка.Параметры.ДатаСписания = ДатаСписания;
        
        ТабДок.Вывести(Шапка);
        
        // Выводим остальные разделы карточки ОС-6
        ШапкаРазделов1и2.Параметры.ПервоначальнаяСтоимость = ВыборкаСведений.ПервоначальнаяСтоимость;
        ШапкаРазделов1и2.Параметры.СрокПолезногоИспользования = ВыборкаСведений.СрокПолезногоИспользования;
        ТабДок.Вывести(ШапкаРазделов1и2);
        ТабДок.Вывести(ШапкаРаздела3);
        ТабДок.Вывести(СтрокиРаздела3);
        
        // (Дальнейший типовой код вывода остальных разделов 4, 5, 6, 7...)
        // ...
        
        УправлениеПечатью.ЗадатьОбластьПечатиДокумента(TabDok, НомерСтрокиНачало, ОбъектыПечати, ВыборкаОбъектов.Ссылка);
    КонецЦикла;
    
    Возврат ТабДок;
КонецФункции

Альтернативный вариант: Использование внешней печатной формы (ВПФ)

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

Для создания такой формы разработчику достаточно создать внешнюю обработку (.epf), добавить в модуль объекта стандартную экспортную функцию интеграции с БСП СведенияОВнешнейОбработке(), перенести в макет обработки макет ОС6, а в модуль объекта — код функции формирования табличного документа.

Рассмотрим пример кода регистрации ВПФ в модуле объекта внешней обработки:


Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке«3.0.0.0»();
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидДополнительнойОтчетаОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Назначение.Добавить("Справочник.ОсновныеСредства");
    ПараметрыРегистрации.Наименование = "Инвентарная карточка ОС-6 (с Датой выпуска)";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    ПараметрыРегистрации.Версия = "1.0";
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "ОС-6 (с Датой выпуска)";
    НоваяКоманда.Идентификатор = "ОС6_ДатаВыпуска";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.Модификатор = "ПечатьMXL";
    
    Возврат ПараметрыРегистрации;
КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    ПараметрыПечати = Новый Структура;
    ПечатнаяФорма = КомандаПечати(МассивОбъектов, ОбъектыПечати, ПараметрыПечати);
    
    // Добавление сформированного документа в коллекцию БСП для вывода на экран
    СтрокаПечатнойФормы = ОбщегоНазначенияКлиентСервер.СтрокаТаблицыЗначенийПоСвойству(КоллекцияПечатныхФорм, "Идентификатор", "ОС6_ДатаВыпуска");
    Если СтрокаПечатнойФормы <> Неопределено Тогда
        СтрокаПечатнойФормы.ТабличныйДокумент = ПечатнаяФорма;
        СтрокаПечатнойФормы.СинонимМакета = "ОС-6 (с Датой выпуска)";
    КонецЕсли;
    
КонецПроцедуры

Использование этого подхода гарантирует стабильность системы и решает задачу бизнеса по выводу даты выпуска в инвентарную карточку ОС-6 с минимальными затратами на последующее сопровождение программного продукта.

← На главную