четверг, 20 октября 2016 г.

Передача данных между формами

Обычно перенос между формами происходит небольшого количества данных (Дата Документа, Контрагент), но
иногда необходимо перенести целую ТЧ(Табличную часть(Таблицу Значений))

Пример приведен на обработке "Печать этикеток и ценников":

Первая форма:
//Производим перенос данных ТЧ в другую форму
&НаКлиенте
Процедура Сохранить(Команда)
   СписокПараметров = Новый Структура;
      СписокПараметров.Вставить("ПараметрыСравнениеЦен", Истина);
        СписокПараметров.Вставить("ЦеликомТЧ", Объект.ЦеныНоменклатуры);
         //ОткрытьФорму
      ФормаВыбора = ПолучитьФорму   ("Обработка.ПечатьЭтикетокИЦенников.Форма.ФормаТовары", СписокПараметров);
   ФормаВыбора.Открыть();
КонецПроцедуры




Вторая Форма:
//Получаем данные из другой формы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
...

 // Получаем параметры из другой формы "ФормаСравнениеЦен"
 // через параметр "ПараметрыСравнениеЦен"
  Если Параметры.Свойство("ПараметрыСравнениеЦен") Тогда  // Если данный параметр возвращает "Истина", Тогда производим получение данных по ТЧ
   ПолучаемТЧ = Параметры.ЦеликомТЧ;
   Если ПолучаемТЧ.Количество() <> 0 Тогда
    Для Индекс = 0 По ПолучаемТЧ.Количество() - 1 Цикл
     ПолучаемТЧИзМассива = ПолучаемТЧ[Индекс];
      Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",ПолучаемТЧИзМассива.Артикул);
      СтараяЦена   = ПолучаемТЧИзМассива.СтараяЦена;
       //Заполняем ТЧ из Массива
      ПозицииВТЧ = Объект.Товары.Добавить();
      ПозицииВТЧ.Номенклатура   = Номенклатура;
      ПозицииВТЧ.Штрихкод       = ПолучитьНомерШтрихКода(Номенклатура);
      ПозицииВТЧ.Цена     = СтараяЦена;
                  ПозицииВТЧ.ОстатокНаСкладе      = ПолучитьКоличествоОстатокНаСкладе(Номенклатура);
      ПозицииВТЧ.ШаблонЦенника        = Справочники.ШаблоныЭтикетокИЦенников.НайтиПоНаименованию("Бирка 30х42");
      ПозицииВТЧ.КоличествоЦенников = 1;
      ПозицииВТЧ.Выбран     = Истина;
    КонецЦикла;
   КонецЕсли;
  КонецЕсли
КонецПроцедуры