|   |   | 
| 
 | v8: Удаление контрагентов | ☑ | ||
|---|---|---|---|---|
| 0
    
        DmitriyMaxion 07.10.13✎ 14:51 | 
        Добрый день, поставленна здача почистить справочники контрагентов.
 Как проверить есть ли ссылка на этого контрагента где нибудь. Встречается ли он в каких либо документах | |||
| 1
    
        mikecool 07.10.13✎ 14:52 | 
        пометить на удаление все, удалить, что осталось - есть ссылки     | |||
| 2
    
        butterbean 07.10.13✎ 14:52 | 
        Операции - Поиск ссылок на объект     | |||
| 3
    
        DmitriyMaxion 07.10.13✎ 14:54 | 
        Спасибо)     | |||
| 4
    
        ДенисЧ 07.10.13✎ 14:54 | 
        НайтиПоСсылкам()     | |||
| 5
    
        DmitriyMaxion 07.10.13✎ 14:57 | 
        т.е. если не выдает ссылку значит этот контрагент нигде не используется???     | |||
| 6
    
        ДенисЧ 07.10.13✎ 14:58 | 
        (5) Ты гений! :-))     | |||
| 7
    
        DmitriyMaxion 07.10.13✎ 15:00 | 
        Умник)     | |||
| 8
    
        ДенисЧ 07.10.13✎ 15:01 | 
        (7) Ладно, не гений, а просто умник :-)
 Я согласен | |||
| 9
    
        MSII 07.10.13✎ 15:03 | 
        ЧСВ задающего вопрос на Мисте обратно пропорционально сложности задаваемого вопроса. :)     | |||
| 10
    
        Нуф-Нуф 07.10.13✎ 15:04 | 
        (9) интересное наблюдение )))) +100500     | |||
| 11
    
        DmitriyMaxion 07.10.13✎ 15:18 | 
        У меня получается что на помеченные на удаление контрагенты много чего ссылается, их нельзя удалить, что делать?)))     | |||
| 12
    
        ДенисЧ 07.10.13✎ 15:21 | 
        (11) Не удалять...     | |||
| 13
    
        DmitriyMaxion 07.10.13✎ 15:40 | 
        Логично! =)) Тогда вообще ничег нельзя удлись, а задача стоит удалить ненужных контрагентов     | |||
| 14
    
        Laerys 07.10.13✎ 15:42 | 
        (13) настрой отображение списка по отбору и все, удалять вообще вредно)     | |||
| 15
    
        rbcvg 07.10.13✎ 15:42 | 
        (13) значит все контрагенты нужные.     | |||
| 16
    
        El_Duke гуру 07.10.13✎ 15:42 | 
        (13) А у тебя нет ненужных в данном случае.Задача решена     | |||
| 17
    
        DmitriyMaxion 07.10.13✎ 15:43 | 
        Удалять нужно потому что переходим на 3.0 чтобы "мусор" не тянуть за собой...     | |||
| 18
    
        rbcvg 07.10.13✎ 15:44 | 
        (17) что есть "мусор"?     | |||
| 19
    
        El_Duke гуру 07.10.13✎ 15:44 | 
        (17) тогда перенесите только остатки
 ненужное не перенесется | |||
| 20
    
        DmitriyMaxion 07.10.13✎ 15:50 | 
        Мусор - помеченные на удаление и дубликаты....     | |||
| 21
    
        El_Duke гуру 07.10.13✎ 15:51 | 
        (20) Ответ тебе уже дали.Тему будем продолжать ?     | |||
| 22
    
        DmitriyMaxion 07.10.13✎ 15:52 | 
        Будем..., как удалить эти объекты?     | |||
| 23
    
        El_Duke гуру 07.10.13✎ 15:53 | 
        (22) Никак.
 На них есть ссылки в базе. Далее продолжаем ? | |||
| 24
    
        DmitriyMaxion 07.10.13✎ 15:54 | 
        НЕТ!     | |||
| 25
    
        DmitriyMaxion 07.10.13✎ 15:55 | 
        Спасибо, зо своевременную помощь!     | |||
| 26
    
        El_Duke гуру 07.10.13✎ 15:59 | 
        (25) Твой единственный выход почистить базу описан в (19)     | |||
| 27
    
        shlyahtich 07.10.13✎ 16:03 | 
        дарю
 вот подписка не событие для справочника Процедура ПередЗаписьюСправочникаКонтрагенты(Источник, Отказ) Экспорт Если Источник.ОбменДанными.Загрузка Тогда Если Метаданные.Имя = "БухгалтерияПредприятия_БИТ_ФИНАНС" Тогда Если ТипЗнч(Источник.ОбменДанными.Отправитель) = Тип("ПланОбменаСсылка.БИТ_КС_ЗагрузкаРСБУ") Тогда Возврат; // при загрузке (Был дубль контрагента. Остатки по нему перенесли, поставили пометку на удаление. Ошибочно сняли пометку на удаление. Поставить пометку обратно я уже не могу, т.к. есть проведенные документы. КонецЕсли; КонецЕсли; Если НЕ (ПланыОбмена.ГлавныйУзел() = Неопределено) Тогда Возврат; // при загрузке в подчиненный узел не проверяем (Был дубль контрагента. Остатки по нему перенесли, поставили пометку на удаление. Ошибочно сняли пометку на удаление. Поставить пометку обратно я уже не могу, т.к. есть проведенные документы. КонецЕсли; КонецЕсли; //Проверка на то что контрагент есть в проведенных документах Если Источник.ПометкаУдаления Тогда СписокДок = Метаданные.ПодпискиНаСобытия.ПередЗаписьюДокументаЗапретНаРеквизитКонтрагентСПометкойУдаления.Источник.Типы(); ТекстЗапросаРез="ВЫБРАТЬ СУММА(ВложенныйЗапрос.Ссылка) КАК Ссылка ИЗ ("; Для Ном = 0 по СписокДок.Количество()-1 Цикл ДокОбъект=Метаданные.НайтиПоТипу(СписокДок[Ном]).ПолноеИмя(); Если ОбщегоНазначения.ЕстьРеквизитОбъектаМетаданных("Контрагент",ДокОбъект) Тогда ТекстЗапроса= "ВЫБРАТЬ КОЛИЧЕСТВО("+ДокОбъект+".Ссылка) ИЗ "+ДокОбъект+" ГДЕ "+ДокОбъект+".Проведен = ИСТИНА И "+ДокОбъект+".Контрагент = &Контрагент"+Символы.ПС; ТекстЗапросаРез = ТекстЗапросаРез+" "+ТекстЗапроса; ТекстЗапросаРез = ТекстЗапросаРез + " ОБЪЕДИНИТЬ "; КонецЕсли; КонецЦикла; ТекстЗапросаРез = Лев(ТекстЗапросаРез, СтрДлина(ТекстЗапросаРез)-12); ТекстЗапросаРез = ТекстЗапросаРез + ") КАК ВложенныйЗапрос"; Запрос = Новый Запрос(); Запрос.Текст = ТекстЗапросаРез; Запрос.УстановитьПараметр("Контрагент",Источник.Ссылка); Результат = Запрос.Выполнить().Выгрузить(); Если Результат[0].Ссылка>0 тогда #Если Клиент Тогда Ответ = Вопрос("Пометка на удаление контрагента запрещена, | так как есть проведенные документы с "+Источник+" | Продолжить?", РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Нет); Если Не Ответ = КодВозвратаДиалога.Да Тогда Отказ = ИСТИНА; КонецЕсли; #КонецЕсли КонецЕсли; КонецЕсли; //Проверка существующего контрагента с такими же ИНН и КПП Если Источник.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо И Лев(Источник.Комментарий, 8) <> "Ин.Фирма" И Источник.ПометкаУдаления = Ложь Тогда Если СтрДлина(СокрЛП(Источник.ИНН)) <> 10 ИЛИ СтрДлина(СокрЛП(Источник.КПП)) <> 9 Тогда ОбщегоНазначения.СообщитьОбОшибке("У контрагента не корректный ИНН или КПП. Элемент не записан."); Отказ = Истина; КонецЕсли; ЗапросК = Новый Запрос; ЗапросК.УстановитьПараметр("ИНН", Источник.ИНН); ЗапросК.УстановитьПараметр("КПП", Источник.КПП); ЗапросК.УстановитьПараметр("Ссылка", Источник.Ссылка); ЗапросК.УстановитьПараметр("ПометкаУдаления", Ложь); ЗапросК.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка, | Контрагенты.ИНН, | Контрагенты.КПП, | Контрагенты.Наименование |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.ИНН = &ИНН | И Контрагенты.КПП = &КПП | И Контрагенты.Ссылка <> &Ссылка | И Контрагенты.ПометкаУдаления = &ПометкаУдаления" ; РезультатК = ЗапросК.Выполнить().Выбрать(); Если РезультатК.Количество() > 0 Тогда РезультатК.Следующий(); ОбщегоНазначения.СообщитьОбОшибке("В базе уже существует контрагент <" + РезультатК.Наименование + ">с такими же ИНН = " + РезультатК.ИНН + " и КПП = " + РезультатК.КПП,, "Элемент не записан."); Отказ = Истина; КонецЕсли; КонецЕсли; КонецПроцедуры | |||
| 28
    
        shlyahtich 07.10.13✎ 16:03 | 
        //Проверка на то что контрагент есть в проведенных документах  в тексте     | |||
| 29
    
        Кай066 07.10.13✎ 16:04 | 
        (20) Для удаления дублей есть специальная обработка ПоискИЗаменаДублирующихсяЭлементов.epf     | |||
| 30
    
        shlyahtich 07.10.13✎ 16:06 | 
        а это вдогонку в базу - на будущее
 Процедура ПередЗаписьюДокументовПроверкаНаРеквизитКонтрагентСПометкойНаУдаление(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт Если ОбщегоНазначения.ЕстьРеквизитОбъекта("Контрагент",Источник) И ЗначениеЗаполнено(Источник.Контрагент) Тогда #Если Клиент Тогда Если Источник.Контрагент.ПометкаУдаления И Источник.ОбменДанными.Загрузка=Ложь Тогда Отказ = Истина; Сообщить("Проведение и запись документов с контрагентом, помеченными на удаление запрещено."+Символы.ПС+" Код: "+Источник.Контрагент.Код+"; Наименование: "+Источник.Контрагент+" "+Символы.ПС+"Изменения в "+Источник+" не могут быть записаны...", СтатусСообщения.Важное); КонецЕсли; #КонецЕсли КонецЕсли; КонецПроцедуры | |||
| 31
    
        El_Duke гуру 07.10.13✎ 16:06 | 
        (29) В его руках эта вещь может быть опасной     | |||
| 32
    
        catena 07.10.13✎ 16:07 | 
        СправочникОбъект.<Имя справочника>.Удалить (CatalogObject.<Имя справочника>.Delete)
 СправочникОбъект.<Имя справочника> (CatalogObject.<Имя справочника>) Удалить (Delete) Синтаксис: Удалить() Описание: Удаляет элемент справочника из базы данных. Важно! В отличие от метода УстановитьПометкуУдаления, данный производит непосредственное удаление элемента справочника без возможности восстановления и без проверки ссылочной целостности. Использовать данный метод нужно крайне осмотрительно. Пример: Объект.Удалить(); | |||
| 33
    
        Кай066 07.10.13✎ 16:08 | 
        (31) а эти портянки ^ он куда будет наматывать? Пройтись разок по ИНН и норм     | |||
| 34
    
        shlyahtich 07.10.13✎ 16:09 | 
        Пишешшь обработку вставляя туда данный код
 СписокДок = Метаданные.ПодпискиНаСобытия.ПередЗаписьюДокументаЗапретНаРеквизитКонтрагентСПометкойУдаления.Источник.Типы(); ТекстЗапросаРез="ВЫБРАТЬ СУММА(ВложенныйЗапрос.Ссылка) КАК Ссылка ИЗ ("; Для Ном = 0 по СписокДок.Количество()-1 Цикл ДокОбъект=Метаданные.НайтиПоТипу(СписокДок[Ном]).ПолноеИмя(); Если ОбщегоНазначения.ЕстьРеквизитОбъектаМетаданных("Контрагент",ДокОбъект) Тогда ТекстЗапроса= "ВЫБРАТЬ КОЛИЧЕСТВО("+ДокОбъект+".Ссылка) ИЗ "+ДокОбъект+" ГДЕ "+ДокОбъект+".Проведен = ИСТИНА И "+ДокОбъект+".Контрагент = &Контрагент"+Символы.ПС; ТекстЗапросаРез = ТекстЗапросаРез+" "+ТекстЗапроса; ТекстЗапросаРез = ТекстЗапросаРез + " ОБЪЕДИНИТЬ "; КонецЕсли; КонецЦикла; ТекстЗапросаРез = Лев(ТекстЗапросаРез, СтрДлина(ТекстЗапросаРез)-12); ТекстЗапросаРез = ТекстЗапросаРез + ") КАК ВложенныйЗапрос"; Запрос = Новый Запрос(); Запрос.Текст = ТекстЗапросаРез; Запрос.УстановитьПараметр("Контрагент",Источник.Ссылка); Результат = Запрос.Выполнить().Выгрузить(); Если Результат[0].Ссылка>0 тогда И если Если НЕ Результат[0].Ссылка>0 тогда вставляй непосредственное удаление справочника | |||
| 35
    
        shlyahtich 07.10.13✎ 16:09 | 
        первую строчку чуток переделать     | |||
| 36
    
        El_Duke гуру 07.10.13✎ 16:13 | 
        (33) это вопрос задай автору портянок, мне чего его задаешь ?     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |