Вызвать процедуру формы ПередЗаписью программно из другого модуля.

1. Aleksandr_prof 192 23.09.20 09:10 Сейчас в теме
База БП 3.0. В другом модуле (внешней обработки) я получил СправочникОбъект. Необходимо его просто перезаписать выполнив подобие процедуры ПередЗаписью (та, что находится в модуле формы справочника). Проблема в том, что у меня нет формы. При попытке её получить в модуле внешней обработки, пишет ошибку при проверке синтаксиса.
Мой код:
ФормаСправочника = ПолучитьФорму("Справочник.Контрагенты.ФормаОбъекта", новый Структура("Ключ", КонтрагентОбъект.Ссылка));
УправлениеКонтактнойИнформацией.ПередЗаписьюНаСервере(ФормаСправочника, КонтрагентОбъект, ложь);
КонтрагентОбъект.Записать();


Ошибка: {ВнешняяОбработка.ЗагрузкаИзРеестраДляПЖС.Форма.Форма.Форма(178,23)}: Процедура или функция с указанным именем не определена (ПолучитьФорму)
ФормаСправочника = <<?>>ПолучитьФорму("Справочник.Контрагенты.ФормаОбъекта", новый Структура("Ключ",КонтрагентОбъект.Ссылка)); (Проверка: Сервер)
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
9. Aleksandr_prof 192 23.09.20 14:01 Сейчас в теме +0.25 $m
(1) Решил не заморачиваться и обошёл более быстрым, но менее правильным путём (так как мне это нужно единоразово), просто перезаписав элементы справочника методом формы:
&НаКлиенте
Процедура Команда1(Команда)
	
	Для каждого элем из ТаблицаСсылокНаЭлементыСправочника цикл // ТаблицаСсылок - реквизит формы
		ФормаСправочника = ПолучитьФорму("Справочник.Контрагенты.ФормаОбъекта", новый Структура("Ключ", элем.Ссылка));
		ФормаСправочника.Записать();
	КонецЦикла;
	
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
9. Aleksandr_prof 192 23.09.20 14:01 Сейчас в теме +0.25 $m
(1) Решил не заморачиваться и обошёл более быстрым, но менее правильным путём (так как мне это нужно единоразово), просто перезаписав элементы справочника методом формы:
&НаКлиенте
Процедура Команда1(Команда)
	
	Для каждого элем из ТаблицаСсылокНаЭлементыСправочника цикл // ТаблицаСсылок - реквизит формы
		ФормаСправочника = ПолучитьФорму("Справочник.Контрагенты.ФормаОбъекта", новый Структура("Ключ", элем.Ссылка));
		ФормаСправочника.Записать();
	КонецЦикла;
	
КонецПроцедуры
Показать
2. FatPanzer 23.09.20 09:17 Сейчас в теме
1. И не получится. Нет формы - нет и её контекста. ПолучитьФорму() на сервере не доступно.
2. Вам этот обработчик ни к чему, он реализован для того, чтобы осуществить проверку без закрытия формы. А формы у вас нет, и проверять нечего.

Что там в этом обработчике такого, что вам надо проверять в Объекте?
3. Aleksandr_prof 192 23.09.20 09:25 Сейчас в теме
(2) Там табличная часть с контактной информацией. Она не заполнена скрытыми техническими реквизитами. Этот обработчик как раз их заполняет автоматически. Видимо придётся тогда туда отладчиком проваливаться и собирать по кускам механизм (или обращение к нему через экспортные модули).
5. FatPanzer 23.09.20 09:39 Сейчас в теме
(3) Я думаю, ты вполне можешь обойтись вот этим методом (на скрине). Это в том же модуле. И безо всякой формы. Метод ПередЗаписьюНаСервере() использует именно его.
Прикрепленные файлы:
alex-l19041; Vitaly1C8; +2 Ответить
6. Aleksandr_prof 192 23.09.20 09:58 Сейчас в теме
(5) Попробовал. Выдаёт ошибку. Эта процедура тоже косвенно связана с формой.
7. FatPanzer 23.09.20 09:59 Сейчас в теме
(6) Это смотря что ты передаешь в её параметры. И никак она с формой не связана. Она связана с объектом
4. starjevschik 23.09.20 09:25 Сейчас в теме
Надо переписать код в свою обработку.
Это не будет просто, т.к. события формы используют данные формы, придется все это переписывать на использование данных объекта.
8. -AI- 23.09.20 10:13 Сейчас в теме
если нужно прям повторить всё-всё, то и повторяйте всё-все...

0) наверняка в обработке есть хоть какая-то форма....

1) вот в ней создавайте реквизит ОбъектСправочника, невидимую группу "КонтактнаяИнформация" и т.д.
(и все служебные реквизиты, если они есть в оригинальной форме, а не создаются программно)

2) сначала читайте объект, в реквизит ОбъектСправочника, потом запускайте то что находится в процедурах ПриСозданииНаСервере и/или ПриЧтенииНасервере и т.д.

3) а потом все обратные процедуры: УправлениеКонтактнойИнформацией.ПередЗаписьюНаСервере и т.д.

т.е. воссоздайте все механизмы но в контексте своей формы...

PS возможно можно обойтись без реквизита ОбъектСправочника, т.е. пользоваться только переменной, результатом ПолучитьОбъект()...
а вот другие элементы придётся всё же создать...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот