• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Помогите с кодом!

  • Автор темы UDF
  • Дата начала
U

UDF

Вот есть такой кусок кода. Надо дописать чтоб программа не давала записывать данные если ИНН повторяется! Как это сделать???

// Список найденных элементов с таким же ИНН.
Список = СоздатьОбъект("СписокЗначений");

Объект = СоздатьОбъект("Справочник.ЮрЛица");
Объект.ВыбратьЭлементыПоРеквизиту("ИНН", ИНН, 0, 1);

// Поиск элементов с таким же ИНН.
Пока Объект.ПолучитьЭлемент(1) = 1 Цикл
Если Объект.ТекущийЭлемент() = ТекущийЭлемент() Тогда
Возврат; // элемент уже был записан
Иначе
Список.ДобавитьЗначение(Объект.ТекущийЭлемент());
КонецЕсли;
КонецЦикла;

// Найдены элементы с таким же ИНН.
Если 0 < Список.РазмерСписка() Тогда
Стр = "В справочнике """+Объект.ПредставлениеВида()+""" уже есть элементы с таким же ИНН1111!";

КонецЕсли;

КонецПроцедуры // ПриИзмененииИНН()
 
Z

Zab

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

КонецПроцедуры //ПриЗаписи
 
T

Typhoon

Народ может вам и нравиться работать с циклами и переборами, мне например больше по душе поставить признак отбор по реквизиту и написать такой вот код

Код:
спр = создатьобъект("Справочник.Контрагенты");
если спр.найтипореквизиту("ИНН",ИНН) = 1 тогда
..... ругнуться по неуникальности!!!
статусвозврата(0);
конецЕсли;
 
U

UDF

Надо чтоб он после того как ругнулся на неуникальность ИНН===> очистил это поле или не дал сохранить результат!!!
 
Z

Zab

Народ может вам и нравиться работать с циклами и переборами, мне например больше по душе поставить признак отбор по реквизиту и написать такой вот код
Честно скажу, код не мой, знаю только, что работает, сам таким вопросом задался, пока постил... но разбираться времени небыло. (первое правило программиста: работает, не трогай :) )
Надо чтоб он после того как ругнулся на неуникальность ИНН===> очистил это поле или не дал сохранить результат!!!
он так и делает, при попытке записать элемент


PS: а, ну да, не очищает только

PPS: но это, думаю, не будет проблемой самому реализовать? )))

PPPS: Typhoon переборка для того, чтобы себя (текущий элемент) была возможность пропустить, вот :)
 
U

UDF

По поводу не будет проблеммой самому реализовать===> Покопался в книжках не могу найти с помощь какого оператора это сделать, ВОТ!!!!
Если Кто знает подскажите!!!!
 
M

mihail922

По поводу не будет проблеммой самому реализовать===> Покопался в книжках не могу найти с помощь какого оператора это сделать, ВОТ!!!!
Если Кто знает подскажите!!!!
Свой код проверки ставишь в процедуре ПриЗаписи
А для отмены действия (записи) пиши
СтатусВозврата (0)
Для очищения ИНН напиши
ИНН=""; (иль как у тебя реквизит там называется.... :) )
пример тебе уже приводили
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!