[РЕШЕНО] Проверка уникальности значения в списке

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

  1. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Всем здравствуйте. Есть СписокЗначений - "СписокИменНастроек" и реквизит "НовоеИмяНастройки". Нужно при изменении реквизита НовоеИмяНастройки проверять, есть ли его значение в списке СписокИменНастроек. И всё бы работало, если бы не нужно было сохранять список при закрытии формы, а восстанавливать - при открытии. Для этого я пользуюсь методами ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр() соответственно. А потом видать, при заполнении списка, эти методы как-то незаметно для пользователя карёжат значения сохраняемого списка. Однако уже со второй попытки изменения реквизита НовоеИмяНастройки код отрабатывает как надо. Вот мой код, что не так, прошу помочь, пожалуйста:

    Код:
    Процедура ПриОткрытии()
        СписокИменНастроекВосстановить=ВосстановитьЗначение("СписокИменНастроекВСтроку");
        СписокИменНастроек=Новый СписокЗначений;
        Если ПустаяСтрока(СписокИменНастроекВосстановить)=ложь Тогда
            //Восстанавливаем из строки элементы списка
            СписокИменНастроекИзСтроки=ЗначениеИзСтрокиВнутр(СписокИменНастроекВосстановить);
            Для каждого н из СписокИменНастроекИзСтроки Цикл
                СписокИменНастроек.Добавить(н);
            КонецЦикла;
            СписокИменНастроек.СортироватьПоЗначению();
        КонецЕсли;
    КонецПроцедуры
    
    Процедура НовоеИмяНастройкиПриИзменении(Элемент)
        ИщемЗначение=СписокИменНастроек.НайтиПоЗначению(НовоеИмяНастройки);
        ПроверкаУникальности=истина;
        Если ИщемЗначение<>неопределено Тогда
            ПроверкаУникальности=ложь;
            Сообщить("повтор");
        КонецЕсли;
        Если ИщемЗначение=неопределено Тогда
            СписокИменНастроек.Добавить(НовоеИмяНастройки);
        КонецЕсли;
    КонецПроцедуры
    
    Процедура ПриЗакрытии()
        СписокИменНастроекВСтроку=ЗначениеВСтрокуВнутр(СписокИменНастроек);
        СохранитьЗначение("СписокИменНастроекВСтроку",СписокИменНастроекВСтроку);
    КонецПроцедуры
    Если не надо сохранять список, то процедура НовоеИмяНастройкиПриИзменении() сама по себе рабочая.
  2. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Всё. Разобрался. Достаточно простого метода СохранитьЗначение() - он также сохраняет список значений

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

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