Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Выбор % или суммы при оповещении ввода значения          
Constantus Подменю пользователя
сообщение 07.01.19, 13:41
Сообщение #1

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

Приветствую, форумчане!
Самописная, 8.3, управляемые формы

Имеется вот такая процедура

&НаКлиенте
Процедура ПрименитьСкидкуМенеджераЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
    
    
    Оповещение = Новый ОписаниеОповещения( "ВведенаСуммаСкидкиМенеджераЗавершение", ЭтотОбъект, ДополнительныеПараметры);
    ПоказатьВводЧисла( Оповещение, 0, ДополнительныеПараметры.МассивДанныхАкций[0].ПредставлениеСкидки );
    
    РассчитатьИтоговыеЗначенияДокумента();
    
    
КонецПроцедуры


Никак не могу сообразить как лучше и правильно сделать, чтобы перед запуском оповещения задавался вопрос в каком формате будет введено число в процентах или числом, типа так:

Если Число Тогда

Оповещение = Новый ОписаниеОповещения( "ВведенаСуммаСкидкиМенеджераЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВводЧисла( Оповещение, 0, ДополнительныеПараметры.МассивДанныхАкций[0].ПредставлениеСкидки );
Иначе //(Процент)
Оповещение = Новый ОписаниеОповещения( "ВведенПроцентСкидкиМенеджераЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВводЧисла( Оповещение, 0, ДополнительныеПараметры.МассивДанныхАкций[0].ПредставлениеСкидки );
КонецЕсли;

Как дать понять, что сейчас будет вводиться процент или просто сумма??? Посоветуйте как бы Вы это сделали...


nik389 Подменю пользователя
сообщение 07.01.19, 13:46
Сообщение #2

Завсегдатай
****
Группа: Пользователи
Сообщений: 153
Из: Украина
Спасибо сказали: 37 раз
Рейтинг: 34

Constantus @ Сегодня, 13:41 * ,
Как вариант, я бы свою форму сделал, с чекбоксом (процент-сумма), и нет проблем..

Constantus Подменю пользователя
сообщение 07.01.19, 14:39
Сообщение #3

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

nik389 @ Сегодня, 16:46 * ,


Ну я сейчас так и пытаюсь сделать... Подскажите как это сделать в УФ. Нужно же открыть эту форму, выбрать нужное значение и потом выбранное значение передать в код для дальнейшей обработки...

ОткрытьФорму("Документ.Заказ.Форма.ФормаПС");

На форме есть строковый реквизит. "СписокВыбора": Процент(Процент), Сумма(Сумма)

Как теперь выбранное значение передать код?


&НаКлиенте
Процедура ПрименитьСкидкуМенеджераЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
    
    
ОткрытьФорму("Документ.Заказ.Форма.ФормаПС").ОткрытьМодально();

//??????????????????? как обработать выбранное значение из спискавыбора формы "ФормаПС"?

    Оповещение = Новый ОписаниеОповещения( "ВведенаСуммаСкидкиМенеджераЗавершение", ЭтотОбъект, ДополнительныеПараметры);
    ПоказатьВводЧисла( Оповещение, 0, ДополнительныеПараметры.МассивДанныхАкций[0].ПредставлениеСкидки );
    
    РассчитатьИтоговыеЗначенияДокумента();
    
    
КонецПроцедуры


Сообщение отредактировал Vofka - 08.01.19, 9:38

nik389 Подменю пользователя
сообщение 07.01.19, 16:27
Сообщение #4

Завсегдатай
****
Группа: Пользователи
Сообщений: 153
Из: Украина
Спасибо сказали: 37 раз
Рейтинг: 34

Constantus @ Сегодня, 14:39 * ,
ну да, нужно открыть форму, например так, делал хитрый выбор периода:
ПараметрыПодбора = Новый Структура("ЗакрыватьПриВыборе, ПериодЗагрузки", Истина,ПериодЗагрузки);
    ОткрытьФорму("ОбщаяФорма.ВыборКвартала", ПараметрыПодбора, Элементы.ПериодЗагрузки);


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


при закрытии формы, передаем реквизит
&НаКлиенте
Процедура КомандаОК(Команда)
    ВыбКв = ДатьКвартал();
    ОповеститьОВыборе(ВыбКв);
КонецПроцедуры

т.е. у нас период загрузки Элементы.ПериодЗагрузки получает значение ВыбКв

TrasserZero Подменю пользователя
сообщение 07.01.19, 22:28
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 38
Спасибо сказали: 3 раз
Рейтинг: 0

Я бы влепил обязательный к заполнению реквизит число и на форме указал вид - переключатель (такой типа двух радиобаттонов). Два положения - или процент или сумма - и никаких сложных бубнов. Не надо еще одну форму и нет модальности..


Signature

Constantus Подменю пользователя
сообщение 08.01.19, 14:05
Сообщение #6

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

Перепробовал много методов, но самое страшное, что вместе с кодом при вызове формы выбора срабатывает код:


 Оповещение = Новый ОписаниеОповещения( "ВведенаСуммаСкидкиМенеджераЗавершение", ЭтотОбъект, ДополнительныеПараметры);
    ПоказатьВводЧисла( Оповещение, 0, ДополнительныеПараметры.МассивДанныхАкций[0].ПредставлениеСкидки );


Хотя по планам должен быть сработан после обработки предыдущего выбора...


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


    //Оповещение = Новый ОписаниеОповещения("ВведенПроцентСкидкиМенеджераЗавершение", ЭтотОбъект, ДополнительныеПараметры); //Ввод Процента
    Оповещение = Новый ОписаниеОповещения("ВведенаСуммаСкидкиМенеджераЗавершение", ЭтотОбъект, ДополнительныеПараметры);
    ПоказатьВводЧисла( Оповещение, 0, ДополнительныеПараметры.МассивДанныхАкций[0].ПредставлениеСкидки );

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

// Выбор Типа скидки Процент/Сумма
&НаКлиенте
Процедура ПослеВводаЗначения(ВыбЗнач, Параметры) Экспорт
    Если ВыбЗнач<>Неопределено Тогда
        // обработка введенного значения
        ВыборТипаСкидки = ВыбЗнач;
    КонецЕсли;
КонецПроцедуры



ВыборТипаСкидки - сделал глобальной переменной в модуле формы...

Пробовал через

ПоказатьВводЗначения(Оповещение, ВЗ, "Выбор типа скидки: Сумма/Процент", ОписаниеТипов); // один из вариантов


Тоже не блокирует срабатывание вызова нового оповещения с вводом числа...

Вообщем совсем зарыл себя... Может есть метод ПоказатьВводЗначения, который открывает окно с выбором 2-х значений (выпадающий список), потом получает это значение и далее в зависимости от выбранного значения определяет срабатывание одного из кодов?



Применил

Массив = Новый Массив;
Массив.Добавить(Тип("ПеречислениеСсылка.ВидМодели"));

ОписаниеТипов = Новый ОписаниеТипов(Массив);
Если ВвестиЗначение(ВЗ, "Введите значение", ОписаниеТипов) Тогда
    // обработка введенного значения
    //Сообщить("Введенное значение: "+ВЗ);
КонецЕсли;


1. А как можно в этом случае вместо ссылки на Перечисления, указать конкретные текстовые значения "Сумма" и "Процент", чтобы выходило в массиве выбор этих значений? //Не хочется добавлять еще одно перечисление...

2. Будет ли такая конструкция работать в тонком клиенте?

Сообщение отредактировал Vofka - 08.01.19, 14:34

Constantus Подменю пользователя
сообщение 08.01.19, 15:10
Сообщение #7

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

Применил такое изобретение:

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


Вроде работает, но это модальный метод. Хоть у меня в конфигурате и разрешено применение модального режима, но как-то болезнено это воспринимаю. В хелпах нашел такой метод для НеМодального выбора:



&НаКлиенте
Процедура КакСделатьНемодальныйВыборЗначения(Команда)

    Цвета = Новый СписокЗначений;
    Цвета.Добавить("Красный");
    Цвета.Добавить("Зелёный");
    Цвета.Добавить("Синий");

    // процедура ПослеВыбораЭлемента определена чуть ниже
    ОповещениеПослеВыбораЭлемента = Новый ОписаниеОповещения(
        "ПослеВыбораЭлемента", ЭтотОбъект
    );

    Цвета.ПоказатьВыборЭлемента(
        ОповещениеПослеВыбораЭлемента,
        "Выберите любимый цвет"
    );

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

&НаКлиенте
Процедура ПослеВыбораЭлемента(Элемент, Параметры) Экспорт

    Если Элемент <> Неопределено Тогда
        Сообщить(Элемент.Значение);
    КонецЕсли;

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


Но как тогда сделать проверку на выбранное значение из "ПослеВыбораЭлемента(Элемент, Параметры)" в основном модуле выбора?

daveal Подменю пользователя
сообщение 09.01.19, 19:31
Сообщение #8

Говорящий
***
Группа: Пользователи
Сообщений: 70
Из: Киев
Спасибо сказали: 25 раз
Рейтинг: 0

Вы можете сколько угодно формировать цепочки вызовов, т.е. в данном случае в "ПослеВыбораЭлемента" вызывайте ввод числа со своим оповещением в зависимости от выбранного элемента. Если нужно пробросить какие-то данные пишите в доп параметры или пробросьте дальше доп параметры - по сути и результат выбора, число или процент, можно в доп. параметры пробросить и обойтись одним методом.


У меня так из последнего перенос даты выполнения задачи:
1. Сначала вопрос перенос это или отмена - оповещение
2. При переносе запрос даты - оповещение
3. Если дата раньше другой ключевой даты еще вопрос, а уверены ли Вы, что именно так - оповещение. Здесь в случае прохождения контроля или дальше при подтверждении просто вызывается один метод с фиксацией даты.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 18:47
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!