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

Тема в разделе "1C и всё что с ней связано", создана пользователем UDF, 14 апр 2008.

  1. UDF

    UDF Гость

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

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

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

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

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

    КонецЕсли;

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

    Zab Well-Known Member
    1C Team

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

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

    Typhoon Гость

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

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

    UDF Гость

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

    Zab Well-Known Member
    1C Team

    Регистрация:
    7 авг 2006
    Сообщения:
    583
    Симпатии:
    0
    Честно скажу, код не мой, знаю только, что работает, сам таким вопросом задался, пока постил... но разбираться времени небыло. (первое правило программиста: работает, не трогай :) )
    он так и делает, при попытке записать элемент


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

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

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

    UDF Гость

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

    mihail922 Гость

    Свой код проверки ставишь в процедуре ПриЗаписи
    А для отмены действия (записи) пиши
    СтатусВозврата (0)
    Для очищения ИНН напиши
    ИНН=""; (иль как у тебя реквизит там называется.... :) )
    пример тебе уже приводили
     
  8. UDF

    UDF Гость

    Спасибо помогло!!! ))))
     
Загрузка...

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