Имя: Пароль:
1C
1С v8
УФ - В обработке заполнения передать параметры между формами
0 ildary
 
22.12.16
11:25
Уважаемые специалисты, подскажите пожалуйста новичку, как правильно в дополнительной обработке заполнения документов передавать некие параметры между формами?
Я делаю обработку, в которой будет открываться форма, в которую мне надо передать дату документа, из которого вызвана обработка заполнения. Для этого я у обработки создаю реквизит ДатаДок, и в процедуре ВыполнитьКоманду() делаю так:

ТекДок = ВладелецФормы.Объект;
Объект.ДатаДок = ТекДок.Дата;
Сообщить( "ДатаДок: " + Объект.ДатаДок ); // тут выходит верная дата

после чего мне надо открыть форму, в которой пользователь готовить данные для заполнения:

        Оповещение = Новый ОписаниеОповещения( "ПослеВыбораГруппыНоменклатуры", ЭтотОбъект );
        
        ОткрытьФорму( "ВнешняяОбработка.ПодборГруппыВДокументе.Форма.ФормаНастройки",,ЭтотОбъект,,,, Оповещение  );

в которой в ПриОткрытии()

Сообщить( "ДатаДок: " + Объект.ДатаДок ); // тут выходит пустая дата

Скажите пожалуйста, как это исправить?
1 Мимохожий Однако
 
22.12.16
11:27
Отладчиком на ОткрытьФорму и проверить все значения параметров для начала
2 ildary
 
22.12.16
11:37
(1) в обработке 2 формы: Форма и ФормаНастройки. Правильно ли я вызываю вторую форму, как ВнешняяОбработка.ПодборГруппыВДокументе.Форма.ФормаНастройки? Получается ли у обоих открытых форм этой обработки ссылка на Объект? В отладчике выглядит как будто нет. А как надо правильно?
3 ildary
 
22.12.16
11:48
Простите новичка- нашел в ОткрытьФорму() второй аргумент - параметры....
4 ildary
 
22.12.16
13:31
Еще такой вопрос - при открытии формы в ПриСозданииНаСервере() я могу получить ссылку на форму, из которой я ее открыл - ВладелецФормы.Объект, тип: ДанныеФормыСтруктура. Но далее я пытаюсь сохранить эту ссылку в переменной

&НаСервере
Перем ДокВладелец;

на далее в серверной процедуре я пытаюсь обратиться к этой переменной - и получаю ее пустой (Неопределено). Скажите пожалуйста, как правильно сохранить эту ссылку в форме?
5 Мимохожий Однако
 
22.12.16
13:40
Сделай серверную функцию с возвратом из формы ссылку на  владельца формы
6 ildary
 
22.12.16
13:48
(5) ну я примерно так и сделал, только серверная процедура - ПриСозданииНаСервере(). Вот так:

&НаСервере
Перем ДокВладелец;

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ДокВладелец = ЭтаФорма.Параметры.Док;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю( "" + ТипЗнч( ДокВладелец ) ); // тут все выводится
ОбщегоНазначенияКлиентСервер.СообщитьПользователю( "" + ДокВладелец.Ссылка ); // тут все выводится
  

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

далее вызываю

&НаСервере
Процедура Тест()
   ОбщегоНазначенияКлиентСервер.СообщитьПользователю( "" + ТипЗнч( ДокВладелец ) ); //тут ругается
   ОбщегоНазначенияКлиентСервер.СообщитьПользователю( "" + ДокВладелец.Ссылка );
КонецПроцедуры
7 Мимохожий Однако
 
22.12.16
14:01
(6) "&НаСервере
Процедура Тест()
   ОбщегоНазначенияКлиентСервер.СообщитьПользователю( "" + ТипЗнч( ДокВладелец ) );//тут ругается
"
У сервера нет ушей и глаз. Поэтому здесь и ругается. Попробуй эту процедуру запустить на сервере, а ссылку передать в параметрах. Например
&НаКлиенте
Процедура Тест(ДокВладелец)
8 ildary
 
22.12.16
14:31
(7) можно поподробнее? Я не совсем понял, что надо поменять. У меня делается так:

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

&НаСервере
Процедура Тест()
    
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю( "" + ТипЗнч( ДокВладелец ) );
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю( "" + ДокВладелец.Ссылка );
    
КонецПроцедуры

Я не могу передать ДокВладелец как параметр из Заполнить(), потому что сама переменная обьявлена на сервере и там же на сервере заполняется

&НаСервере
Перем ДокВладелец;

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ДокВладелец = ЭтаФорма.Параметры.Док;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю( "" + ТипЗнч( ДокВладелец ) ); //тут все хорошо
ОбщегоНазначенияКлиентСервер.СообщитьПользователю( "" + ДокВладелец.Ссылка ); //тут все хорошо
    
КонецПроцедуры
9 Мимохожий Однако
 
22.12.16
14:33
(8) Мне не понятно, что можно сообщить пользователю в процедуре на сервере. Объясни.
10 ildary
 
22.12.16
14:38
(9) Процедура ОбщегоНазначенияКлиентСервер.СообщитьПользователю(); - присутствует в УТ11 и вызывает

    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = ТекстСообщенияПользователю;

и прекрасно работает на сервере.
11 ildary
 
22.12.16
14:38
+(10) я ее использую для отладки внешних обработок
12 Мимохожий Однако
 
22.12.16
14:40
(10) Ты из первоначального сабжа плавно перешёл к выводу сообщений. Если вернуться к началу, то достаточно в обработку добавить реквизит типа любая ссылка и в неё положить нужное значение. Из другой формы оно будет видно. Это к тому как и что передать.
13 ildary
 
22.12.16
14:42
(12) идея интересная, но:

Ошибка при установке значения атрибута контекста (ДокВладелец)
    Объект.ДокВладелец = ЭтаФорма.Параметры.Док;
по причине:
Тип "ДанныеФормыСтруктура" не может использоваться в данных формы
14 Мимохожий Однако
 
22.12.16
14:44
Проверь в отладчике значение ЭтаФорма.Параметры.Док
15 ildary
 
22.12.16
14:48
В процедуре ПриСозданииНаСервере()

ДокВладелец = ЭтаФорма.Параметры.Док;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю( "" + ТипЗнч( ДокВладелец ) );
ОбщегоНазначенияКлиентСервер.СообщитьПользователю( "" + ДокВладелец.Ссылка );

Выдает:

ДанныеФормыСтруктура
Пересчет товаров N666 от 66.66.66
16 ildary
 
22.12.16
14:50
Попытка присвоить ЭтаФорма.Параметры.Док в реквизит объекта с типом "Произвольный" выдает ошибку из (13)
17 Мимохожий Однако
 
22.12.16
14:54
Нужен тип Ссылка в принимаемом реквизите и передавать в этот реквизит Ссылка. (15) и (16) этому не соответствует. Поэтому и ошибка, поэтому и не получается.
18 Мимохожий Однако
 
22.12.16
14:56
Посмотри соседнюю ветку
НЕ присваивает значение