Имя: Пароль:
1C
 
Как правильно открыть вторую форму, рассчитав там данные и вбить в первую форму?
0 s1219257
 
27.11.17
21:18
Есть справочник (1 форма), пользователь выбирает 2 значения, материал и профиль, дальше эти данные передаются во 2 форму (общая форма)

Код первой формы

&НаКлиенте
Процедура РасчитатьВес(Команда)
    Пар = Новый Структура ("Параметр1, Параметр2", Объект.Профиль, Объект.Материал);
    ОткрытьФорму("ОбщаяФорма.Форма", Пар);
    КонецПроцедуры




Вторая форма



&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        Профиль = Параметры.Параметр1;
        Материал = Параметры.Параметр2;
      КонецПроцедуры


&НаКлиенте
Процедура ПрофильПриИзменении()
        РасчетВеса();
КонецПроцедуры

&НаКлиенте
Процедура МатериалПриИзменении()
    РасчетВеса();
КонецПроцедуры



&НаКлиенте
Процедура ДлинаПриИзменении(Элемент)
    РасчетВеса();
КонецПроцедуры

&НаКлиенте
Процедура ШиринаПриИзменении(Элемент)
    РасчетВеса();
КонецПроцедуры



&НаКлиенте
Процедура ВысотаПриИзменении(Элемент)
    РасчетВеса();
КонецПроцедуры


&НаКлиенте
Процедура ДиаметрПриИзменении(Элемент)
    РасчетВеса();
КонецПроцедуры



&НаКлиенте
Процедура РасчетВеса()

Плотность = ПолучитьПлотность(Материал);
Сообщить(Вес);

    




//        a = длина
//        D = диаметр    
//        b = ширина
//        h = высота    
//        l = длина    


Если (Профиль = "Балка Двутавровая")  Тогда
        Сообщить("Введите только длину");
        //Высота = "";
        //Диаметр = "";
        Вес = Плотность/8.650 * Длина;
        
        ИначеЕсли (профиль = "Квадрат") Тогда
        Сообщить ("Введите только длину и ширину");
        Вес = Длина * Длина * Диаметр;
        
        ИначеЕсли (профиль = "Круг") Тогда
        Сообщить ("Введите только длину и диаметр");
        //Ширина = "";
        //Высота = "";
        Вес = 3.14/4 * Диаметр * Диаметр * Длина * Плотность;
        
        ИначеЕсли (профиль = "Полоса, лист") Тогда
        Сообщить ("Введите только ширину, длину и высоту");;
        //Диаметр = "";
        Вес = Длина * Ширина * Высота* Плотность;
        
        ИначеЕсли (профиль = "Уголок") Тогда
        Сообщить ("Введите только длину, ширину и высоту");
        //Ширина = "";
        //Высота = "";
        Вес = (Длина + Ширина - Высота) * Высота * Длина * Плотность;
        
        ИначеЕсли (профиль = "Труба") Тогда
        Сообщить ("Введите только длину, высоту и диаметр");
        //Высота = "";
        //Диаметр = "";
        Вес = 3.14 * (Диаметр - Высота) * Высота * Длина * Плотность;
                          
        ИначеЕсли (профиль = "Швеллер") Тогда
        Сообщить ("Введите только длину");
        //Ширина = "";
        Вес = Плотность/7.850 * Длина;
        
        ИначеЕсли (профиль = "Шестигранник") Тогда
        Сообщить ("Введите только длину, высоту и диаметр");
        //Высота = "";
        //Диаметр = "";
        Вес = 0.866 * Диаметр * Диаметр * Длина * Плотность;

        
        
КонецЕсли;




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

&НаСервере
Функция ПолучитьПлотность(Профиль)
    Возврат Профиль.Плотность;
КонецФункции





Но, есть пару проблем, почему-то не просчитываются поля Ширина и Длина и наконец, как после этого передать поле Вес в первую форму, где есть поле ВесФормы?
1 nordbox
 
27.11.17
21:22
Ну вместо процедуры сделай Функцию которая рассчитывает и возвращает
Функция РасчитатьВес(Команда)
    Пар = Новый Структура ("Параметр1, Параметр2", Объект.Профиль, Объект.Материал);
Возврат Пар;
    КонецФнкции
2 nordbox
 
27.11.17
21:23
Тока вот непонятно из твоего кода где тут расчет
Процедура РасчитатьВес(Команда)
    Пар = Новый Структура ("Параметр1, Параметр2", Объект.Профиль, Объект.Материал);
    ОткрытьФорму("ОбщаяФорма.Форма", Пар);
    КонецПроцедуры
3 Tateossian
 
27.11.17
21:27
Оу, MRP на 1С?

Не понятно, куда там чего вводить нужно. В поля ввода чтоль? Сделай визардом, там будет лучше (пошаговый заполняльщик) с глобальной функцией ПоказатьВводЧисла.

При открытии передавай владельца/уид вызвавшей формы (ты опустил этот параметр), чтобы потом из целевой или по владельцу обратиться или методом Оповестить, тогда тебе уид лучше, чтобы одним из параметров передать его, чтобы форма-получатель идентифицировала оповещение
4 Borteg
 
27.11.17
21:33
(0) см параметры открытьформу, там есть оповещение после закрытия
5 Tateossian
 
27.11.17
21:36
(4) Параметр закрытия формы, открытой в модальном режиме. Не всегда это можно юзать. А еще точнее - никогда.
6 FIXXXL
 
28.11.17
08:38
(5) какое модальное?

<ОписаниеОповещенияОЗакрытии> (необязательный)

Тип: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана при закрытии формы со следующими параметрами:
<РезультатЗакрытия> - значение, переданное при вызове метода Закрыть открываемой формы,
<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения.
Если параметр не указан, то по завершению никакая процедура вызвана не будет.
Используется только в управляемом приложении.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн