8.х Контроль уникальности имени справочника при записи

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

  1. TopicStarter Overlay
    Inkeeper
    Offline

    Inkeeper Опытный в 1С

    Регистрация:
    22 мар 2009
    Сообщения:
    327
    Симпатии:
    0
    Баллы:
    26
    Подскажите пожалуйста, нужно проверять при создании нового элемента справочника "НомераТелефонов" уникальность имени, т.е. чтобы выдавалось предупреждение "Такой номер уже есть!"(номер-имя элемента спр.) и если имя совпадает, то записи не происходит даже после нажатия ОК?
    Вот мой код:
    Код:
    Процедура ПриЗаписи(Отказ)
    Номер = Справочники.НомераТелефонов.?????;-!!!!!!!!!!!!!!!
    Если Номер = Справочники.НомераТелефонов.НайтиПоНаименованию("Наименование")
    Тогда
    Сообщить ("Такой номер уже есть!");
    Отказ = истина;
    Возврат;
    КонецЕсли;
    
    КонецПроцедуры
    
    
    меня смущает 2 строка, т.е. как правильно обратиться к текущему имени элемента справочника?

    + ещё вопрос: этот спр. используется при заполнении документа, можно ли сделать так, чтобы изменять(добавлять) элементы справочника напрямую из документа?
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Код:
    Процедура ПриЗаписи(Отказ)
    Номер = Справочники.НомераТелефонов.НайтиПоНаименованию("Наименование") 
    Если ЗначениеЗаполнено(Номер)
    Тогда
    Сообщить ("Такой номер уже есть!");
    Отказ = истина;
    Возврат;
    КонецЕсли;
    
    КонецПроцедуры
    
    
    
    Элементы справочника можно добавлять из документа - по умолчанию
  3. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    и я бы номера в КОД справочника перенес, т.к. нужно учитывать уникальность номера и это можно сделать штатными средствами, не добавляя специальную проверку
  4. TopicStarter Overlay
    Inkeeper
    Offline

    Inkeeper Опытный в 1С

    Регистрация:
    22 мар 2009
    Сообщения:
    327
    Симпатии:
    0
    Баллы:
    26
    спасибо, но Ваш код не совсем правильный, он будет выдавать предупреждение, если реквизит не заполнен.
  5. Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Код:
    Процедура ПриЗаписи(Отказ)
    Если ЭтоНовый() Тогда
    Номер = ЭтотОбъект.Наименование;
    Если Не Справочники.НомераТелефонов.НайтиПоНаименованию(Номер) = Справочники.НомераТелефонов.ПустаяСсылка() Тогда
    Сообщить ("Такой номер уже есть!");
    Отказ = истина;
    Возврат;
    КонецЕсли;
    КонецЕсли;
    
    КонецПроцедуры
    
    
    
    Как-то так.
  6. TopicStarter Overlay
    Inkeeper
    Offline

    Inkeeper Опытный в 1С

    Регистрация:
    22 мар 2009
    Сообщения:
    327
    Симпатии:
    0
    Баллы:
    26
    К сожалению, не пошло
  7. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Конкретизируйте.
    Имейте ввиду, что " 123" и "123 " -> это будут разные наименования.
  8. Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Давайте смотреть, почему:
    Во-первых, я контролировал только запись нового справочника: данный код не предназначен для контроля изменения уже существующих элементов справочника. (ЭтоНовый()). Впрочем, убираением условия "ЭтоНовый()" мы добьёмся немногого - находя сам себя он будет выдавать косяк.
  9. Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Кстати, ещё вариант: вам вполне достаточно строчки

    Код:
    Код = Наименование;
    
    
    В процедуре "ПередЗаписью", включёного контроля уникальности кода и обязательной установки длины кода равной длине наименования. Профит очевиден: все заботы о контроле уникальности теперь лежат на внутренних механизмах 1С. Минус тоже очевиден - длина поля "код" возрастёт.
  10. TopicStarter Overlay
    Inkeeper
    Offline

    Inkeeper Опытный в 1С

    Регистрация:
    22 мар 2009
    Сообщения:
    327
    Симпатии:
    0
    Баллы:
    26
    Да это я понимаю, таких ошибок не допускал.

    Хорошо, попробую. В увеличении кода в принципе не вижу ничего страшного.
  11. TopicStarter Overlay
    Inkeeper
    Offline

    Inkeeper Опытный в 1С

    Регистрация:
    22 мар 2009
    Сообщения:
    327
    Симпатии:
    0
    Баллы:
    26
    Доктор Руфус Бейли, nomad irk, спасибо Вам большое за помощь!

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