Имя: Пароль:
1C
1C 7.7
v7: Создание нового элемента справочника
0 sung82
 
25.09.11
22:01
При обработки текстового файла, создаю справочник "Сотрудники". Первый раз проверяю по коду, если такого кода нет, то создаю новый элемент справочника. Но дело в том, что  под одним кодом может быть несколько сотрудников, которые в свою очередь могут относиться к разным подразделениям. У мня не получается проверить справочник, убедиться в том что под данным кодом еще не создан элемент справочника для данной фамилии и создать элемент справочника для данной фамилии. Также при последующих загрузках не должен дублироваться элемент справочника. Подскажите как лучше сделать данную обработку.
1 GROOVY
 
25.09.11
22:02
Ну так проверяй не только по коду, а еще по фамилии и подразделению. Вопрос не понятен.
2 Cthulhu
 
25.09.11
22:21
по владельцу м.б.
3 Эльниньо
 
25.09.11
22:22
Уникальность кодов в пределах подчинения. Сверяй по полному коду.
4 sung82
 
25.09.11
22:29
Написал
Если Код<> 0 Тогда                
           Если  (Спр.НайтиПоКоду(Код) = 0)  Тогда                    
               Спр.Новый();
               Спр.Наименование = Наименование;
               Спр.КодСпрПодразделения=ПодразделениеЗагр;
               Спр.Код=Код;
           ИначеЕсли  (Спр.НайтиПоКоду(Код) = 1)и(Спр.ТекущийЭлемент().КодСпрПодразделения <> ПодразделениеЗагр) Тогда                
               Спр.Новый();
               Спр.Наименование = Наименование;
               Спр.КодСпрПодразделения=ПодразделениеЗагр;
               Спр.Код=Код;                                                            
           КонецЕсли;
           
           Спр.Записать();                                            
       КонецЕсли;    

При повторной загрузке создает новй элемент справочника. Хотя мне он уже не нуже. Что сделал не так?
5 TeddySlaf
 
25.09.11
22:54
Как-то плохая структура хранения у тебя в конфигурации.
1) Либо контроля уникальности кодов у сотрудника нет.
Если так, то не получится у тебя по коду найти нужного, используя лишь НайтиПоКоду().
2) Либо, что хуже, в конфе справочник Сотрудники подчинен какому-то другому с уникальностью кодов в пределах подчинения.
Тогда надо сначала найтиПоКоду() подразделение по коду, а уже потом искать в Справочнике после применения метода ИспользоватьВладельца() поиск по коду Сотрудника.

Как-то так.
или тупо как в (1), например, перебором.
6 sung82
 
25.09.11
23:37
Дело в том, что из старой досовской программы выгружается список на зачисление з/п на карточки в текстовом формате. И так сформировалась база, что под одним таб. номером, но в разных подразделениях могут быть разные люди. Если я первый раз проверяю по таб. номеру и подразделению, то (Спр.НайтиПоКоду(Код) = 0) равно 0 и (Спр.ТекущийЭлемент().КодСпрПодразделения <> ПодразделениеЗагр) не равно подразделению из файла загрузки. И Создаю новый элемент справочника. Но если в справочнике уже существует сотрудник с таб. номером, который загружается из из файла, но с другим подразделением, то справочник не создается. Что делать?
7 73с
 
25.09.11
23:47
(6) А он просто не создается или при записи вылетает ошибка ?
А уникальность в справочнике какова ?
8 73с
 
25.09.11
23:50
А если так?
ИначеЕсли  (Спр.ТекущийЭлемент().КодСпрПодразделения <> ПодразделениеЗагр) Тогда
9 sung82
 
25.09.11
23:54
Контроль уникальности отключен. Если он будет включен, то как можно создать два элемента справочника с однаковым кодом в одной группе?
10 73с
 
25.09.11
23:59
А что (8) ?
В Вашем варианте после ИначеЕсли не второй ли раз происходит поиск по коду ? Поэтому и не создаёт...
11 only82
 
26.09.11
00:15
Используй запрос с тремя параметрами: код, наименование, подразделение. Если результат запроса - пустой, то создавай новый элемент.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.