8.х Передача значения из одной формы в другую

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем quazare, 9 апр 2009.

  1. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    выдрал куски из рабочей базы :)
    Основная:
    СтандартнаяОбработка=Ложь;
    ФормаВыбораСд=Документы.ЗаказПокупателя.ПолучитьФорму("ФормаДляВнутрПлат",ЭтаФорма);
    ФормаВыбораСд.организация=Организация;
    ФормаВыбораСд.Контрагент=Контрагент;
    ФормаВыбораСд.Открыть();

    В вызываемой форме созданы реквизиты формы отрганизая и контрагент...
    Процедура ТабличноеПоле1Выбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
    СтандартнаяОбработка=Ложь;
    ОповеститьОВыборе(ВыбраннаяСтрока);
    КонецПроцедуры
  2. TopicStarter Overlay
    quazare
    Offline

    quazare Опытный в 1С

    Регистрация:
    21 мар 2009
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    А можете привести пример процедуры "ОбработкаВыбора" в основной форме?
  3. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.756
    Симпатии:
    509
    Баллы:
    204
    ОбработкаВыбора-это встроенная функция, такая же как и ПриОткрытии() или ПриЗаписи().
    Вот код:
    Код:
    Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
    
    Перем Команда;
    
    Если ТипЗнч(ЗначениеВыбора) = Тип("Структура") Тогда
    ЗначениеВыбора.Свойство("Команда", Команда);
    
    Если Команда = "ПодборВТабличнуюЧастьТовары" Тогда
    ОбработкаПодбора(Товары, ЗначениеВыбора);
    
    ИначеЕсли Команда = "ПодборВТабличнуюЧастьВозвратнаяТара" Тогда
    ОбработкаПодбора(ВозвратнаяТара, ЗначениеВыбора);
    
    ИначеЕсли Команда = "ПодборВТабличнуюЧастьУслуги" Тогда
    ОбработкаПодбора(Услуги, ЗначениеВыбора);
    
    ИначеЕсли Команда = "ЗаполнениеТабличныхЧастей" Тогда
    
    Если ЗначениеВыбора.ЗаполнятьТовары Тогда
    ОбработкаЗаполнения(Товары, ЗначениеВыбора.Товары);
    КонецЕсли;
    Если ЗначениеВыбора.ЗаполнятьТару Тогда
    ОбработкаЗаполнения(ВозвратнаяТара, ЗначениеВыбора.ВозвратнаяТара);
    КонецЕсли;
    Если ЗначениеВыбора.ЗаполнятьУслуги Тогда
    ОбработкаЗаполнения(Услуги, ЗначениеВыбора.Услуги);
    КонецЕсли;
    
    КонецЕсли;
    КонецЕсли;
    
    КонецПроцедуры // ОбработкаВыбора()
    
  4. TopicStarter Overlay
    quazare
    Offline

    quazare Опытный в 1С

    Регистрация:
    21 мар 2009
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    Вообщем вот:

    Код:
    НачалоСтарта=0;
    
    Пока НеПустые.Следующий() И ВыбранноеКоличество>0 Цикл
    
    ПолученныеДанные.Добавить(Новый Массив);
    ПолученныеДанные[НачалоСтарта].Добавить(НеПустые.ИдНепустые);
    ПолученныеДанные[НачалоСтарта].Добавить(НеПустые.КоличествоОстаток);			
    Если НеПустые.КоличествоОстаток<=ВыбранноеКоличество Тогда
    ПолученныеДанные[НачалоСтарта].Добавить(НеПустые.КоличествоОстаток);
    Иначе
    ПолученныеДанные[НачалоСтарта].Добавить(ВыбранноеКоличество);
    КонецЕсли;
    ПолученныеДанные[НачалоСтарта].Добавить(НеПустые.Склад);
    ПолученныеДанные[НачалоСтарта].Добавить(НеПустые.Артикул);
    ПолученныеДанные[НачалоСтарта].Добавить(НеПустые.Номенклатура);
    ПолученныеДанные[НачалоСтарта].Добавить(НеПустые.Группа);
    ПолученныеДанные[НачалоСтарта].Добавить(НеПустые.Производитель);
    ПолученныеДанные[НачалоСтарта].Добавить(НеПустые.СрокГодности);
    ПолученныеДанные[НачалоСтарта].Добавить(НеПустые.Серия);
    ПолученныеДанные[НачалоСтарта].Добавить(НеПустые.МестоХранения);
    ПолученныеДанные[НачалоСтарта].Добавить(НеПустые.Сертификат);
    НачалоСтарта=НачалоСтарта+1;	
    ВыбранноеКоличество=ВыбранноеКоличество - НеПустые.КоличествоОстаток;
    КонецЦикла;
    
    
    Здесь я сформировал двумерных массив на передачу в другую форму, теперь я его хочу передать этот массив в другую форму.

    Насколько я понимаю - передачу в другую форму можно осуществить вот так:

    ОповеститьОВыборе(ПолученныеДанные) - сразу передаю 2-у мерный массив.
  5. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.756
    Симпатии:
    509
    Баллы:
    204
    Да, правильно. Только меня смущает что в цикле каждый раз создается массив.
  6. TopicStarter Overlay
    quazare
    Offline

    quazare Опытный в 1С

    Регистрация:
    21 мар 2009
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    Динамически создается двумерный массив (массив массивов)

    До цикла записано так

    Код:
    ПолученныеДанные = Новый Массив;
    
    Нужно для того что бы потом считывать каждую ячейку по каждой строке типа

    Код:
    ПолученныеДанные[строка][0]- это один параметр строки "строка"....
    
    Теперь по форме:

    Терзают сомнения, что все-таки, при открытии одной формы через другую - открывающаяся форма не является дочерней... Фактически я просто создал вручную формуДокумента и формыВыбора в объекте Документ.РеализацияТовара

    Открываю вот так:

    Код:
    Процедура ОткрытьФормуЗапросаНажатие(Элемент)
    СтандартнаяОбработка = ложь;
    ФормаВыборки = ЭтотОбъект.ПолучитьФорму("ФормаВыбора", ЭтаФорма); 
    ФормаВыборки.Открыть(); 
    КонецПроцедуры
    
    а где указывать нужно, что "ФормаВыбора" - это дочерняя форма формы "ФормаДокумента"???
  7. TopicStarter Overlay
    quazare
    Offline

    quazare Опытный в 1С

    Регистрация:
    21 мар 2009
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    Вооо.... решение найдено. Выкладываю здесь, может кому понадобиться:

    В общем случае:

    ФормаДокумента ("материнская") имеет такой код:

    Код:
    Процедура ОткрытьФормуЗапросаНажатие(Элемент)
    
    ФормаВыборки = ЭтотОбъект.ПолучитьФорму("ФормаВыбора", ЭтаФорма); 
    ФормаВыборки.ОткрытьМодально(); 
    
    КонецПроцедуры
    
    
    Процедура ОбработкаОповещения(ИмяСобытия, РезультатВыбора, ИсточникВыбора)
    
    Если ИмяСобытия="Передача из формы выбора" И ИсточникВыбора="ФормаВыбора" Тогда
    ПолученныеДанные = РезультатВыбора;
    КонецЕсли;
    
    КонецПроцедуры
    
    ФормаВыбора ("дочерняя") имеет такой код:



    Код:
    ....
    ИмяСобытия="Передача из формы выбора";
    ИсточникДанных="ФормаВыбора";
    
    Оповестить(ИмяСобытия,ПолученныеДанные,ИсточникДанных);
    ЭтаФорма.Закрыть();
    ....
    
    
    где - ПолученныеДанные - это любые данные (например я использую массив).
  8. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.756
    Симпатии:
    509
    Баллы:
    204
    Долго же мучелись:):):)
  9. TopicStarter Overlay
    quazare
    Offline

    quazare Опытный в 1С

    Регистрация:
    21 мар 2009
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    Согласен, пока не понял ...

    Есть еще мелкий вопросец на эту тему. Собственно массив передал, обращаться к его элементам я могу.

    Теперь нужно заполнить данными массива табличную часть формы.

    Как добавлять новые строки в табличную часть я уже понял, но не описано как заполнять эту строку

    Код:
    ЭлементыФормы.Медикаменты.ДобавитьСтроку();
    
    В очередной раз прошу помощи :(
  10. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.756
    Симпатии:
    509
    Баллы:
    204
    Покажи реквизиты табличной части.
  11. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    строка = Медикаменты.ДобавитьСтроку(); //правильнее добавлять строку к данным, а не к визуальному объекту...
    строка.Реквизит1 = ...
    строка.Реквизит2 = ...
  12. AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    Немножко не в тему.
    А что это за конфа с медикаментами?

Поделиться этой страницей