Проверка ИНН при вводе нового контрагента

Новая тема
Показывать по сообщений
бывает, что задвоение (троение и т.д.) контриков так "достанет", что на все согласен! :-) Будем надеяться, что у них мысли и "задерживаются".
Ну я бы такой вариант рассматривал только в крайней необходимости, когда уже совсем нет возможности внести изменения в конфигурацию (одну подписку на событие и один общий модуль).
согласен, тем более, что увеличивать код все равно в конфигураторе.
"Что-то я тут с Вами совсем запутался :)<br> <br>Есть же реквизит - ИНН.<br>Он заполняется - и при записи нужно проверить его уникальность. По моему, суть в том, как его проверить.<br>Запросом получаем все ИНН-ы, это понятно. А вот как получить свежевведенное значение?<br> <br>По моему, примерно так:<br>Запрос = Новый запрос;<br>Запрос.Текст = .......<br>// тут мы получили все записанные ИНН , присвоив псевдоним, например, ИНН2<br> А дальше что-то вроде:<br>Если Справочники.ИНН = ВЫборка.ИНН2 Тогда<br>Сообщить("Запись невозможно, бла-бла-бла")<br>И отказ при записи<br>Иначе<br>записываем документ<br> КонецПроцедуры;<br> <br>Как Вам?"
это не ко мне
Плохо!
Ладно, всем спасибо, я буду думать
"Вот реально работающий обработчик события "ПередЗаписью", обеспечивающий уникальность комбинации ИНН/КПП/ОКПО :<br> <br> <br><pre>Процедура XXX_ПриСозданииКонтрагентаПередЗаписью(Источник, Отказ) Экспорт<br>  Если Источник.ЭтоГруппа тогда<br>    возврат;<br>  КонецЕсли;<br><br><br>  //Проверка уникальности ИНН/КПП/ОКПО<br>  Запрос = Новый Запрос;<br>  Запрос.Текст = "ВЫБРАТЬ <br>    |  Контрагенты.Ссылка КАК Контрагент<br>    |ИЗ<br>    |  Справочник.Контрагенты КАК Контрагенты<br>    |ГДЕ<br>    |  Контрагенты.КодПоОКПО = &ВыбКодПоОКПО<br>    |  И Контрагенты.ИНН = &ВыбИНН<br>    |  И Контрагенты.КПП = &ВыбКПП<br>    |  И Контрагенты.Ссылка <> &ВыбКонтрагент";<br><br><br>  Запрос.УстановитьПараметр("ВыбКодПоОКПО",Источник.КодПоОКПО);<br>  Запрос.УстановитьПараметр("ВыбИНН",Источник.ИНН);<br>  Запрос.УстановитьПараметр("ВыбКПП",Источник.КПП);<br>  Запрос.УстановитьПараметр("ВыбКонтрагент",Источник.Ссылка);<br>  Результат = Запрос.Выполнить();<br>  Выборка = Результат.Выбрать();<br><br><br>  ИННКППОКПОНеУникальный = Выборка.Следующий();</pre><br><br> <br> <br><pre><br><br>  #Если Клиент Тогда<br>    Если (ИННКППОКПОНеУникальный) и (Источник.ЭтоНовый()) тогда<br>      Режим = РежимДиалогаВопрос.ДаНет;<br>      Ответ = Вопрос("Контрагент с таким ИНН, КПП и ОКПО уже существует! Вы действительно хотите записать ещё один?",Режим,60,КодВозвратаДиалога.Нет);<br>      Если Ответ = КодВозвратаДиалога.Нет тогда<br>        отказ = истина;<br>        возврат;<br>      КонецЕсли;<br>    КонецЕсли;<br>  #КонецЕсли<br><br><br>  Если ИННКППОКПОНеУникальный тогда<br>    Если ПустаяСтрока(Источник.Код) Тогда<br>      Источник.УстановитьНовыйКод();<br>    КонецЕсли;<br>    Источник.КодПоОКПО = Источник.Код;<br>  КонецЕсли;<br>  Если ПустаяСтрока(Источник.ИНН) И ПустаяСтрока(Источник.КПП) И ПустаяСтрока(Источник.КодПоОКПО) Тогда<br>    Если ПустаяСтрока(Источник.Код) Тогда<br>      Источник.УстановитьНовыйКод();<br>    КонецЕсли;<br>    Источник.КодПоОКПО = Источник.Код;<br>  КонецЕсли;<br>КонецПроцедуры<br></pre>"
Работает? Проверял?<br>А если есть контрагент с ИНН и КПП, а ОКПО не заполнен, тогда что?
Тогда в КодОКПО сохраняется код элемента справочника (который неуникальным сделать достаточно непросто).
Читают тему
(гостей: 1)

Быстрый переход