Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
05 июл 2024, 20:12

Дублирование контрагентов

Автор giorgi wiklauri, 28 дек 2022, 23:31

0 Пользователей и 1 гость просматривают эту тему.

giorgi wiklauri

привет всем, при добавлении контрагентов хочу, чтобы новый контрагент с подобным идентификационным кодом(ИНН) не добавлялся и высвечивалось сообщение "Контрагент с подобным кодом уже существует" Как поставить такое ограничение?

ФормаЭлемента:


Перем мОбработкаТайпингаВидаКИ;
Перем мТекстТайпингаВидаКИ;
Перем мПоследнееЗначениеЭлементаТайпингаВидаКИ;

Перем мКнопкаРедактироватьКИВДиалоге;

Перем мЖирныйШрифт;
Перем мОбычныйШрифт;
Перем мФормироватьНаименованиеПолноеАвтоматически; // надо ли формировать автоматически НаименованиеПолное, или нет
Перем мСоздаватьОсновнойДоговор;

Перем мЭтоНовый;
Перем АктВыборка;

////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ

// Процедура устанавливает видимость поля ввода ГоловнойКонтрагент в зависимости
// от состояния флажка "Входит в холдинг".
//
Процедура ВидимостьГоловногоКонтрагента()
   
    ЭлементыФормы.ГоловнойКонтрагент.Видимость        = ВходитВХолдинг;
    ЭлементыФормы.НадписьГоловнойКонтрагент.Видимость = ВходитВХолдинг;
   
    ЭлементыФормы.ГоловнойКонтрагентДоговор.Видимость        = ВходитВХолдинг;
    ЭлементыФормы.НадписьГоловнойКонтрагентДоговор.Видимость = ВходитВХолдинг;   
   
КонецПроцедуры // ВидимостьГоловногоКонтрагента()
 
 
Процедура ОбновитьТелефоныКонтактногоЛица()

    СтрокаТелефонов = "";

    Если ЭлементыФормы.КонтактныеЛица.ТекущиеДанные <> Неопределено И НЕ ГлЗащищеннаяОбработка.MXLY_ZNEO_VMDZ_JZEB_SZRQ(ЭлементыФормы.КонтактныеЛица.ТекущиеДанные.Ссылка) Тогда

        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("Тип"   , Перечисления.ТипыКонтактнойИнформации.Телефон);
        Запрос.УстановитьПараметр("Объект", ЭлементыФормы.КонтактныеЛица.ТекущиеДанные.Ссылка);
        Запрос.Текст = "
        |ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |    КонтактнаяИнформация.Представление
        |ИЗ
        |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        |
        |ГДЕ
        |    КонтактнаяИнформация.Тип = &Тип
        |    И
        |    КонтактнаяИнформация.Объект = &Объект
        |
        |УПОРЯДОЧИТЬ ПО
        |    КонтактнаяИнформация.ЗначениеПоУмолчанию УБЫВ";
        Выборка = Запрос.Выполнить().Выбрать();

        Пока Выборка.Следующий() Цикл
            СтрокаТелефонов = СтрокаТелефонов + ", " + Выборка.Представление;
        КонецЦикла;

    КонецЕсли;

    Если Не ПустаяСтрока(СтрокаТелефонов) Тогда
        СтрокаТелефонов = Сред(СтрокаТелефонов, 3);
    КонецЕсли;

    ЭлементыФормы.ТелефоныКонтактногоЛица.Заголовок = ГлЗащищеннаяОбработка.CPXX_DUXC_BXJE_MCEF_FDVE() + СтрокаТелефонов;
    ЭлементыФормы.ТелефоныКонтактногоЛица.Видимость = НЕ ГлЗащищеннаяОбработка.XVZJ_WSAA_TVMW_YKBS_MUWC(СтрокаТелефонов);

КонецПроцедуры

// Процедура управляет видимостью страниц панели ПанельЮрФизЛицо.
//
Процедура ВидимостьПанелейЮрФизЛица()

    Если ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо Тогда
        ВидимаяСтраница   = ЭлементыФормы.ПанельЮрФизЛицо.Страницы.ФизЛицо;
        НеВидимаяСтраница = ЭлементыФормы.ПанельЮрФизЛицо.Страницы.ЮрЛицо;

    Иначе
        ВидимаяСтраница   = ЭлементыФормы.ПанельЮрФизЛицо.Страницы.ЮрЛицо;
        НеВидимаяСтраница = ЭлементыФормы.ПанельЮрФизЛицо.Страницы.ФизЛицо;

    КонецЕсли;

    Если ЭлементыФормы.ПанельЮрФизЛицо.ТекущаяСтраница <> ВидимаяСтраница Тогда
        ВидимаяСтраница.Видимость   = Истина;
        НеВидимаяСтраница.Видимость = Ложь;
        ЭлементыФормы.ПанельЮрФизЛицо.ТекущаяСтраница = ВидимаяСтраница;

    КонецЕсли;

КонецПроцедуры

// Процедура записывает основной договор контрагента контрагента.
//
Процедура ПроверитьОсновнойДоговорКонтрагента()

    Если НЕ ГлЗащищеннаяОбработка.WBCA_XXWZ_GBKP_BHGD_DEMW(ОсновнойДоговорКонтрагента) Тогда
        Возврат;
    КонецЕсли;

    ВыборкаДоговоров = Справочники.ДоговорыКонтрагентов.Выбрать(, Ссылка);

    Если ВыборкаДоговоров.Следующий() Тогда
        НайденныйДоговор = ВыборкаДоговоров.Ссылка;

    ИначеЕсли мСоздаватьОсновнойДоговор тогда
       
        мСоздаватьОсновнойДоговор = Ложь;

        НайденныйДоговорОбъект = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();

        НайденныйДоговорОбъект.Наименование          = ГлЗащищеннаяОбработка.UKUE_KECB_XAEF_JFKY_DXWZ();
        НайденныйДоговорОбъект.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом;
        НайденныйДоговорОбъект.ВалютаВзаиморасчетов  = ПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ОсновнаяВалютаВзаиморасчетов");

        Если ГлЗащищеннаяОбработка.WZXY_PPFS_EXNE_CCPA_KBXC(НайденныйДоговорОбъект.ВалютаВзаиморасчетов) Тогда
            НайденныйДоговорОбъект.ВалютаВзаиморасчетов = Константы.ВалютаРегламентированногоУчета.Получить();
        КонецЕсли;

        Если ГлЗащищеннаяОбработка.IHGA_VSVL_XAVQ_MCTU_HUUI(НайденныйДоговорОбъект.Организация) Тогда
            НайденныйДоговорОбъект.Организация  = ПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ОсновнаяОрганизация");
        КонецЕсли;

        НайденныйДоговорОбъект.Владелец    = Ссылка;
        НайденныйДоговорОбъект.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
       
        //Если ОрганизационноПравовыеФормы = Перечисления.ОрганизационноПравовыеФормы.ОргДиплСтат Тогда
        Если ПравовыеФормы = Справочники.КлассификаторОКОПФ.Дипломат Тогда
            НайденныйДоговорОбъект.СтатьяДекларацииНДСНалоговыеОбязательства = Справочники.СтатьиНалоговыхДеклараций.НДС_ПоставкаТоваровУслугДипломатов;
        Иначе
            НайденныйДоговорОбъект.СтатьяДекларацииНДСНалоговыеОбязательства = Справочники.СтатьиНалоговыхДеклараций.НДС_МестныеОборотыСКомпПлат;
        КонецЕсли;
   
        НайденныйДоговорОбъект.ВидыДоговораКонтрагентов = Перечисления.ВидыДоговораКонтрагентов.Обычный;
       
        Если ЯвляетсаНеРезидентом Тогда
            НайденныйДоговорОбъект.УчетАгентскогоНДС = Истина;
        КонецЕсли;

        ОшибкаПриЗаписиДоговора = Ложь;
        НайденныйДоговорОбъект.ПроверитьПередЗаписью(ОшибкаПриЗаписиДоговора, Ложь);
        Если ОшибкаПриЗаписиДоговора тогда
            //Сообщить("Не удалось записать основной договор контрагента.");
            Возврат;
        Иначе
            НайденныйДоговорОбъект.Записать();
        КонецЕсли;
       
        НайденныйДоговор = НайденныйДоговорОбъект.Ссылка;
    Иначе
        Возврат;
    КонецЕсли;

    ОсновнойДоговорКонтрагента = НайденныйДоговор;

    Записать();
   
КонецПроцедуры // ПроверитьОсновнойДоговорКонтрагента()

// Процедура изменяет доступность кнопки установки основного банковского счета.
//
Процедура ПроверитьПометкуКнопкиУстановкиОсновногоБанковскогоСчета()

    Если ЭлементыФормы.БанковскиеСчета.ТекущиеДанные = Неопределено Тогда
        ЭлементыФормы.КоманднаяПанельБанковскиеСчета.Кнопки.СделатьОсновным.Доступность = Ложь;
        ЭлементыФормы.КоманднаяПанельБанковскиеСчета.Кнопки.СделатьОсновным.Пометка     = Ложь;
    Иначе
        ЭлементыФормы.КоманднаяПанельБанковскиеСчета.Кнопки.СделатьОсновным.Доступность = Истина;
        ЭлементыФормы.КоманднаяПанельБанковскиеСчета.Кнопки.СделатьОсновным.Пометка     = ЭлементыФормы.БанковскиеСчета.ТекущаяСтрока.Ссылка = ОсновнойБанковскийСчет;
    КонецЕсли;

КонецПроцедуры

// Процедура изменяет доступность кнопки установки основного договора взаиморасчетов.
//
Процедура ПроверитьПометкуКнопкиУстановкиОсновногоДоговора()

    Если ЭлементыФормы.Договоры.ТекущиеДанные = Неопределено Тогда
        ЭлементыФормы.КоманднаяПанельДоговоры.Кнопки.СделатьОсновным.Доступность = Ложь;
        ЭлементыФормы.КоманднаяПанельДоговоры.Кнопки.СделатьОсновным.Пометка     = Ложь;
    Иначе
        Если ЭлементыФормы.Договоры.ТекущиеДанные.ЭтоГруппа Тогда
            ЭлементыФормы.КоманднаяПанельДоговоры.Кнопки.СделатьОсновным.Доступность = Ложь;
            ЭлементыФормы.КоманднаяПанельДоговоры.Кнопки.СделатьОсновным.Пометка     = Ложь;
        Иначе
            ЭлементыФормы.КоманднаяПанельДоговоры.Кнопки.СделатьОсновным.Доступность = Истина;
            ЭлементыФормы.КоманднаяПанельДоговоры.Кнопки.СделатьОсновным.Пометка     = ЭлементыФормы.Договоры.ТекущиеДанные.Ссылка = ОсновнойДоговорКонтрагента;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры

// Процедура изменяет доступность кнопки установки основного контактного лица.
//
Процедура ПроверитьДоступностьКнопкиУстановкиОсновногоКонтактногоЛица()

    Если ЭлементыФормы.КонтактныеЛица.ТекущиеДанные = Неопределено Тогда
        ЭлементыФормы.КоманднаяПанельКонтактныеЛица.Кнопки.СделатьОсновным.Доступность = Ложь;
    Иначе
        ЭлементыФормы.КоманднаяПанельКонтактныеЛица.Кнопки.СделатьОсновным.Доступность = НЕ (ЭлементыФормы.КонтактныеЛица.ТекущиеДанные.Ссылка = ОсновноеКонтактноеЛицо);
    КонецЕсли;

КонецПроцедуры

// Процедура проверяет, совпадало ли ранее полное наименование с наименованием,
// и присваивает соответствующее значение переменной мФормироватьНаименованиеПолноеАвтоматически.
//
// Параметры:
//  Нет.
//
Процедура УстановитьФлагФормироватьНаименованиеПолноеАвтоматически()

    Если ПустаяСтрока(НаименованиеПолное)
     ИЛИ НаименованиеПолное = Наименование Тогда
        мФормироватьНаименованиеПолноеАвтоматически = Истина;
    Иначе
        мФормироватьНаименованиеПолноеАвтоматически = Ложь;
    КонецЕсли;

КонецПроцедуры // УстановитьФлагФормироватьНаименованиеПолноеАвтоматически()

// Процедура проверяет, необходимо ли формировать полное наименование автоматически или нет,
// и, если необходимо, формирует его.
//
// Параметры:
//  Нет.
//
Процедура СформироватьНаименованиеПолноеАвтоматически()

    Если мФормироватьНаименованиеПолноеАвтоматически Тогда
        НаименованиеПолное = Наименование;
    КонецЕсли;

КонецПроцедуры // СформироватьНаименованиеПолноеАвтоматически()

////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ

// Обработчик события ПередОткрытием формы.
//
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
   
    Если ЭтоНовый()
       И Не ГлЗащищеннаяОбработка.AOYJ_CSFV_JVWH_IIAJ_WFPM(ПараметрОбъектКопирования) Тогда
        ОМКонтактнаяИнформация.ПрочитатьКонтактнуюИнформацию(НаборКонтактнойИнформации, ПараметрОбъектКопирования);
    Иначе
        ОМКонтактнаяИнформация.ПрочитатьКонтактнуюИнформацию(НаборКонтактнойИнформации, Ссылка);
    КонецЕсли;
   
КонецПроцедуры

// Обработчик события ПриОткрытии формы.
//
Процедура ПриОткрытии()
       
    // Контактная информация
    мКнопкаРедактироватьКИВДиалоге = ЭлементыФормы.КоманднаяПанельКонтактнойИнформации.Кнопки.РедактироватьВДиалоге;
   
    НажатиеКнопки = ВосстановитьЗначение("РедактироватьКИВДиалоге");
    Если ТипЗнч(НажатиеКнопки) = Тип("Булево") Тогда
        мКнопкаРедактироватьКИВДиалоге.Пометка = НажатиеКнопки;
    КонецЕсли;

    Если ЭтоНовый() Тогда

        Если ГлЗащищеннаяОбработка.SSPF_VEYE_EUHF_HREU_PZSC(ЮрФизЛицо) Тогда
            ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо;
        КонецЕсли;

    КонецЕсли;

    КонтактныеЛица.Отбор.ОбъектВладелец.Значение      = Ссылка;
    КонтактныеЛица.Отбор.ОбъектВладелец.Использование = Истина;

    // Проверка однофирменности
    ГлЗащищеннаяОбработка.KDAY_OZAV_SHZF_PHYE_ARKE(ЭтаФорма, УчетПоВсемОрганизациям, ОсновнаяОрганизация, "Договоры");

    Если НЕ ЭтоНовый() Тогда
        ВходитВХолдинг = НЕ(ГоловнойКонтрагент = Ссылка);
    КонецЕсли;
   
    ВидимостьГоловногоКонтрагента();
    ИНННадпись();
   
    Если ЗначениеЗаполнено(НазваниеПользователяСервиса) Тогда
        ЭлементыФормы.ПользовательСервиса.СписокВыбора.Добавить(НазваниеПользователяСервиса + " (" + ИДПользователяСервиса + ")");
        ЭлементыФормы.ПользовательСервиса.Значение =  НазваниеПользователяСервиса + " (" + ИДПользователяСервиса + ")";
    КонецЕсли;
   
    ОМОбщегоНазначения.УстановитьЗаголовокWS(WS, ЭлементыФормы);
   
КонецПроцедуры // ПриОткрытии()

// Обработчик события ПередЗаписью формы.
//
Процедура ПередЗаписью(Отказ)
   
    мЭтоНовый = ЭтоНовый();
        ГлЗащищеннаяОбработка.HKAW_SSMB_UQHA_RHYH_CEVB();
       
        мЭтоНовый = ЭтоНовый();
    мИНН = Ссылка.ИНН;

       
        //ПустаяСтрока ИНН
Если ПустаяСтрока(ИНН) Тогда
        Ответ = Вопрос("Код не указан ""ИНН""" + Символы.ПС + "Продолжить запись?", РежимДиалогаВопрос.ДаНет, 0);
        Если Ответ = КодВозвратаДиалога.Нет Тогда
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;

       
КонецПроцедуры // ПередЗаписью()

// Обработчик события ПриЗаписи формы.
//
Процедура ПриЗаписи(Отказ)
   
    //ЗаписатьДанныеФИО();

    //ПроверитьДубли(мНаборЗаписейДокументаУдостоверяющегоЛичность[0], ЭлементыФормы.ИНН.Значение);
    //
    //ОМРегламентированнаяОтчетность.ЗаписатьДанныеФИОВРегистр(Ссылка, Отчество);
    //
    //// запись в регистр паспортных данных
    //мНаборЗаписейДокументаУдостоверяющегоЛичность[0].Контрагенты = Ссылка;
    //Если НЕ ГлЗащищеннаяОбработкаДок.GDZS_BGXX_NAAE_XMYH_ZDWA(мНаборЗаписейДокументаУдостоверяющегоЛичность[0].Период) тогда
    //    мНаборЗаписейДокументаУдостоверяющегоЛичность.Отбор.Контрагенты.Использование     = Истина;
    //    мНаборЗаписейДокументаУдостоверяющегоЛичность.Отбор.Контрагенты.Значение         = мНаборЗаписейДокументаУдостоверяющегоЛичность[0].Контрагенты;
    //    мНаборЗаписейДокументаУдостоверяющегоЛичность.Отбор.Период.Использование = Истина;
    //    мНаборЗаписейДокументаУдостоверяющегоЛичность.Отбор.Период.Значение         = мНаборЗаписейДокументаУдостоверяющегоЛичность[0].Период;
    //    мНаборЗаписейДокументаУдостоверяющегоЛичность.Записать(Истина);
    //КонецЕсли;
   
   
   
   

    КонтактныеЛица.Отбор.ОбъектВладелец.Значение = Ссылка;
   
    Если мЭтоНовый = Истина Тогда
       
        мЭтоНовый = Неопределено;
       
        ПроверитьОсновнойДоговорКонтрагента();
       
    КонецЕсли;
   
    Если НЕ ВходитВХолдинг Тогда
        Если ГлЗащищеннаяОбработка.WZXY_PPFS_EXNE_CCPA_KBXC(ГоловнойКонтрагент)
         ИЛИ НЕ (ГоловнойКонтрагент = Ссылка) Тогда
            ГоловнойКонтрагент = Ссылка;
            Записать();
        КонецЕсли;
    Иначе
        Если ГлЗащищеннаяОбработка.WSMW_ADVP_CYZB_NWCB_NOOD(ГоловнойКонтрагент) Тогда
            ОМОбщегоНазначения.СообщитьОбОшибке(ГлЗащищеннаяОбработка.KHWP_YEAS_HNEN_TUPT_WBKA(),, ГлЗащищеннаяОбработка.NQSA_EKVT_AXDP_XYQI_UNXW());
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;
   
    ОМКонтактнаяИнформация.ЗаписатьКонтактнуюИнформацию(НаборКонтактнойИнформации, Ссылка, Отказ);
   
КонецПроцедуры // ПриЗаписи()

// Обработчик события ПриИзмененииДанных формы.
//
Процедура ПриИзмененииДанных()

    УстановитьФлагФормироватьНаименованиеПолноеАвтоматически();

    Если НЕ ЭтоНовый() Тогда
        ВходитВХолдинг = НЕ(ГоловнойКонтрагент = Ссылка);
    КонецЕсли;
   
    ВидимостьГоловногоКонтрагента();
   
КонецПроцедуры // ПриИзмененииДанных()

// Обработчик события ОбработкаВыбора формы.
//
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
   
    Если ТипЗнч(ЗначениеВыбора) = Тип("Строка") Тогда

        Если ЗначениеВыбора = "ОбновлениеКонтактнойИнформации" Тогда
            ОбновитьТелефоныКонтактногоЛица();

        КонецЕсли;

    КонецЕсли;
   
    Если АктВыборка = 1 Тогда
        обТерминал  = ЗначениеВыбора.ПолучитьОбъект();
        обТерминал.Владелец = Ссылка;
        обТерминал.Записать();
        Обновить();
    КонецЕсли;
   

КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ КОМАНДНЫХ ПАНЕЛЕЙ ФОРМЫ

// Обработчик события Нажатие элемента формы КоманднаяПанельБанковскиеСчета.СделатьОсновным.
//
Процедура КоманднаяПанельБанковскиеСчетаСделатьОсновным(Кнопка)

    Если ЭлементыФормы.БанковскиеСчета.ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;
   
    Если ГлЗащищеннаяОбработка.WMXB_WTTV_XCGF_CXXX_SOQC(ЭлементыФормы.БанковскиеСчета.ТекущиеДанные.Ссылка) Тогда
        Возврат;
    КонецЕсли;

    Если ОсновнойБанковскийСчет = ЭлементыФормы.БанковскиеСчета.ТекущиеДанные.Ссылка Тогда
        ОсновнойБанковскийСчет = Справочники.БанковскиеСчета.ПустаяСсылка();
    Иначе
        ОсновнойБанковскийСчет = ЭлементыФормы.БанковскиеСчета.ТекущиеДанные.Ссылка;
    КонецЕсли;
    ПроверитьПометкуКнопкиУстановкиОсновногоБанковскогоСчета();
   
КонецПроцедуры

// Обработчик события Нажатие элемента формы КоманднаяПанельКонтактныеЛица.СделатьОсновным.
//
Процедура КоманднаяПанельКонтактныеЛицаСделатьОсновным(Кнопка)
   
    Если ЭлементыФормы.КонтактныеЛица.ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;
   
    Если ГлЗащищеннаяОбработка.BWDN_ZCNN_UJAE_DIFU_FQEN(ЭлементыФормы.КонтактныеЛица.ТекущиеДанные.Ссылка) Тогда
        Возврат;
    КонецЕсли;
   
    ОсновноеКонтактноеЛицо = ЭлементыФормы.КонтактныеЛица.ТекущиеДанные.Ссылка;
    ПроверитьДоступностьКнопкиУстановкиОсновногоКонтактногоЛица();
   
КонецПроцедуры

// Обработчик события Нажатие элемента формы КоманднаяПанельБанковскиеСчета.КоманднаяПанельДоговоры.
//
Процедура КоманднаяПанельДоговорыСделатьОсновным(Кнопка)

    Если ЭлементыФормы.Договоры.ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;
   
    Если ГлЗащищеннаяОбработка.UKEM_SSVD_XMKF_KMHC_KAXQ(ЭлементыФормы.Договоры.ТекущиеДанные.Ссылка) Тогда
        Возврат;
    КонецЕсли;
   
    Если ЭлементыФормы.Договоры.ТекущиеДанные.ЭтоГруппа Тогда
        Предупреждение(ГлЗащищеннаяОбработка.GSUF_CQGZ_UDTU_GTXK_CECC());
        Возврат;
    КонецЕсли;

    Если ОсновнойДоговорКонтрагента = ЭлементыФормы.Договоры.ТекущиеДанные.Ссылка Тогда
        ОсновнойДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.ПустаяСсылка();
    Иначе
        ОсновнойДоговорКонтрагента = ЭлементыФормы.Договоры.ТекущиеДанные.Ссылка;
    КонецЕсли;
   
    ПроверитьПометкуКнопкиУстановкиОсновногоДоговора();

КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ

// Обработчик события ПриИзменении флажка "Входит в холдинг".
// Управляет видимостью поля ввода ГоловнойКонтрагент.
//
Процедура ВходитВХолдингПриИзменении(Элемент)
   
    Если Элемент.Значение И ГоловнойКонтрагент = Ссылка Тогда
        ГоловнойКонтрагент = Справочники.Контрагенты.ПустаяСсылка();
        ГоловнойКонтрагентДоговор = Справочники.ДоговорыКонтрагентов.ПустаяСсылка();
    КонецЕсли;
   
    ВидимостьГоловногоКонтрагента();
   
КонецПроцедуры // ВходитВХолдингПриИзменении()

// Обработчик события ПриВыводеСтроки элемента формы Договоры.
//
Процедура ДоговорыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

    Если НЕ ГлЗащищеннаяОбработка.TFVK_HIVD_ZOEM_UCAI_EFOB(ДанныеСтроки.Ссылка) И ЭтотОбъект.ОсновнойДоговорКонтрагента = ДанныеСтроки.Ссылка Тогда
        ОформлениеСтроки.Шрифт = мЖирныйШрифт;
    КонецЕсли;

КонецПроцедуры

// Обработчик события ПриВыводеСтроки элемента формы БанковскиеСчета.
//
Процедура БанковскиеСчетаПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

    Если ДанныеСтроки <> Неопределено Тогда
        СсылкаСтроки = ДанныеСтроки.Ссылка;
    Иначе
        СсылкаСтроки = Неопределено;
    КонецЕсли;

    Если ДанныеСтроки <> Неопределено И НЕ СсылкаСтроки.Пустая() И ЭтотОбъект.ОсновнойБанковскийСчет = СсылкаСтроки Тогда
        ОформлениеСтроки.Шрифт = мЖирныйШрифт;
    КонецЕсли;

КонецПроцедуры

// Обработчик события Очистка элемента формы ЮрФизЛицо.
//
Процедура ЮрФизЛицоОчистка(Элемент, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

КонецПроцедуры

// Обработчик события ПриИзменении элемента формы ЮрФизЛицо.
//
Процедура ЮрФизЛицоПриИзменении(Элемент)

    ВидимостьПанелейЮрФизЛица();
    ИНННадпись();
КонецПроцедуры

// Обработчик события ПриИзменении элемента формы Наименование.
//
Процедура НаименованиеПриИзменении(Элемент)

    СформироватьНаименованиеПолноеАвтоматически();

КонецПроцедуры

// Обработчик события ПриИзменении для полного наименования.
//
Процедура НаименованиеПолноеПриИзменении(Элемент)

    УстановитьФлагФормироватьНаименованиеПолноеАвтоматически();

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

// Обработчик события НачалоВыбораИзСписка для полного наименования.
//
Процедура НаименованиеПолноеНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    // Формирование списка выбора.

    Список = Новый СписокЗначений();

    Список.Добавить(Наименование);

    // Выбор из списка и обработка выбора.

    РезультатВыбора = ВыбратьИзСписка(Список, ЭлементыФормы.НаименованиеПолное);

    Если РезультатВыбора <> Неопределено Тогда

        НаименованиеПолное                          = РезультатВыбора.Значение;
        мФормироватьНаименованиеПолноеАвтоматически = Истина;

    КонецЕсли;

КонецПроцедуры // НаименованиеПолноеНачалоВыбораИзСписка()

// Обработчик события ПередНачаломДобавления элемента формы БанковскиеСчета.
//
Процедура БанковскиеСчетаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа)

    Отказ = НЕ ОМРаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);

КонецПроцедуры

// Обработчик события ПередНачаломДобавления элемента формы Договоры.
//
Процедура ДоговорыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа)
   
    ЭтоНовый = ЭтоНовый();

    Отказ = НЕ ОМРаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);
   
    Если ЭтоНовый
       И НЕ ГлЗащищеннаяОбработка.VTWQ_TMFU_CWXK_AEPT_NJSJ(ОсновнойДоговорКонтрагента) Тогда
       
        Отказ = Истина;
           
        ОсновнойДоговорКонтрагента.ПолучитьФорму(, ЭтаФорма).Открыть();
               
    КонецЕсли;

КонецПроцедуры

// Обработчик события ПередНачаломДобавления элемента формы КонтактныеЛица.
//
Процедура КонтактныеЛицаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа)

    Отказ = НЕ ОМРаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);

    Если НЕ Отказ Тогда

        Отказ = Истина;

        Если Копирование Тогда
            НовыйОбъект = Элемент.ТекущиеДанные.Ссылка.Скопировать();

        Иначе
            НовыйОбъект = Справочники.КонтактныеЛица.СоздатьЭлемент();

            НовыйОбъект.ВидКонтактногоЛица = Перечисления.ВидыКонтактныхЛиц.КонтактноеЛицоКонтрагента;
            НовыйОбъект.ОбъектВладелец     = Ссылка;

        КонецЕсли;

        НовыйОбъект.ПолучитьФорму(, ЭтаФорма).Открыть();

    КонецЕсли;

КонецПроцедуры

// Обработчик события ПередОкончаниемРедактирования элемента формы Договоры.
//
Процедура ДоговорыПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)

    Если ГлЗащищеннаяОбработка.WWCE_UGVX_VRPV_XCTB_UBUH(ОсновнойДоговорКонтрагента) Тогда
        ОсновнойДоговорКонтрагента = Элемент.ТекущиеДанные.Ссылка;
    КонецЕсли;

КонецПроцедуры

// Обработчик события ПриАктивизацииСтроки элемента формы БанковскиеСчета.
//
Процедура БанковскиеСчетаПриАктивизацииСтроки(Элемент)

    ПроверитьПометкуКнопкиУстановкиОсновногоБанковскогоСчета();

КонецПроцедуры

// Обработчик события ПриАктивизацииСтроки элемента формы Договоры.
//
Процедура ДоговорыПриАктивизацииСтроки(Элемент)

    ПроверитьПометкуКнопкиУстановкиОсновногоДоговора();

КонецПроцедуры
 
// Обработчик события ПриАктивизацииСтроки элемента формы КонтактныеЛица.
//
Процедура КонтактныеЛицаПриАктивизацииСтроки(Элемент)

    ПроверитьДоступностьКнопкиУстановкиОсновногоКонтактногоЛица();

    ОбновитьТелефоныКонтактногоЛица();

КонецПроцедуры

// Обработчик события Нажатие элемента формы КоманднаяПанельКонтактныеЛицаКонтактныеЛица/Обновить.
//
Процедура КоманднаяПанельКонтактныеЛицаКонтактныеЛицаОбновить(Кнопка)

    КонтактныеЛица.Обновить();
    ОбновитьТелефоныКонтактногоЛица();

КонецПроцедуры

// Обработчик события ПередНачаломИзменения элемента формы КонтактныеЛица.
//
Процедура КонтактныеЛицаПередНачаломИзменения(Элемент, Отказ)

    Отказ = Истина;

    Если Элемент.ТекущиеДанные <> Неопределено Тогда
        Элемент.ТекущиеДанные.Ссылка.ПолучитьФорму(, ЭтаФорма).Открыть();
    КонецЕсли;

КонецПроцедуры

// Обработчик события ПриВыводеСтроки элемента формы КонтактныеЛица.
//
Процедура КонтактныеЛицаПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

    Если НЕ ГлЗащищеннаяОбработка.UGCD_VXUI_WBJM_PWPR_SZBH(ОсновноеКонтактноеЛицо) И ДанныеСтроки.Ссылка = ОсновноеКонтактноеЛицо Тогда
        ОформлениеСтроки.Шрифт = мЖирныйШрифт;
    КонецЕсли;

КонецПроцедуры

Процедура ДействияФормыОтчет(Кнопка)
    Если Ссылка.ЭтоГруппа Тогда
        Предупреждение(ГлЗащищеннаяОбработка.BZCD_KGXL_LHVZ_FVAF_FEPY());
        Возврат;
       
    Иначе
       
        Отчет = Отчеты.ОтчетПоДаннымКонтрагента.Создать();
        Отчет.КонтрагентОтчета = Ссылка;
        Отчет.ДатаОтчета = ТекущаяДата();
       
        ФормаОтчета = Отчет.ПолучитьФорму();
       
        Отчет.СформироватьОтчет(ФормаОтчета.ЭлементыФормы.ПолеТабличногоДокумента);
       
        ФормаОтчета.Открыть();
   
    КонецЕсли;
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ МЕХАНИЗМА КОНТАКТНОЙ ИНФОРМАЦИИ

// Обработчик события Нажатие элемента формы КоманднаяПанельКонтактнойИнформации.РедактироватьВДиалоге.
//
Процедура КоманднаяПанельКонтактнойИнформацииРедактироватьВДиалоге(Кнопка)
   
    Кнопка.Пометка = НЕ Кнопка.Пометка;
   
КонецПроцедуры

// Обработчик события ПриНачалеРедактирования элемента формы КонтактнаяИнформация.
//
Процедура КонтактнаяИнформацияПриНачалеРедактирования(Элемент, НоваяСтрока)
   
    ОМКонтактнаяИнформация.КонтактнаяИнформацияПриНачалеРедактированияОбщая(Элемент, НоваяСтрока, мПоследнееЗначениеЭлементаТайпингаВидаКИ);
   
КонецПроцедуры

// Обработчик события НачалоВыбора элемента формы КонтактнаяИнформация.Представление.
//
Процедура КонтактнаяИнформацияПредставлениеНачалоВыбора(Элемент, СтандартнаяОбработка)
   
    СтандартнаяОбработка = Ложь;
    ОбработкаРедактирования = Обработки.РедактированиеКонтактнойИнформации.Создать();
    ОбработкаРедактирования.ДоступностьОбъекта = Ложь;
    ОбработкаРедактирования.РедактироватьЗапись(ЭлементыФормы.КонтактнаяИнформация.ТекущиеДанные, , ЭтаФорма);
        ГлЗащищеннаяОбработка.ZDHO_XXPU_TAVH_AJSY_SMNN();
   
КонецПроцедуры

// Обработчик события Очистка элемента формы КонтактнаяИнформация,Тип.
//
Процедура КонтактнаяИнформацияТипОчистка(Элемент, СтандартнаяОбработка)
   
    СтандартнаяОбработка = Ложь;
   
КонецПроцедуры

// Обработчик события НачалоВыбора элемента формы КонтактнаяИнформация.Вид.
//
Процедура КонтактнаяИнформацияВидНачалоВыбора(Элемент, СтандартнаяОбработка)
   
    СтандартнаяОбработка = Ложь;
    ОМКонтактнаяИнформация.ОткрытьФормуВыбораВидаКИ(Истина, Элемент, ЭлементыФормы.КонтактнаяИнформация.ТекущиеДанные.Тип, ОМКонтактнаяИнформация.ВидОбъектаКИ(Ссылка));
   
КонецПроцедуры

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

// Обработчик события АвтоПодборТекста элемента формы КонтактнаяИнформация.Вид.
//
Процедура КонтактнаяИнформацияВидАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)
   
    ОМРаботаСДиалогами.АвтоПодборТекстаВЭлементеУправления(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка, Новый Структура("Тип, ВидОбъектаКонтактнойИнформации", ЭлементыФормы.КонтактнаяИнформация.ТекущиеДанные.Тип, ОМКонтактнаяИнформация.ВидОбъектаКИ(Ссылка)), Тип("СправочникСсылка.ВидыКонтактнойИнформации"));
   
КонецПроцедуры

// Обработчик события ОкончаниеВводаТекста элемента формы КонтактнаяИнформация.Вид.
//
Процедура КонтактнаяИнформацияВидОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
   
    ОМРаботаСДиалогами.ОкончаниеВводаТекстаВЭлементеУправления(Элемент, Текст, Значение, СтандартнаяОбработка, Новый Структура("Тип, ВидОбъектаКонтактнойИнформации", ЭлементыФормы.КонтактнаяИнформация.ТекущиеДанные.Тип, ОМКонтактнаяИнформация.ВидОбъектаКИ(Ссылка)), ЭтаФорма, Тип("СправочникСсылка.ВидыКонтактнойИнформации"), мОбработкаТайпингаВидаКИ, мТекстТайпингаВидаКИ, мПоследнееЗначениеЭлементаТайпингаВидаКИ);
   
КонецПроцедуры

// Обработчик события ПередОкончаниемРедактирования элемента формы КонтактнаяИнформация.
//
Процедура КонтактнаяИнформацияПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
   
    ОМКонтактнаяИнформация.КонтактнаяИнформацияПередОкончаниемРедактированияОбщая(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ, мТекстТайпингаВидаКИ, мОбработкаТайпингаВидаКИ);
   
КонецПроцедуры

// Обработчик события ПриИзменении элемента формы КонтактнаяИнформация.Представление.
//
Процедура КонтактнаяИнформацияПредставлениеПриИзменении(Элемент)
   
    Если НЕ ЭлементыФормы.КонтактнаяИнформация.ТекущаяСтрока = Неопределено Тогда
        Если ЭлементыФормы.КонтактнаяИнформация.ТекущаяСтрока.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес  Тогда
            Если ПустаяСтрока(ЭлементыФормы.КонтактнаяИнформация.ТекущаяСтрока.Поле1) Тогда
                ЭлементыФормы.КонтактнаяИнформация.ТекущаяСтрока.Поле1 = Справочники.КлассификаторСтранМира.РОССИЯ.Наименование;
            КонецЕсли;   
        КонецЕсли;   
    КонецЕсли;

    ОМКонтактнаяИнформация.КонтактнаяИнформацияПредставлениеПриИзмененииОбщая(Элемент, ЭлементыФормы.КонтактнаяИнформация);
   
КонецПроцедуры

// Обработчик события Нажатие элемента формы КоманднаяПанельКонтактнойИнформации.УстановитьОсновным.
//
Процедура КоманднаяПанельКонтактнойИнформацииУстановитьОсновным(Кнопка)
   
    ОМКонтактнаяИнформация.УстановитьЗаписьОсновной(НаборКонтактнойИнформации, ЭлементыФормы.КонтактнаяИнформация, Кнопка);

    Если НЕ ЭлементыФормы.КонтактнаяИнформация.ТекущаяСтрока = Неопределено Тогда
        Если ЭлементыФормы.КонтактнаяИнформация.ТекущаяСтрока.ЗначениеПоУмолчанию Тогда
            ОсновнойКонтактнаяИнформация = ЭлементыФормы.КонтактнаяИнформация.ТекущаяСтрока.Представление;
        Иначе
            ОсновнойКонтактнаяИнформация = "";
        КонецЕсли;   
    КонецЕсли;
   
КонецПроцедуры

// Обработчик события ПриАктивизацииСтроки элемента формы КонтактнаяИнформация.
//
Процедура КонтактнаяИнформацияПриАктивизацииСтроки(Элемент)
   
    ОМКонтактнаяИнформация.КонтактнаяИнформацияПриАктивизацииСтрокиТаблицы(Элемент, ЭлементыФормы.КоманднаяПанельКонтактнойИнформации.Кнопки.УстановитьОсновным);
   
КонецПроцедуры

// Обработчик события ПриВыводеСтроки элемента формы КонтактнаяИнформация.
//
Процедура КонтактнаяИнформацияПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
   
    ОМКонтактнаяИнформация.КонтактнаяИнформацияСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки);
   
КонецПроцедуры

// Обработчик события ПередУдалением элемента формы КонтактнаяИнформация.
//
Процедура КонтактнаяИнформацияПередУдалением(Элемент, Отказ)

    ОМКонтактнаяИнформация.УдалитьЗаписьКонтактнойИнформации(Элемент, Отказ);
   
КонецПроцедуры

// Обработчик события ПередНачаломДобавления элемента формы КонтактнаяИнформация.
//
Процедура КонтактнаяИнформацияПередНачаломДобавления(Элемент, Отказ, Копирование)
   
    ОМКонтактнаяИнформация.КонтактнаяИнформацияПередНачаломДобавленияОбщее(Элемент, Отказ, Копирование, мКнопкаРедактироватьКИВДиалоге, ЭлементыФормы.КонтактнаяИнформация, НаборКонтактнойИнформации, Ложь, ЭтаФорма);
   
КонецПроцедуры

// Обработчик события ПередНачаломИзменения элемента формы КонтактнаяИнформация.
//
Процедура КонтактнаяИнформацияПередНачаломИзменения(Элемент, Отказ)
   
    ОМКонтактнаяИнформация.КонтактнаяИнформацияПередНачаломИзмененияОбщее(Элемент, Отказ, мКнопкаРедактироватьКИВДиалоге, Ложь, ЭтаФорма);
   
КонецПроцедуры

// Обработчик события ПриИзменении элемента формы КонтактнаяИнформация.Тип.
//
Процедура КонтактнаяИнформацияТипПриИзменении(Элемент)
   
    ОМКонтактнаяИнформация.КонтактнаяИнформацияТипПриИзмененииОбщее(Элемент, ЭлементыФормы.КонтактнаяИнформация);
   
КонецПроцедуры

Процедура ГоловнойКонтрагентДоговорНачалоВыбора(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ФормаВыбора = Справочники.ДоговорыКонтрагентов.ПолучитьФормуВыбора(, Элемент);
    ФормаВыбора.СправочникСписок.Отбор.Владелец.Значение               = ГоловнойКонтрагент;
    ФормаВыбора.СправочникСписок.Отбор.Владелец.Использование          = Истина;
    ФормаВыбора.СправочникСписок.Отбор.Владелец.ВидСравнения           = ВидСравнения.Равно;
   
    ФормаВыбора.Открыть();

КонецПроцедуры

Процедура ЯвляетсаНеРезидентомПриИзменении(Элемент)
    ПравовыеФормы = Справочники.КлассификаторОКОПФ.ПустаяСсылка();
    ЭлементыФормы.ПравовыеФормы.Доступность = Не ЯвляетсаНеРезидентом;
    //ОрганизационноПравовыеФормы = Перечисления.ОрганизационноПравовыеФормы.ПустаяСсылка();
    //ЭлементыФормы.ОрганизационноПравовыеФормы.Доступность = Не ЯвляетсаНеРезидентом;
КонецПроцедуры

Процедура ОрганизационноПравовыеФормыПриИзменении(Элемент)
    ИНННадпись();
КонецПроцедуры

Процедура ИНННадпись()
    //Если (ОрганизационноПравовыеФормы = Перечисления.ОрганизационноПравовыеФормы.ФизЛицоНеЗарегистр) И
    Если (ПравовыеФормы = Справочники.КлассификаторОКОПФ.ФизЛицоНеЗарегистр) И
        (ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо) Тогда
        ЭлементыФормы.Надпись60.Заголовок = "Лич Номер:";
    Иначе
        ЭлементыФормы.Надпись60.Заголовок = "ИНН:";
    КонецЕсли;   
   
КонецПроцедуры

Процедура КоманднаяПанельФормыПойскВреестр(Кнопка)
   
    Ответ = Истина;
   
    Если ЭтоНовый() Тогда
        Ответ = (Вопрос("элемент еще не записан, записать!", РежимДиалогаВопрос.ОКОтмена) = КодВозвратаДиалога.ОК);
       
        Если Ответ Тогда
            Отказ = НЕ ЗаписатьВФорме();
        Иначе
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;   
   
    Если Ответ Тогда
       
        ПредставлениеВреестре = МодульWSСсылки.ПолучитьПрокси_tax_dep_ge(ИНН);
       
        Если ТипЗнч(ПредставлениеВреестре) = Тип("Структура")  Тогда
            Если Не ЗначениеЗаполнено(ПредставлениеВреестре.Имя) Тогда
                Сообщить("Субъект с данным идентификационным кодом не найден в реестре предприятий");
                НайменованиеПоРеестру = "<не найден>";
            Иначе
                НайменованиеПоРеестру = ПредставлениеВреестре.Имя;
               
                ПрешиксНаим = "";
                Если Константы.ИспользоватьПрававуюФормуВНаимКонтрагента.Получить() = Истина Тогда
                    ТипОрганизаций = ПредставлениеВреестре.ТипОрганизаций;
                    Если ТипОрганизаций = "п\о\о" Тогда
                        ПрешиксНаим = ?(Найти(НайменованиеПоРеестру,"поо ")>0,"","поо ");
                    ИначеЕсли ТипОрганизаций = "индивидуальный предприниматель" Тогда
                        ПрешиксНаим = "им ";
                    ИначеЕсли ТипОрганизаций = "акционерная компания" Тогда
                        ПрешиксНаим = ""; //"СС";
                    ИначеЕсли ТипОрганизаций = "С\П\С" Тогда
                        ПрешиксНаим = "СПС ";
                    ИначеЕсли ТипОрганизаций = "товарищество с ограниченной ответственностью" Тогда
                        ПрешиксНаим = "КС ";   
                    КонецЕсли;
                КонецЕсли;
           
                Запрос = Новый Запрос;
                Запрос.Текст =
                "ВЫБРАТЬ
                |    КлассификаторОКОПФ.Ссылка
                |ИЗ
                |    Справочник.КлассификаторОКОПФ КАК КлассификаторОКОПФ
                |ГДЕ
                |    КлассификаторОКОПФ.НаименованиеПолное = &НаименованиеПолное";
                ТипОрганизаций = ?(ПредставлениеВреестре.ТипОрганизаций = "П\О\О","производство ограниченной ответственности",ПредставлениеВреестре.ТипОрганизаций);
                Запрос.УстановитьПараметр("НаименованиеПолное",ТипОрганизаций);
                Выборка = Запрос.Выполнить().Выбрать();
                Если Выборка.Следующий() Тогда
                    ПравовыеФормы = Выборка.Ссылка;
                Иначе
                    НовыйЭлемент = Справочники.КлассификаторОКОПФ.СоздатьЭлемент();                   
                    НовыйЭлемент.Код = НовыйКод(ПредставлениеВреестре.ТипОрганизаций);
                    //НовыйЭлемент.УстановитьНовыйКод();
                    НовыйЭлемент.Наименование       = ПредставлениеВреестре.ТипОрганизаций;
                    НовыйЭлемент.НаименованиеПолное = ТипОрганизаций;
                    НовыйЭлемент.Записать();
                    ПравовыеФормы = НовыйЭлемент.Ссылка;
                КонецЕсли;
               
                ЗаполнитьПолноеНайменование = Ложь;
                Если ЗначениеЗаполнено(НаименованиеПолное) И НаименованиеПолное <> (ПрешиксНаим + ПредставлениеВреестре.Имя) Тогда
                    ЗаполнитьПолноеНайменование = Вопрос("Полное наименование контрагента отличается от информации в коммерческом регистре.
                    |Вы хотите заменить его именем, указанным в торговом реестре?",РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да;
                ИначеЕсли Не ЗначениеЗаполнено(НаименованиеПолное) Тогда
                    ЗаполнитьПолноеНайменование = Истина;
                КонецЕсли;
               
                Если ЗаполнитьПолноеНайменование Тогда
                    НаименованиеПолное = ПрешиксНаим + ПредставлениеВреестре.Имя;
                КонецЕсли;
                Если Не ЗначениеЗаполнено(Наименование) Тогда
                    Наименование = НаименованиеПолное;
                КонецЕсли;
               
                НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
                НаборЗаписей.Отбор.Объект.Значение      = Ссылка;
                НаборЗаписей.Отбор.Объект.Использование = Истина;
                НаборЗаписей.Отбор.Вид.Значение          = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
                НаборЗаписей.Отбор.Вид.Использование     = Истина;
                НаборЗаписей.Прочитать();
                НаборЗаписей.Очистить();
                НоваяЗапись = НаборЗаписей.Добавить();
                НоваяЗапись.Объект = Ссылка;
                НоваяЗапись.тип    = Перечисления.ТипыКонтактнойИнформации.Адрес;
                НоваяЗапись.Вид    = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
                НоваяЗапись.Представление = ПредставлениеВреестре.Адрес;
                НаборЗаписей.Записать();
                ОМКонтактнаяИнформация.ПрочитатьКонтактнуюИнформацию(НаборКонтактнойИнформации, Ссылка);
            КонецЕсли;
           
        ИначеЕсли ТипЗнч(ПредставлениеВреестре) = Тип("Строка") Тогда
            Сообщить(ПредставлениеВреестре);
        КонецЕсли;
       
    КонецЕсли;
   
КонецПроцедуры

Функция НовыйКод(ТекстНаименованиеПолное)
   
    Макет = Справочники.КлассификаторОКОПФ.ПолучитьМакет("КлассификаторОКОПФ");   
   
    Для н=4 По 26 Цикл
        Если Макет.Область("R"+н+"C3").Текст = ТекстНаименованиеПолное Тогда
            Возврат Макет.Область("R"+н+"C2").Текст;
        КонецЕсли;   
    КонецЦикла;   
   
    Запрос = Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ
    |    КлассификаторОКОПФ.Код КАК Код
    |ИЗ
    |    Справочник.КлассификаторОКОПФ КАК КлассификаторОКОПФ
    |
    |УПОРЯДОЧИТЬ ПО
    |    Код УБЫВ";
    Выбор = Запрос.Выполнить().Выбрать();
    Пока Выбор.Следующий() Цикл
        Попытка
            Если Число(Выбор.Код) > 29 Тогда
                Возврат Строка(Число(Выбор.Код)+1);
            КонецЕсли;
        Исключение
        КонецПопытки;   
    КонецЦикла;   
   
    Возврат "30";
   
КонецФункции   

Процедура ПользовательСервисаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
   
    Таб = МодульCOMОбъекты.ПолучитьПользователейСервиса(ИНН);
    СписокПользователей = Новый СписокЗначений;
   
    Для Каждого СтрТаб Из Таб Цикл
        СписокПользователей.Добавить(Новый Структура("ИДПользователяСервиса,НазваниеПользователяСервиса",СтрТаб.ID,СтрТаб.NOTES),СтрТаб.NOTES + " (" + СтрТаб.ID + ")");
    КонецЦикла;
   
    ЭлементыФормы.ПользовательСервиса.СписокВыбора = СписокПользователей;
   
КонецПроцедуры

Процедура ПользовательСервисаПриИзменении(Элемент)
    Если ТипЗнч(Элемент.Значение) = Тип("Структура") Тогда
        ЗаполнитьЗначенияСвойств(ЭтотОбъект,Элемент.Значение);
    КонецЕсли;
КонецПроцедуры

Процедура ТерминалыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа)
        Отказ = НЕ ОМРаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);
КонецПроцедуры

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

мОбработкаТайпингаВидаКИ                 = Ложь;
мТекстТайпингаВидаКИ                     = "";
мПоследнееЗначениеЭлементаТайпингаВидаКИ = Неопределено;

ЭлементыФормы.ПанельЮрФизЛицо.Страницы.ФизЛицо.Видимость = Ложь;
ЭлементыФормы.ПанельЮрФизЛицо.Страницы.ЮрЛицо.Видимость = Истина;

ВидимостьПанелейЮрФизЛица();

мЖирныйШрифт  = Новый Шрифт(,, Истина);
мОбычныйШрифт = Новый Шрифт();
мСоздаватьОсновнойДоговор = ЭтоНовый();

АктВыборка = 0;


[b]модуля объекта[/b]


Перем мОснование;
Перем мПраваДоступаПользователей Экспорт;
Перем ГлЗащищеннаяОбработкаДок;


 Процедура ПроверитьДубли(ИНН) Экспорт
   
    ЕстьДублиИНН                 = Ложь;
   
    Если НЕ ГлЗащищеннаяОбработкаДок.VZUS_XRWD_CCDM_CZMK_XETH(ИНН) тогда
        ТекстЗапроса = "ВЫБРАТЬ ПРЕДСТАВЛЕНИЕ
                       |    Контрагенты.Ссылка КАК Контрагенты
                       |ИЗ
                       |    Справочник.Контрагенты КАК Контрагенты
                       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты1
                       |        ПО (Контрагенты.ИНН = &ИНН)
                       |ГДЕ
                       |    Контрагенты.Ссылка <> &Ссылка";
        ЗапросПоДублям     = Новый Запрос(ТекстЗапроса);
        ЗапросПоДублям.УстановитьПараметр("Ссылка",                 Ссылка);
        ЗапросПоДублям.УстановитьПараметр("ИНН",                     ИНН);
        РезультатЗапросаПоДублям     = ЗапросПоДублям.Выполнить();
        ВыборкаЗапроса                 = РезультатЗапросаПоДублям.Выбрать();
        Пока ВыборкаЗапроса.Следующий() Цикл
            Сообщить(ГлЗащищеннаяОбработкаДок.YQAU_RZNW_HVFH_UCZS_JBCX() + ВыборкаЗапроса.Контрагенты +ГлЗащищеннаяОбработкаДок.HVLE_ZBGA_DCCZ_ZKJY_BCCU()+Строка(Ссылка));
            ЕстьДублиИНН = Истина;
        КонецЦикла;
    КонецЕсли;
       
КонецПроцедуры

// Функция возвращает результат запроса по справочнику контрагентов с заданным головным контрагентом
//
// Параметры:
//  ГоловнойКонтрагент - заданный головной контрагент
//
// Возвращаемое значение:
//  Результат - результат работы запроса
//
Функция ПолучитьКонтрагентовПоЗаданномуГоловномуКонтрагенту(ГоловнойКонтрагент) Экспорт
   
    Запрос = Новый Запрос;
   
    Запрос.УстановитьПараметр("ГоловнойКонтрагент", ГоловнойКонтрагент);
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Контрагенты.Ссылка КАК Контрагент
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты
    |
    |ГДЕ
    |    Контрагенты.ГоловнойКонтрагент = &ГоловнойКонтрагент
    |   и Контрагенты.ГоловнойКонтрагент <> Контрагенты.Ссылка
    |УПОРЯДОЧИТЬ ПО
    |    Контрагент";
   
    Результат = Запрос.Выполнить();
   
    Возврат Результат;
   
КонецФункции // ПолучитьКонтрагентовПоЗаданномуГоловномуКонтрагенту()

////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ

// Обработчик события ПриКопировании
//
Процедура ПриКопировании(ОбъектКопирования)

    Если НЕ ЭтотОбъект.ЭтоГруппа Тогда
        ЭтотОбъект.ОсновнойДоговорКонтрагента = Неопределено;
        ЭтотОбъект.ОсновнойБанковскийСчет     = Справочники.БанковскиеСчета.ПустаяСсылка();
    КонецЕсли;

КонецПроцедуры

// Обработчик события ПередЗаписью
//
Процедура ПередЗаписью(Отказ)

    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    Если НЕ ГлЗащищеннаяОбработка.BWDN_ZCNN_UJAE_DIFU_FQEN(ГоловнойКонтрагент) И ГоловнойКонтрагент <> Ссылка Тогда

        Если Не ГлЗащищеннаяОбработка.KZDA_CFFT_QEHN_VCKX_WEEG(ГоловнойКонтрагент.ГоловнойКонтрагент) И ГоловнойКонтрагент.ГоловнойКонтрагент <> ГоловнойКонтрагент Тогда
            ОМОбщегоНазначения.СообщитьОбОшибке(ГлЗащищеннаяОбработка.VSWU_GBXI_WAAX_VVRK_HYYA()+СокрЛП(ГоловнойКонтрагент)+ГлЗащищеннаяОбработка.ZVHY_HHJC_XBZP_VHEF_UKMK()+СокрЛП(ГоловнойКонтрагент.ГоловнойКонтрагент)+"!");
            Отказ = Истина;
            Возврат;
        Иначе

            // надо проверить, что если указываем головного контрагента, то этот элемент уже не был установлен
            // в качестве головного у другого контрагента.
            ВыборкаПоГоловномуКонтрагенту = ПолучитьКонтрагентовПоЗаданномуГоловномуКонтрагенту(Ссылка).Выбрать();
            Если ВыборкаПоГоловномуКонтрагенту.Количество() <> 0 Тогда

                СообщениеОНевозможностиЗаписи = ГлЗащищеннаяОбработка.PFNS_QXUW_FFWX_WTEF_SZYR()+СокрЛП(ЭтотОбъект)+ГлЗащищеннаяОбработка.EWHD_SFWF_FYWK_SSUD_IYTS();
                Пока ВыборкаПоГоловномуКонтрагенту.Следующий() Цикл
                    СообщениеОНевозможностиЗаписи = СообщениеОНевозможностиЗаписи + Символы.ПС + СокрЛП(ВыборкаПоГоловномуКонтрагенту.Контрагент);
                КонецЦикла;

                ОМОбщегоНазначения.СообщитьОбОшибке(СообщениеОНевозможностиЗаписи);
                Отказ = Истина;
                Возврат;

            КонецЕсли;

        КонецЕсли;

    КонецЕсли;

    Запрос = Новый Запрос();
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.Текст = "ВЫБРАТЬ
    |    КонтактныеЛица.Ссылка КАК КонтЛицо
    |ИЗ
    |    Справочник.КонтактныеЛица КАК КонтактныеЛица
    |
    |ГДЕ
    |    КонтактныеЛица.ОбъектВладелец = &Ссылка";
    ВыборкаКонтЛиц = Запрос.Выполнить().Выбрать();

    Пока ВыборкаКонтЛиц.Следующий() Цикл

        КонтЛицо = ВыборкаКонтЛиц.КонтЛицо.ПолучитьОбъект();
        КонтЛицо.УстановитьПометкуУдаления(ПометкаУдаления);
        КонтЛицо.Записать();

    КонецЦикла;

КонецПроцедуры // ПередЗаписью()

// Процедура - обработчик события "ОбработкаЗаполнения".
//
Процедура ОбработкаЗаполнения(Основание)

    Если Основание = Неопределено Тогда
        Возврат;
    КонецЕсли;
   
    Если ТипЗнч(Основание) = Тип("СправочникСсылка.Организации") Тогда

        Наименование           = Основание.Наименование;
        ЮрФизЛицо              = Перечисления.ЮрФизЛицо.ЮрЛицо;
        ГлЗащищеннаяОбработка.DDKY_ZJFE_WBXN_SZAK_MRIP();
        НаименованиеПолное     = Основание.НаименованиеПолное;
        ОсновнойБанковскийСчет = Основание.ОсновнойБанковскийСчет;
        ИНН                    = Основание.ИНН;
        КПП                    = Основание.КПП;
        КодПоОКПО              = Основание.КодПоОКПО;
        мОснование             = Основание;

    КонецЕсли;

КонецПроцедуры // ОбработкаЗаполнения()

Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)
    ОМОбщегоНазначения.ДобавитьПрефиксУзла(Префикс);
КонецПроцедуры

Процедура ПриЗаписи(Отказ)
   
    Если НЕ ОбменДанными.Загрузка Тогда
       
        ОМНастройкаПравДоступа.ЗаполнитьНаборПравамиДоступаУнаследованымиОтРодителя(мПраваДоступаПользователей, Родитель, Ссылка);
       
        НеобходимоПереписыватьПодчиненных = ОМНастройкаПравДоступа.ПроверитьНеобходимостьПереписыватьПраваДоступаДляПодчиненныхЭлементов(Ссылка, мПраваДоступаПользователей);
       
        ОМНастройкаПравДоступа.ЗаписатьПраваДоступаКОбъекту(мПраваДоступаПользователей, Ссылка, Отказ);
       
        Если НеобходимоПереписыватьПодчиненных И НЕ Отказ Тогда
            ОМНастройкаПравДоступа.УстановитьПраваДоступаДляПодчиненныхЭлементов(Ссылка, ЭтотОбъект.Метаданные().Имя, Отказ);
        КонецЕсли;
       
       
    КонецЕсли;
   
КонецПроцедуры

мПраваДоступаПользователей = РегистрыСведений.ПраваДоступаПользователей.СоздатьНаборЗаписей();
Если НЕ Ссылка.Пустая() Тогда
    ОМНастройкаПравДоступа.ПрочитатьПраваДоступаКОбъекту(мПраваДоступаПользователей, Ссылка);
КонецЕсли;



спасибо заранее.

Максим75

В предопределенной процедуре ПриЗаписи (или ПриЗаписиНаСерврере если управляемая форма) для нового элемента (ЭтоНовый() есть такая функция) ищешь в справочнике по реквизиту ИНН. Если находить ссылку на справочник - то уже такой есть, тогда в процедуре ПриЗаписи(Отказ делаешь истиной). Могу ошибаться на предмет того, что это все можно проделать в процедуре Передзаписью (там тоже есть Отказ).
Ну короче говоря для нового ищешь в справочнике по реквизиту, находишь - тогда отказываеться от записи и выводишь сообщение.

giorgi wiklauri

Цитата: Максим75 от 29 дек 2022, 14:40Ну короче говоря "для нового ищешь в справочнике по реквизиту", находишь - тогда отказываеться от записи и выводишь сообщение.


Можешь написать мне конкретный код?

Спасибо

giorgi wiklauri

я так сделал: процедуре Передзаписью

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

Но это работает только для того контрагента, который у меня открыт, а не для полного списка контрагентов.

Максим75

в процедуре ПередЗаписью(Отказ)

Если ЭтоНовый() тогда - проверка, что это записывается новый элемент справочника, уже существующий то зачем проверять

   НайденнаяСсылка = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН",
                                           ИНН);
    Если НайденнаяСсылка <> Справочники.КОнтрагенты.ПустаяСсылка() Тогда
        Сообщить("Уже есть такой контрагент");
        Отказ = Истина;
    КонецЕсли;
КонецЕсли;
здесь КОнтрагенты - справочник с контрагентами / покупателями, возможно он в твоей конфе называется по другому,
"ИНН" реквизит справочника с котрагентами, может называться по другому,

как то так...

LexaK

Максим75, хм, ну вы даете  ;)

а теперь представьте что вы открыли старый элемент справочника для редактирования, например исправить ошибку в наименовании или еще что,
и ваша проверка, не даст его записать в базу, после исправления!  :xfbnsdfb:
если помогло нажмите: Спасибо!

giorgi wiklauri

Максим75

Спасибо, это именно то, что я хотел

giorgi wiklauri

Цитата: LexaK от 29 дек 2022, 15:36Максим75, хм, ну вы даете  ;)

а теперь представьте что вы открыли старый элемент справочника для редактирования, например исправить ошибку в наименовании или еще что,
и ваша проверка, не даст его записать в базу, после исправления!  :xfbnsdfb:

Это действительно правильное замечаниеВот почему я думаю, что я настрою это ограничение на роль пользователя. Например, только администратор не должен трогать это ограничение.
Если есть другая лучшая альтернатива?

Спасибо

Максим75

LexaK, ЭтоНовый() отрабатывает только один раз при записи нового, а не при изменении уже существующего.
поэтому и отработает только для нового.

LexaK

Максим75, но это не решает проверки дублей!
т.е. если не новый то проверка вообще не выполняется?
можно взять старого контрагента и изменить ему ИНН на уже существующий у другого?
и так как это не новый, проверки не будет!


если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск