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