7.7 Проверка уникальности элемента справочника по наименованию

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Steel Rain, 20 мар 2010.

  1. TopicStarter Overlay
    Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Всем доброго времени суток.

    Напал очередной затуп.... Есть справочник СерийныеНомера подчиненный справочнику Номенклатура. Нужно при записи нового элемента или уже существующего проверить нет ли такого серийника в справочнике. Серийник заноситься в реквизит Наименование. Редактирование происходит в форме списка справочника. В модуле формы написал процедуру:
    Код:
    Процедура ПриЗаписи()
    Спр = СоздатьОбъект("Справочник.СерийныеНомера");
    Спр.ИспользоватьВладельца(ТекущийЭлемент().Владелец);
    Спр.ВыбратьЭлементы();
    Если Спр.НайтиПоНаименованию(Наименование, 1, 1) = 1 Тогда
    Предупреждение("Данный инвентаризационный номер уже присутствует в справочнике.");
    СтатусВозврата(0);
    Возврат;
    КонецЕсли;
    КонецПроцедуры
    
    
    Все равно позволяет записать новый элемент с наименованием как у существующего. ЧЯДНТ?
  2. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    А не проще контролируемый серийный номер в код запихнуть и воспользоваться стандартным контролем уникальности в пределах подчинения?
  3. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Будет искать внутри указанного подчинения.
    Если СН есль у другого элемента номенклатуры - не найдет (надо владельца не указывать явно)
    Код:
    Процедура ПриЗаписи()
    Если ТекущийЭлемент().Владелец.Выбран()=0 Тогда
    Предупреждение("Не указан владелец!");
    СтатусВозврата(0);
    Возврат;
    КонецЕсли;
    
    Спр = СоздатьОбъект("Справочник.СерийныеНомера");
    Спр.ИспользоватьВладельца(ТекущийЭлемент().Владелец);
    Спр.ВыбратьЭлементы(1);
    Пока Спр.ПолучитьЭлемент()=1 Цикл
    Если Спр.ТекущийЭлемент()=ТекущийЭлемент() Тогда //это наш родной элемент
    Продолжить;
    КонецЕсли;
    Если  СокрЛП(Спр.Наименование) = СокрЛП(Наименование) Тогда
    Предупреждение("Данный инвентаризационный номер уже присутствует в справочнике.");
    СтатусВозврата(0);
    Возврат;
    КонецЕсли;
    КонецПроцедуры
    
    
    
  4. TopicStarter Overlay
    Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    В принципе так и надо. У разных элементов, теоретически, могут быть одинаковые номера. Главное что бы в пределах подчинения не было одинаковых. Т.е., я так понял через НайтиПоНаименованию не будет работать, надо перебирать элементы?
  5. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Нет гарантии что нет 2 одинаковых наименования... Метод найти покажет только первый и он м.б. текущим, а если есть еще?
  6. TopicStarter Overlay
    Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Вообще вариант...
  7. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Так ему нужно, если хотя бы один есть - то отказываться от записи.
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Да тогда 2 и более варианта при вклченной уникальности не смогут быть

    ... он будет всегда (если не учитывать что он текущий)
  9. TopicStarter Overlay
    Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Видимо действительно лучше через код сделать. При заведении нового элемента ругается что владелец не выбран. Хотя как то не понятно, создается новый элемент подчиненного справочника и у него до записи владельца нет получается?

    Да, эти грабли уже были :) Пробовал в процедуре ПриНачалеРедактированияСтроки код запоминать и по нему проверять текущий элемент или нет, но для новых не работает.
  10. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Бухгалтерский угодник написал как обойти:
    Код:
    Если Спр.ТекущийЭлемент()=ТекущийЭлемент() Тогда //это наш родной элемент
    Продолжить;
    КонецЕсли;
    
  11. TopicStarter Overlay
    Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Сделал через код, все работает. Огромное спасибо.

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