8.х Запрет создания одинаковых строк в табличном поле? Как?

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

  1. TopicStarter Overlay
    Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    Есть табличное поле Сотрудники, как мне реализовать запрет выбор в него одинаковых сотрудников из справочника "сотрудники"??? То есть чтобы два раза неворзможно было внести с табличное поле сотрудника Иванов.В.В.... Спасибо.
  2. PrizrakR
    Offline

    PrizrakR

    Регистрация:
    11 окт 2006
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    в обработчике после выбора проверяешь на вхождение в уже существующий список
  3. GunN
    Offline

    GunN

    Регистрация:
    29 дек 2006
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Можно в модуле формы в обработчике события "ПередЗаписью" . В случае если есть дубли строк
    Код:
    Отказ = Истина;
    
  4. TopicStarter Overlay
    Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    Да это хорошая идея, но меня больше интресует алгоритм нахождения дублей строк в табличном поле...? Спасибо за помощь...


    Все уже разобрался. Вобщем в режиме конфигуратора кликнув на поле ввода колонки "Работник" табличного поля "Работники", для события ОбработкаВыбора написал следующую обработку:

    Код:
    Процедура РаботникиРаботникОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    Для каждого СтрТабличнойЧасти из Работники Цикл
    
    Если СтрТабличнойЧасти.Работник = ВыбранноеЗначение  Тогда
    
    СообщитьОбОшибке("Работник: " + ВыбранноеЗначение + " уже есть в списке! Дублирование записей запрещенно!!!");    
    ВыбранноеЗначение = "";
    КонецЕсли;
    
    КонецЦикла;
    КонецПроцедуры
    
    Только нужно наверное красивее обнулять выбранное начение поля "Работник" ...
  5. Cannon
    Offline

    Cannon

    Регистрация:
    10 фев 2007
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Вообще алгоритм с ПЕРЕБОРОМ строк - просто жуть. Есть же специальный метод "Найти". В приложении к приведенному примеру:

    Код:
    Если Работники.Найти(ВыбранноеЗначение,"Работник")<>Неопределено Тогда
    Предупреждение("В таблице уже имеется работник "+ВыбранноеЗначение+" !",,);
    СтандартнаяОбработка=Ложь;
    КонецЕсли;
    
    Обратите внимание на "СтандартнаяОбработка=Ложь;" - это значит, что система НЕ БУДЕТ выполнять стандартные действия по этому событию - в поле НЕ ПОПАДЕТ значение "ВыбранноеЗначение", поэтому и нет необходимости что-либо обнулять, как угодно красиво или не очень.
  6. Deosfen
    Offline

    Deosfen Опытный в 1С

    Регистрация:
    6 фев 2007
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Если посмотреть на типовые решения 1С то проверка делается перед проведением док-та, а не интерактивно, что оправдано.
  7. TopicStarter Overlay
    Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    Чем оправданно :)? просто в типовом решении в спецификации может быть 100000сторок а у меня (конфигурация никак не связанна с типовой) теоритически строк не может быть больше 50... а реально больше 7-10ти... и еще... есть один ньюанс который застявляет это делать только интерактивно...
  8. Deosfen
    Offline

    Deosfen Опытный в 1С

    Регистрация:
    6 фев 2007
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Я конечно не знаю про ваш нюанс. Но, в чем удобство проверять после: д-т запишется но не проведется, при записанном док-те проще отлавливать всякие не соответствия.
  9. GP_
    Offline

    GP_ Опытный в 1С

    Регистрация:
    15 авг 2006
    Сообщения:
    195
    Симпатии:
    0
    Баллы:
    26
    а я бы ещё и код элемента выводл в сообщение чтобы пользователь легко мог найти данныэ элемент справочника.

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