Имя: Пароль:
1C
 
Передача данных между модулем объекта и модулем формы
0 Svetlana_Kazan
 
06.10.17
14:35
Подскажите, пожалуйста, как можно организовать передачу данных из модуля объекта в модуль формы? В модуле формы идет проверка соответствия номенклатуры определенным условиям и формируется текст сообщения по номенклатуре, если условие отбора не удовлетворяется. На форме документа есть дерево значений, куда необходимо в соответствующее поле соответствующей номенклатуры записать сообщение. Попыталась через ПараметрыСеанса.ПараметрСеансаДляПечати:

СообщенияТЗ = Новый ТаблицаЗначений;
СообщенияТЗ.Колонки.Добавить("ОР");
СообщенияТЗ.Колонки.Добавить("ТекстыСообщений");
НоваяСтрока = СообщенияТЗ.Добавить();
НоваяСтрока.ОР = ОР;
НоваяСтрока.ТекстыСообщений = ТекстыСообщений;
Структура = Новый ФиксированнаяСтруктура("СообщенияТЗ", СообщенияТЗ);
ПараметрыСеанса.ПараметрСеансаДляПечати = Структура;
    
Выходит ошибка:
Ошибка при установке значения атрибута контекста (ПараметрСеансаДляПечати)
        ПараметрыСеанса.ПараметрСеансаДляПечати = СтруктураСообщений;    
по причине:
Фиксированный массив, фиксированное соответствие или фиксированная структура содержит значение(я) недопустимого типа
1 h-sp
 
06.10.17
14:55
(0) ну значит нельзя таблицу значений туда пихать. Попробуйте через сериализацию. Типа

Структура = Новый ФиксированнаяСтруктура("СообщенияТЗ", ОбщегоНазначения.ЗначениеВСтрокуXML(СообщенияТЗ));
2 Ненавижу 1С
 
гуру
06.10.17
15:17
почему нельзя так?

&НаСервере
Процедура ЗаполнитьТЗНаСервере()
    ТекстЗапроса =
    "ВЫБРАТЬ
    |    ХозрасчетныйОстатки.Субконто1 КАК Субконто1,
    |    ХозрасчетныйОстатки.КоличествоОстатокДт КАК КоличествоОстатокДт
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.Остатки(, Счет В ИЕРАРХИИ (&Счет), &Субконто, ) КАК ХозрасчетныйОстатки";
    
    Запрос = Новый Запрос(ТекстЗапроса);
    Запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.ТоварыНаСкладах);
    Запрос.УстановитьПараметр("Субконто",ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура);
    
    ТЗЗ = Запрос.Выполнить().Выгрузить();
    
    ЗначениеВДанныеФормы(ТЗЗ,ТЗ);
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьТЗ(Команда)
    ЗаполнитьТЗНаСервере();
КонецПроцедуры
3 Svetlana_Kazan
 
06.10.17
16:07
(1) Спасибо! Все получилось.
ТЗ = ОбщегоНазначения.ЗначениеИзСтрокиXML(ПараметрыСеанса.ПараметрСеансаДляПечати.СообщенияТЗ);
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn