Версия для печати темы (https://pro1c.org.ua/index.php?s=a296f8eaf94d6f7384551ae8f99564fc&showtopic=52993)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Событие отмены в списке значений

Автор: Gigi 12.07.19, 10:11

Всем привет!
Гууу ... Не на что уже нет настроения... Просто нет ... все ПУСТО ВОКРУГ.
Ладно пардон ... не обращайте внимание ...
Вот код простого типа:

спЗначений = Новый СписокЗначений();
спЗначений.Добавить("Значение1","Представление1");
спЗначений.Добавить("Значение2","Представление2");
ВыбранныйЭлементСписка = спЗначений .ВыбратьЭлемент();
Если ВыбранныйЭлементСписка = Неопределено Тогда  Возврат; КонецЕсли;

Но это когда без флажков. Т.е. когда нужно сделать один единственный выбор.
Теперь код для множественного выбора в списке.
//==========================    
    ствПеречень=Новый Соответствие();
    ствПеречень.Вставить("Значение1","Представление1");
    ствПеречень.Вставить("Значение2","Представление2");
    ствПеречень.Вставить("Значение3","Представление3");
    ствПеречень.Вставить("Значение4","Представление4");
//-----------------------------------------------    
    ствВыбрНеВыбрЗначения=Новый Соответствие();
    спЗначений = Новый СписокЗначений();
    Для Каждого Эл Из ствПеречень Цикл
        спЗначений.Добавить(Эл.Ключ,Эл.Значение);
    КонецЦикла;
    спЗначений.ЗаполнитьПометки(Истина);  
//-----------------------------------------------
    Если спЗначений.ОтметитьЭлементы("Выводить") Тогда
        Для Каждого знВыбор Из спЗначений Цикл
            Если знВыбор.Пометка Тогда
                ствВыбрНеВыбрЗначения.Вставить(знВыбор.Значение,Истина);
            Иначе
                ствВыбрНеВыбрЗначения.Вставить(знВыбор.Значение,Ложь);
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
//==========================    
Если Вопрос("Создать отчет данных энергосистемы в формате Excel?",РежимДиалогаВопрос.ДаНет,,,"Отчет в формате Эксель")=КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли;

Короче что надо ... опять очередная ерунда. .. с которой уже сижу час и опять ищу методом тыка.
Во втором варианте кода нужно зафиксировать событие когда пользователь нажал на кнопку отменить.
В первом простом варианте это как указано делается таким путем:
Если ВыбранныйЭлементСписка = Неопределено Тогда  Возврат; КонецЕсли;

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

в любом случае всплывает. Даже в случае если пользователь в окне списка значений нажал на кнопку отменить.
А нужно что бы действие переходило на следующую линию кода только тогда когда нажали на кнопку "Ок". А когда нажали на "Отменить" нужно что бы действие останавливалось.
Вот что нужно...
И вот эта вот ерунда. С которой уже сижу час.
Так что если можно строчу кода в помощь.
Буду признателен!

Gigi @ Сегодня, 10:31 * ,
Вы куда все подевались уважаемые? ))
Гууу... я вроде просил строчку кода. Всего одну строчку ..
Не думаю что больше нужно будет. Хотя от этой системы всего можно ожидать. Потому что в ней наверно "сложное всегда просто", как и все гениальное )).. а не наоборот.
Короче вопрос открыт..
Жду вашего отклика!
И буду признателен!


Автор: ed.kharkov 12.07.19, 11:43

А если попробовать так?

//-----------------------------------------------
    Если спЗначений.ОтметитьЭлементы("Выводить") Тогда
        Для Каждого знВыбор Из спЗначений Цикл
            Если знВыбор.Пометка Тогда
                ствВыбрНеВыбрЗначения.Вставить(знВыбор.Значение,Истина);
            Иначе
                ствВыбрНеВыбрЗначения.Вставить(знВыбор.Значение,Ложь);
            КонецЕсли;
        КонецЦикла;

        Если Вопрос("Создать отчет данных энергосистемы в формате Excel?",РежимДиалогаВопрос.ДаНет,,,"Отчет в формате Эксель")=КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли;
    КонецЕсли;
//==========================

Автор: Gigi 12.07.19, 12:27

ed.kharkov @ Сегодня, 12:43 * ,
Да можно и так но это если список значений один. А если их на пример два?
Т.е. что бы запустить процедуру до этого нужно отметить галки в двух списках всплывающих один за другим.
и в таком случае получиться так

    Если спЗначений.ОтметитьЭлементы("Выводить") Тогда
        Для Каждого знВыбор Из спЗначений Цикл
            Если знВыбор.Пометка Тогда
                ствВыбрНеВыбрЗначения.Вставить(знВыбор.Значение,Истина);
            Иначе
                ствВыбрНеВыбрЗначения.Вставить(знВыбор.Значение,Ложь);
            КонецЕсли;
        КонецЦикла;
    Если Вопрос("Создать отчет данных энергосистемы в формате Excel?",РежимДиалогаВопрос.ДаНет,,,"Отчет в формате Эксель")=КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли;
    КонецЕсли;

    ствГоды=Новый Соответствие();
    ствГодыВсе=МесяцГодДата_серв.ОтчетныеГоды_ств();
    спЗначенийГодыВсе = Новый СписокЗначений();
    //---------------------------
    Для Каждого Эл Из ствГодыВсе Цикл
        спЗначенийГодыВсе.Добавить(Эл.Ключ,Строка(Эл.Ключ));
    КонецЦикла;
    спЗначенийГодыВсе.ЗаполнитьПометки(Истина);  
    //---------------------------
    Если спЗначенийГодыВсе.ОтметитьЭлементы("Выводить") Тогда
        Для Каждого знГодыВыбор Из спЗначенийГодыВсе Цикл
            Если знГодыВыбор.Пометка Тогда
                ствГоды.Вставить(знГодыВыбор.Значение,Истина);
            КонецЕсли;
        КонецЦикла;
         Если Вопрос("Создать отчет данных энергосистемы в формате Excel?",РежимДиалогаВопрос.ДаНет,,,"Отчет в формате Эксель")=КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли;
    КонецЕсли;

И в таком случае нужно будет два раза жать да или нет.
А в таком случае проще было бы если можно было бы перехватить нажатие на кнопку "отмена" и остановить процедуру при нажатии. А в случае "Ок" в конце задать вопрос да или нет.
Так было бы лучше. Но ладно если так как хотел нельзя то хрен с ним. Хоть так.
Но если можно то опять буду признателен!

Автор: ed.kharkov 12.07.19, 12:57

Тогда так

Если спЗначений.ОтметитьЭлементы("Выводить") Тогда
        Для Каждого знВыбор Из спЗначений Цикл
            Если знВыбор.Пометка Тогда
                ствВыбрНеВыбрЗначения.Вставить(знВыбор.Значение,Истина);
            Иначе
                ствВыбрНеВыбрЗначения.Вставить(знВыбор.Значение,Ложь);
            КонецЕсли;
        КонецЦикла;
    Иначе
        Возврат;
    КонецЕсли;

    ствГоды=Новый Соответствие();
    ствГодыВсе=МесяцГодДата_серв.ОтчетныеГоды_ств();
    спЗначенийГодыВсе = Новый СписокЗначений();
    //---------------------------
    Для Каждого Эл Из ствГодыВсе Цикл
        спЗначенийГодыВсе.Добавить(Эл.Ключ,Строка(Эл.Ключ));
    КонецЦикла;
    спЗначенийГодыВсе.ЗаполнитьПометки(Истина);  
    //---------------------------
    Если спЗначенийГодыВсе.ОтметитьЭлементы("Выводить") Тогда
        Для Каждого знГодыВыбор Из спЗначенийГодыВсе Цикл
            Если знГодыВыбор.Пометка Тогда
                ствГоды.Вставить(знГодыВыбор.Значение,Истина);
            КонецЕсли;
        КонецЦикла;
    Иначе
        Возврат;        
    КонецЕсли;

    Если Вопрос("Создать отчет данных энергосистемы в формате Excel?",РежимДиалогаВопрос.ДаНет,,,"Отчет в формате Эксель")=КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли;

Автор: Gigi 12.07.19, 13:03

Gigi @ Сегодня, 13:27 * ,
Стоп ...

Цитата(Gigi @ 12.07.19, 13:27) *
И в таком случае нужно будет два раза жать да или нет.

Не совсем так, а по другому. При нажатии кнопку отменить выполнение кода не останавливается и всплывает второй список значений.
И только с нажатием на отмену во втором списке выполнение кода прерывается.
Так что, все нормально кроме того что отмена в пером списке не срабатывает.
Ладно итак згодится.
Но если кто докорректирует и устранит недостаток буду признателен!


Цитата(Gigi @ 12.07.19, 13:58) *
Тогда так

Ща попробую

ed.kharkov @ Сегодня, 13:57 * ,
Вот теперь нормально.... так как надо!
Ладно ... вопрос решен!
Огромное спасибо!
Пока!

Автор: ed.kharkov 12.07.19, 13:04

Цитата(Gigi @ 12.07.19, 13:59) *
Не совсем так, а по другому. При нажатии кнопку отменить выполнение кода не останавливается и всплывает второй список значений.
И только с нажатием на отмену во втором списке выполнение кода прерывается.



Ну тогда вот так))

Если спЗначений.ОтметитьЭлементы("Выводить") Тогда
        Для Каждого знВыбор Из спЗначений Цикл
            Если знВыбор.Пометка Тогда
                ствВыбрНеВыбрЗначения.Вставить(знВыбор.Значение,Истина);
            Иначе
                ствВыбрНеВыбрЗначения.Вставить(знВыбор.Значение,Ложь);
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;

    ствГоды=Новый Соответствие();
    ствГодыВсе=МесяцГодДата_серв.ОтчетныеГоды_ств();
    спЗначенийГодыВсе = Новый СписокЗначений();
    //---------------------------
    Для Каждого Эл Из ствГодыВсе Цикл
        спЗначенийГодыВсе.Добавить(Эл.Ключ,Строка(Эл.Ключ));
    КонецЦикла;
    спЗначенийГодыВсе.ЗаполнитьПометки(Истина);  
    //---------------------------
    Если спЗначенийГодыВсе.ОтметитьЭлементы("Выводить") Тогда
        Для Каждого знГодыВыбор Из спЗначенийГодыВсе Цикл
            Если знГодыВыбор.Пометка Тогда
                ствГоды.Вставить(знГодыВыбор.Значение,Истина);
            КонецЕсли;
        КонецЦикла;
    Иначе
        Возврат;        
    КонецЕсли;

    Если Вопрос("Создать отчет данных энергосистемы в формате Excel?",РежимДиалогаВопрос.ДаНет,,,"Отчет в формате Эксель")=КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли;

Автор: Gigi 12.07.19, 13:05

Цитата(ed.kharkov @ 12.07.19, 14:04) *
Ну тогда вот так))

Да понял понял ... Спасибо )))
Ладно уважаемые... спасибо!
Век вас не забуду!!!!! ))))
Пока!

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua