7.7 Как создать контрагента программно и проверить на уникальность

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем YuriyK, 12 окт 2014.

  1. TopicStarter Overlay
    YuriyK
    Offline

    YuriyK

    Регистрация:
    11 окт 2010
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Есть документ рассрочки, при записи нужно создать контрагента с подчиненными справочниками и проверить на уникальность. Контрагент создается, а проверяет только по наименованию, а мне надо по полному наименованию (Сравнить ФИО и ПолнНаименование). Не могу понять как сделать, я новичок, пожалуйста поподробнее!

    Контр = СоздатьОбъект("Справочник.Контрагенты");
    Контр.НайтиПоНаименованию(глФамилияИмяОтчество(ФИО),,);
    Если Контр.Выбран()=0 Тогда
    Контр.Новый();
    Контр.Наименование = глФамилияИмяОтчество(ФИО);
    // Созд. нов. физ лицо
    ФизЛицо = СоздатьОбъект("Справочник.ФизЛица");
    ФизЛицо.ИспользоватьВладельца(Контр);
    ФизЛицо.Новый();
    ФизЛицо.Наименование = глФамилияИмяОтчество(ФИО);
    ФизЛицо.ПолнНаименование = ФИО ;
    ФизЛицо.Телефоны = Телефон;
    ФизЛицо.ЮрАдрес = Адрес;
    ФизЛицо.ФактАдрес = Адрес;
    ФизЛицо.Записать();
    Контр.ЮрФизЛицо = ФизЛицо.ТекущийЭлемент();
    Контр.Записать();
    СпрДог=СоздатьОбъект("Справочник.Договоры");
    СпрДог.ИспользоватьВладельца(Контр);
    СпрДог.Новый();
    СпрДог.Наименование="Основной договор";
    СпрДог.ВалютаВзаиморасчетов= глРубли;
    СпрДог.Записать();
    // Созд. наименования договора рассрочки
    Спр=СоздатьОбъект("Справочник.Договоры");
    Спр.ИспользоватьВладельца(Контр);
    Спр.Новый();
    Спр.Наименование="Договор рассрочки №"+НомерДок+" от "+ДатаДок;
    Спр.ВалютаВзаиморасчетов= глРубли;
    Спр.Записать();
    Контр.ОсновнойДоговор = СпрДог.ТекущийЭлемент();
    Контр.Записать();
    Иначе
    // кажется здесь нужно что то сделать?
    ФизЛицо = СоздатьОбъект("Справочник.ФизЛица");
    ФизЛицо.ИспользоватьВладельца(Контр);
    Если ФизЛицо.НайтиПоРеквизиту("ПолнНаименование",ФИО,1)=1 Тогда
    Сообщить(ФИО+"уже существует");
    Иначе
    Предупреждение("Такого контрагента нет!",10);
    КонецЕсли;
    КонецЕсли;
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Метод НайтиПоРеквизиту работает только если установлено свойство "отбор по реквизиту"
  3. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    412
    Симпатии:
    72
    Баллы:
    54
    Здравствуйте.
    Зачем-то сначала устанавливаете владельца справочника, а потом делаете поиск по всему, без подчинения.
    Если отбора по реквизиту нет, то делайте полный перебор и ищите нужное физлицо:

    // кажется здесь нужно что то сделать?
    ФизЛицо = СоздатьОбъект("Справочник.ФизЛица");
    ФизЛицо.ИспользоватьВладельца(Контр);
    ФизЛицо.ВыбратьЭлементы();
    Пока ФизЛицо.ПолучитьЭлемент() = 1 Цикл
    Если СокрЛП(ФизЛицо.ПолнНаименование)= СокрЛП(ФИО) Тогда
    Сообщить(ФИО+"уже существует");
    Иначе
    Предупреждение("Такого контрагента нет!",10);
    КонецЕсли;
    КонецЕсли;
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Катя... А если в справочнике 5000-10000 элементов.. Вы представляете как долго он будет искать?
  5. TopicStarter Overlay
    YuriyK
    Offline

    YuriyK

    Регистрация:
    11 окт 2010
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Спасибо Вам большое за подсказку, немного изменил, теперь работает!

    ФизЛицо = СоздатьОбъект("Справочник.ФизЛица");
    ФизЛицо.ИспользоватьВладельца(Контр);
    Если ФизЛицо.НайтиПоРеквизиту(СокрЛП("ПолнНаименование"),СокрЛП(ФИО),0)=1 Тогда
    Сообщить(ФИО+"уже существует");
    Иначе
    Сообщить("Такого контрагента нет!");
    КонецЕсли;
  6. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Одно СокрЛП лишнее...
    Если ФизЛицо.НайтиПоРеквизиту("ПолнНаименование",СокрЛП(ФИО),0)=1 Тогда
  7. TopicStarter Overlay
    YuriyK
    Offline

    YuriyK

    Регистрация:
    11 окт 2010
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    спасибо, уберу
  8. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
  9. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    412
    Симпатии:
    72
    Баллы:
    54
    Добрый день.
    В моей практике не было таких больших предприятий, максимум 100 человек. Перебор делался быстро. :)
    Учту на будущее.

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