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