Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Событие отмены в списке значений
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Gigi
Всем привет!
Гууу ... Не на что уже нет настроения... Просто нет ... все ПУСТО ВОКРУГ.
Ладно пардон ... не обращайте внимание ...
Вот код простого типа:
спЗначений = Новый СписокЗначений();
спЗначений.Добавить("Значение1","Представление1");
спЗначений.Добавить("Значение2","Представление2");
ВыбранныйЭлементСписка = спЗначений .ВыбратьЭлемент();
Если ВыбранныйЭлементСписка = Неопределено Тогда  Возврат; КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Цитата(Gigi @ 12.07.19, 13:58) необходимо зарегистрироваться для просмотра ссылки
Тогда так

Ща попробую

ed.kharkov @ Сегодня, 13:57 необходимо зарегистрироваться для просмотра ссылки ,
Вот теперь нормально.... так как надо!
Ладно ... вопрос решен!
Огромное спасибо!
Пока!
ed.kharkov
Цитата(Gigi @ 12.07.19, 13:59) необходимо зарегистрироваться для просмотра ссылки
Не совсем так, а по другому. При нажатии кнопку отменить выполнение кода не останавливается и всплывает второй список значений.
И только с нажатием на отмену во втором списке выполнение кода прерывается.



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

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

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

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

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