Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
06 фев 2026, 07:59

передать Запись РС на другую форму

Автор sali, 28 янв 2026, 10:54

0 Пользователей и 1 гость просматривают эту тему.

sali

ранее создавал програмнный регламент - регистр сведений. теперь добавляю кнопку принудительного выполнения регламента, то есть пользователь как только настроил всё , нажимает "выполнить обмен с ЭДО" и регламент должен тут же выполниться. проблема в чём?
так как делал по принципу работы с планом обмена (а там все здорово потому что есть объект и ссылка) , а я это делаю в расширении на 21 которая не позволяет создать план обмена. в общем проблема в том что , не могу присвоить значение регламента реквизиту формы. из формы узла передаю сам регламент
&НаКлиенте
Процедура ЗапускОбменаИнтерактивно(УзелОбмена)

ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("УзелОбмена", УзелОбмена); // здесь хранятся все данные

ОткрытьФорму("РегистрСведений.ЭДОН_ПараметрыРегламентныхЗаданий.Форма.ФормаВыполнениеОбмена", ПараметрыФормы, ЭтаФорма, Запись);

КонецПроцедуры

потом в форме выполнения обмена нужно присвоить реквизиту значение параметра . по идеи просто
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

узелобмена = параметры.узелобмена;


КонецПроцедуры
но. УзелОбмена - это реквизит формы с типом РегистрСведенийНаборЗаписей.ЭДОН_ПараметрыРегламентныхЗаданий, в отладке ДанныеФормыСтруктураСКоллекцией, а Параметры.УзелОбмена - это данныеФормыСтруктура , что уже выдает ошибку
Нельзя изменять поле, содержащее объект данных формы
как по другому присвоить значение?

sali


sali


sali

я стал передавать не всю запись , а только идентификатор, и стал он писать что слишком много фактических параметров , как так?
&НаКлиенте
Процедура ВыполнитьОбмен(Команда)

Если Модифицированность Тогда

ПоказатьВопрос(Новый ОписаниеОповещения("ПослеЗакрытияВопросаОСохраненииНастройкиОбменаДанных", ЭтаФорма, Параметры), "Настройка обмена изменена и не записана. Записать?", РежимДиалогаВопрос.ДаНет);

Иначе   
ЗапускОбменаИнтерактивно(Запись.Идентификаторр);

КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ЗапускОбменаИнтерактивно(УзелОбмена)

ПараметрыФормы = Новый Структура;   
ПараметрыФормы.Вставить("УзелОбмена", УзелОбмена);

ОткрытьФорму("РегистрСведений.ЭДОН_ПараметрыРегламентныхЗаданий.Форма.ФормаВыполнениеОбмена", ПараметрыФормы, ЭтаФорма, Запись);

КонецПроцедуры

// на форме выполнения обмена
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

// узелобмена - реквизитформы, тип произвольный
УзелОбмена = Параметры.УзелОбмена;

КонецПроцедуры                                                           

&НаКлиенте
Процедура ПриОткрытии(Отказ)

Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыполняетсяОбмен;
ЭтаФорма.ПодключитьОбработчикОжидания("ЗапуститьВыполнениеОбмена", 0.1, Истина);

ЭтаФорма.ПодключитьОбработчикОжидания("ОбновлениеИнформацииОСинхронизации", 3);

КонецПроцедуры


&НаКлиенте
Процедура ЗапуститьВыполнениеОбмена()

ПараметрыОбмена =  Новый Структура;       
ПараметрыОбмена.Вставить("УзелОбмена", УзелОбмена);

ДлительнаяОперация = ВыполнитьОбменССайтомНаСервере(ПараметрыОбмена);
ИдентификаторЗадания = ДлительнаяОперация.ИдентификаторЗадания;

ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;


ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииОперацииЗагрузки", ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОписаниеОповещения, ПараметрыОжидания);

КонецПроцедуры

&НаСервере
Функция ВыполнитьОбменССайтомНаСервере(ПараметрыОбмена)

ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Выполнение обмена с ЭДО'");

Результат = ДлительныеОперации.ВыполнитьВФоне("ЭДОН_РегламентныеЗадания.ВыполнитьОбменИнтерактивно", ПараметрыОбмена, ПараметрыВыполнения);

Возврат Результат;

КонецФункции


// уже в самом общем модуле
Процедура ВыполнитьОбменИнтерактивно(ПараметрыОбмена) Экспорт

УзелОбмена = ПараметрыОбмена.УзелОбмена;
ВыполнитьРегламентноеЗадание(УзелОбмена);

КонецПроцедуры   





Максим75

sali, может здесь Запись.Идентификаторр на две р ругается?

sali

Максим75, Так реквизит записан, есть два идентификатора, зачем их создавал аж 2 не помню
хорошо, поменяю на Запись.Идентификатор , если также ругаться будет, то что тогда?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск