Имя: Пароль:
1C
1С v8
Проверка уникальности элементов справочника
0 amadeus2010
 
10.08.12
09:15
Доброе утро всем. Хочу посоветоваться вот по такому вопросу. Создал обработку по загрузке списка контрагентов из эксель в справочник Контрагенты УПП 1.2. Теперь как сделать проверку уникальности загруженных элементов справочника.Т.е чтобы дважды не был записан один и тот же контрагент с одинаковыми данными. Поставить такую проверку как Если Не ЗначениеЗаполнено(Контрагент) Тогда....., но это только проверяетпустое или нет данное поле справочника, а как сделать проверку чтобы если Контрагент Петров уже записан тогда выдать соообщение что этот Контрагент есть в справочнике и не будет повторно записан? Потому что у нас пользователи могут один и тот же файл или контрагента находящегося в файле под другим именем загнать в базу несколько раз
1 shuhard
 
10.08.12
09:16
(0) что-то мешает открыть помощник создания контрагентов и посмотреть как надо делать на самом деле ?
2 Живой Ископаемый
 
10.08.12
09:21
элементы любого справочника уникальны, гарантирую это
3 Maxus43
 
10.08.12
09:22
ну и задай вопрос - что у контрагента уникально? не наименование, не адрес даже. По ИНН+КПП можно контролить
4 shuhard
 
10.08.12
09:23
(3) угу
мало того
в УПП есть готовая обработка
5 pessok
 
10.08.12
09:24
обычно на собеседованиях, где предлагают работать за еду, задают такой вопрос :) (3) все правильно сказал, вот только КПП не надо.
6 Maxus43
 
10.08.12
09:26
ИНН+КПП - контрагенты
ИНН - контрагенты с типом физлицо.
так надёжней
7 Нуф-Нуф
 
10.08.12
09:27
каждый элемент справочника уникален сам по себе. это закон
8 amadeus2010
 
10.08.12
09:28
вопрос в том чтобы при запуске обработки исключить дублирующие записи. Ведь эту оббработку можно применить  и для загрузки других справочников. Вот к примеру создал собственный справочник  с определенными элементами, запустил обработку и два раза одни и те же элементы записались  в справочник.
9 Fish
 
10.08.12
09:28
(5) Очень даже надо, т.к. есть контрагенты с одинаковым ИНН, но разным КПП :))
10 Maxus43
 
10.08.12
09:29
(8) универсального способа нет, правила контроля вытекают из назначения справочника, его ключевых полей
11 pessok
 
10.08.12
09:33
(9) что??? это как? холдинг, находящийся по разным адресам ИФНС? так там и ИНН будет разный...
12 Fish
 
10.08.12
09:37
(11) Обособленные подразделения. ИНН один, а КПП разный.
13 amadeus2010
 
10.08.12
09:38
Если быть конкретнее не типовую УПП объединили с Агент Плюс, в котром есть справочник торговые точки. В этом справочнике есть поля контрагент, адрес,телефон и т.д Создал обработку по загрузке контрагентов из эксель в этот справочник.Если запустить обработку дважды то один и тот же контрагент записывается  в справочник со своими полями, а этого допустить нельзя. Вот исходный код
////////////////////////////////////////////////////////////////////
           
           ТорговыеТочки=Справочники.кпкТорговыеТочки.СоздатьЭлемент();
           ТорговыеТочки.Агент=Справочники.ФизическиеЛица.НайтиПоНаименованию(Строка.Ордертейкер);
           ТорговыеТочки.Адрес=Строка.Адрес;
           ТорговыеТочки.Телефоны=Строка.Телефон;
           ТорговыеТочки.Владелец=Контр.Ссылка;
           ТорговыеТочки.НаименованиеПолное=Контр.Ссылка;
           ТорговыеТочки.Наименование=Строка.КодФилиала + "  " + Строка.НаименованиеФилиал;
           ТорговыеТочки.КодФилиала=Строка.КодФилиала;
           ТорговыеТочки.Регион=?(ПустаяСтрока(Строка.Зона), Справочники.Регионы.ПустаяСсылка(), Справочники.Регионы.НайтиПоНаименованию(Строка.Зона));
           ТорговыеТочки.Записать();
//////////////////////////////////////////////////////////////////////
Если добавить Если Не ЗначениеЗаполнено(ТорговыеТочки.Агент) Тогда.... то просто будет проверка на заполнен или нет этот элемент.А как в этом коде исключить проверкой дублирующиеся записи?
14 pessok
 
10.08.12
09:42
(12) хм, хм... а из каких соображений там разных КПП идет?
15 amadeus2010
 
10.08.12
09:50
можете что-нибудь посоветовать исходя из кода?
16 Fish
 
10.08.12
09:52
(14) Не изучал досконально этот вопрос. Но бывают филиалы - у них ИНН головной организации, а названия и КПП - разные.
17 hhhh
 
10.08.12
09:54
(14) например РЖД (железная дорога), у них тысяча отделений и все с одним ИНН. Только КПП разные.
18 amadeus2010
 
10.08.12
09:59
может что-то конкретное по вопросу можете подсказать,а не устраивать междусобойчик?
19 hhhh
 
10.08.12
10:04
(18) ну уже ведь всё подсказали, вытаскиваешь обработку из УПП или УТ и вставляешь к себе.

А насчет Петрова - это ты бредишь, такая проверка не нужна. Ведь на самом деле может быть в жизни два Петрова и даже три и все контрагенты вашей фирмы.
20 ВотЭтоДа
 
10.08.12
10:09
Если у контрагента все реквизиту стопудово заполняются, то ИНН+КПП. И лучше тогда брать последнее наименование контрагента, скорее всего оно более точное
21 amadeus2010
 
10.08.12
10:17
(19)насчет Петрова это просто пример, но у компании есть контрагенты с уникальным наименованием, кодом, которых не может быть два.Кстати а как называется обработка?
22 pessok
 
10.08.12
10:20
(17) не знал, если честно, что КПП у них разные. Спасибо за науку :)
(21) ты не поверишь... в (1) написано
23 Fish
 
10.08.12
10:21
ТС явно путается в показаниях. В (13) он заявляет: "один и тот же контрагент записывается  в справочник со своими полями". При этом приводит код, в котором контагентами и не пахнет :)) ИМХО тема вопроса не раскрыта.
24 amadeus2010
 
10.08.12
10:34
(23) Контрагент=Владелец. Хочу исключить дубль записей в справочник
25 Fish
 
10.08.12
10:36
(24) В какой именно справочник? В твоём коде Владелец=Контр.Ссылка. Сам контр нигде не создаётся.
26 ВотЭтоДа
 
10.08.12
10:43
(13)Отбираешь записи по владельцу контрагенту, а потом смотришь есть ли там такой агент
27 amadeus2010
 
10.08.12
11:02
(25) в (13) Справочник ТорговыеТочки
28 Fish
 
10.08.12
11:07
(27) Тогда всё просто. Сначала смотришь, есть ли уже торговая точка с такими же реквизитами и владельцем, и создаёшь новую только в том случае, если нету.
29 amadeus2010
 
10.08.12
11:10
(28) об этом и спрашиваю, как сделать проверку, подскажите плз.
30 Fish
 
10.08.12
11:12
(29) Как угодно, например запросом.
31 acsent
 
10.08.12
11:13
(3) инн+кпп тоже не всегда уникальны: например офис один, а точек несколько
32 FIXXXL
 
10.08.12
11:14
(29) поищи в конфе Обработки.ПоискИЗаменаДублирующихсяЭлементов.Создать()
33 amadeus2010
 
10.08.12
12:01
(32) кажется понял что вы говорит е надо добавить в обработку в процедуру ПередЗаписью() это кусок кода
///////////////////////////////////////////////////////
       ПоискДублей       = Обработки.ПоискИЗаменаДублирующихсяЭлементов.Создать();
       СтруктураПоиска = Новый Структура("Код,ИНН,Наименование,НаименованиеПолное,КодОракл",Неопределено,"=","=","=");
       НайденныеОбъекты  = ПоискДублей.НайтиДубли(ЭтотОбъект,СтруктураПоиска);
           
       Если НайденныеОбъекты.Количество() > 0 Тогда
           ФормаПоискаДублей = ПоискДублей.ПолучитьФорму("ФормаПоиска", ЭтаФорма);
           ФормаПоискаДублей.НайденныеОбъекты = НайденныеОбъекты;
           Результат = ФормаПоискаДублей.ОткрытьМодально();
           Если  Результат = Неопределено Тогда
                   
               Отказ = Истина;
                   
           ИначеЕсли Не Результат = Истина Тогда
                   
               Отказ = Истина;
               ОповеститьОЗаписиНовогоОбъекта(Результат);
               Модифицированность = Ложь;
               Если ЭтаФорма.Открыта() Тогда
                   Закрыть();
               КонецЕсли;
                   
           КонецЕсли;
               
       КонецЕсли;
       
   КонецЕсли;
///////////////////////////////////////////////////////////
и будет счастье ход мыслей правильный?
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс