8.х Проверка значения табличной части на уникальность

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

  1. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.757
    Симпатии:
    147
    Баллы:
    104
    Здравствуйте.

    Есть табличная часть. У неё есть колонка "Основное средство" это ссылка на одноимённый справочник.

    Сделал проверку на дубли в табличной части:
    Код:
    //Обработчики событий табличной части ОС
    Процедура ОсновныеСредстваОсновноеСредствоОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
       
        МассивСтрок=ЭтотОбъект.ОсновныеСредства.НайтиСтроки(Новый Структура("ОсновноеСредство",ВыбранноеЗначение));
        Если МассивСтрок.Количество()> 0 Тогда
            Сообщить("Объект ("+ВыбранноеЗначение+") уже подобран в табличную часть в строке "+МассивСтрок[0].НомерСтроки+". Нельзя один объект сопоставить с двумя идентификаторами.");
            ВыбранноеЗначение = Неопределено;
        КонецЕсли;
       
    КонецПроцедуры
    
    Но вот беда. Когда я выбираю элемент который уже выбран в ячейку повторно он у меня ячейку очищает и выдаёт сообщение. Как бы сделать что бы при случайном повторном выборе того же элемента в ячейке сообщение не отрабатывало.
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    СтандартнаяОбработка = Ложь пробовал добавлять вместе с очищением? Так понимаю, необходимо запоминать текущее значение, если оно не пустое.
  3. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.757
    Симпатии:
    147
    Баллы:
    104
    Да нет запоминать не нужно. Наверное просто очищу. Что то сразу не подумал... голова уже не варит :)
  4. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.757
    Симпатии:
    147
    Баллы:
    104
    Подниму тему.

    А как кошерно очистить ячейку перед обработкой выбора?
    Что то втупливаю.
    В обработчике выбора это можно сделать? Или это надо в другом обработчике делать?
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Кошерно не получится, т.к. пользователь может отказаться от выбора нового значения.
  6. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Тод а процедура точно подходящая выбрана?

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

    По хорошему - конечно нужна возможность проводить документ даже с одинаковыми строками.
    --- Объединение сообщений, 27 авг 2015 ---
    Ну как вариант что-то вроде:
    Код:
    //Обработчики событий табличной части ОС
    Процедура ОсновныеСредстваОсновноеСредствоОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
      
    ЕстьДублиСтрок = Ложь;
    
        МассивСтрок=ЭтотОбъект.ОсновныеСредства.НайтиСтроки(Новый Структура("ОсновноеСредство",ВыбранноеЗначение));
    
    Если МассивСтрок.Количество()> 1
    ИЛИ (МассивСтрок.Количество() = 1 И ЭлементыФормы.ОсновныеСредства.ТекущиеДанные <> МассивСтрок[0]) Тогда
    ЕстьДублиСтрок = Истина;
    КонецЕсли;
    
    Если ЕстьДублиСтрок Тогда
            Сообщить("Объект ("+ВыбранноеЗначение+") уже подобран в табличную часть в строке "+МассивСтрок[0].НомерСтроки+". Нельзя один объект сопоставить с двумя идентификаторами.");
            ВыбранноеЗначение = Неопределено;
    КонецЕсли;
     
    КонецПроцедуры
    (не проверял)

    Upd: Только посмотри там ТекущиеДанные или ТекущаяСтрока
    Последнее редактирование: 27 авг 2015
    TODD22 нравится это.
  7. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.757
    Симпатии:
    147
    Баллы:
    104
    Это не документ. Это обработка. В ней есть табличная часть которая заполняется данными с сервера по контролю за транспортом по средствам http запроса.
    Там содержится список доступных объектов.
    Смысл такой юзер жмёт кнопку и табличная часть заполняется списком основных средств. Далее он вручную сопоставляет идентификатор основного средства на сервере с конкретным элементом справочника ОС.
    Ну и затем id с сервера записывается в доп реквизит ОС.

    Один ИД может соответствовать только одному ОС. Вот я и сделал проверку в табличной части что бы не было возможности подобрать ОС которое уже подобрано в табличную часть.
    Но если у меня элемент выбран. И нажать повторный выбор то выскакивает сообщение от проверки. Что как бы не очень красиво.
    С другой стороны можно на это дело забить, эта обработка всего лишь демонстрация набора функций по работе с сервером по http. А не законченное рабочее решение. Она просто на сайте будет выложена как демонстрация.
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Так проверяй текущую строку на заполненность ОС перед проверкой на уникальность.
    Если ОС заполнено, значит оно - уникально в списке. Копирование строки либо вообще запретить, либо обнулять ОС.
  9. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ну чтобы совсем красиво было, можно было бы выводить список выбора ОС с отбором, откуда исключены уже выбранные на текущий момент элементы справочника ОС.
    Но если демонстрация - то такой необходимости нет.
  10. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.757
    Симпатии:
    147
    Баллы:
    104
    Вадим смотри выбрал он "Трактор №1". Затем опять нажал и понял что затупил и выбрал опять "Трактор №1" тогда срабатывает проверка и выводит сообщение. А по идеи не должно. Элемент то не изменился.
  11. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Жестокий ты человек, копировать нельзя. Обнулять.
    Надо более user friendly интерфейс строить.. :)
  12. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Проверяй на равенство текущего значения и выбранного. Если не равно - проверяй уникальность, ну или проверяй уникальность и смотри при этом на номер строки, если равно, значит юзер выбрал то же ОС, либо отказался от выбора и оставил как было.
  13. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.757
    Симпатии:
    147
    Баллы:
    104
    Да демонстрация набора функций сервера контроля. А то программисты которые их услугами пользуются не шарят как это делать.
    Я правда и сам не шарил :) Взялся только что бы научиться с http сервисами работать. До этого только с web сервисами один раз дело имел.
  14. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Это не мои требования к соблюдению уникальности списка :)
  15. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.757
    Симпатии:
    147
    Баллы:
    104
    Ну так если один идентификатор это одно основное средство :)
    А то юзер запарит и выберет то средство которое уже есть в списке. Я просто посмотрел какие там ОС.
    Там 600+ ОС. из них например 30 "Трактор беларусь" у них только гос номер и гаражный номер на одну цифру отличается. Можно и затупить нечайно :)
  16. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Я как-то с сериями номеров ОС имел счастье поработать, причем там серии были еще и криво забиты :)
  17. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.757
    Симпатии:
    147
    Баллы:
    104
    Ну вот я и не стал парится по этому поводу. Все запросы к серверу нужно выполнять по идентификатору. Пусть юзер ручками сопоставит. И запишет в доп реквизит. А потом уже по этому идентификатору пусть и работает с сервисом.

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