Проблема. Для передачи (записи) во внешнюю базу (Interbase/Fireberd) нужно получить список имен и значений реквизитов управляемой формы (именно управляемой формы а не объекта).
Поэтому прошу описать или дать ссылку на описание применения метода
ПолучитьРеквизиты()
(1)ЗачемЪ вам именно реквизиты формы? Завтра возьмут и подменят форму/настроят доступность реквизитов в зависимости от функциональных опций/прав, что вы делать будете?
Форма - всего лишь "обертка".......
(3)
(2)Задача стоит так. Передать во внешнюю базу данные, частично входящие в ОБЪЕКТ, отображаемый управляемой формой (объект формы), и данные, заполняемые вручную на отдельной вкладке на форме. Последние, подчеркиваю, не входят в объект, поэтому могут быть заполнены только из реквизитов формы. Поэтому приходится получать их список. Понятно, что их состав постоянен и меняться не будет.
(7)ЗачемЪ? Их же все равно придется как-то определять нужные из этого списка/структуры.
Как по-мне, проще просто в структуру вручную набить ключи = имени реквизита и присваивать значения циклом по этой структуре, либо при изменении значения одного реквизита интерактивно.
(8)Ну, выделять их довольно просто. Достаточно именовать их, начиная, с допустим с "Я_".
Тогда они будут доступны в общей структуре, вместе с реквизитами объекта.
(9)так и в чем проблемы-то я до сих пор категорически не понимаю. зачем усложнять на ровном месте то, что делается просто?
я бы еще понял, если бы было несколько форм, набор реквизитов постоянно менялся или еще какая хрень, тогда да, нужна некая универсальная штука, но в вашем конкретном случае - не понимаю вообще.
(11) Так сложилось исторически. В модуле перед записью отрабатывала процедура Реквизиты Объекта В Структуру. Добавилась вкладка на форме со своими реквизитами. Хотелось бы, чтобы реквизиты этой вкладки дополняли созданную структуру с реквизитами объекта. По этой методике должны работать разные документы и справочники.
(28) с ТекущийОбъект все понятно.
Вот с ТекОбъект = РеквизитФормыВЗначение("Объект"); не понятно. Это создаст новый объект в памяти и удалит его при выходе из области видимости. Ничего в объект (контекст модуль объекта) не добавит, так как по факту, в модуле формы объекта(не путать с реквизитом формы) нет.
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Перем РеквизитыФормы;
Если ДополнительныеСвойства.Свойство("РеквизитыФормы", РеквизитыФормы) Тогда
// тут получаем переданные значения реквизитов формы
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьВсеРеквизиты(Путь = "")
Результат = Новый Массив;
Реквизиты = ПолучитьРеквизиты(Путь);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, Реквизиты);
Для Каждого Реквизит Из Реквизиты Цикл
ПодчиненныеРеквизиты = ПолучитьВсеРеквизиты(Реквизит.Путь);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, ПодчиненныеРеквизиты);
КонецЦикла;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
РеквизитыВсеФормы = ПолучитьВсеРеквизиты();
ТекущийОбъект.ДополнительныеСвойства.Вставить("РеквизитыФормы", РеквизитыВсеФормы);
КонецПроцедуры
Показать
модуль объекта:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Перем РеквизитыФормы;
Если ДополнительныеСвойства.Свойство("РеквизитыФормы", РеквизитыФормы) Тогда
// тут получаем переданные значения реквизитов формы
КонецЕсли;
КонецПроцедуры
(10) Да тут у вас получится жопа небольшая.
Потому как вы собираетесь это делать в модуле объекта, но при программном создании у вас не будет ни формы, ни реквизитов заполненных руками, что тогда произойдет?
А если у вас в вашу левую базу "ПередЗаписью" записалось, а 1Ска по каким-то причинам записать не смогла, что будет с целостностью данных?
(24) С целостностью вопрос решается транзакцией (попытка и т.д.) Пишется средствами ВИД, это там доступно.
А с модулем объекта действительно проблема, от этого и весь сыр-бор. Можно было бы эти реквизиты добавить в объект (расширение), но городить костыль неохота.
(24)
как вариант,
самый простой, на форме заводите реквизит; ИменаПолей (тип Строка) в нем через запятую, перечисляете нужные реквизиты
в любом месте где нужно сформировать и отправить данные, выполняете такой код
лкДанные = Новый Структура(ИменаПолей);
ЗаполнитьЗначенияСвойств(лкДаные, ЭтаФорма);
в процессе работы с формой, добавляете или удаляете нужные имена реквизитов.