Имя: Пароль:
1C
1C 7.7
v7: Подчинение справочника
,
0 MagicFly
 
08.10.14
13:47
Добрый день))
Есть справочник контрагентов, у каждого контрагента есть несколько контактных лиц. Справочник контактных лиц подчинен справочнику контрагентов. Как можно сделать выборку по контактному лицу и к какому контрагенту он относится, т.к. бывают случаи, что одно КЛ может относится к нескольким контрагентам (т.е. повторяться).
1 Banned
 
08.10.14
13:47
Предлагаю использовать запрос.
2 MagicFly
 
08.10.14
13:48
Т.е. надо выборку вида Контактное лицо - Контрагент1, Контрагент2,...
3 КонецЦикла
 
08.10.14
13:49
Ну так и выбирай просто КонтЛицо.ВыбратьЭлементы(0);
КонтЛицо.Владелец - будет контрагент
4 vicof
 
08.10.14
13:50
(2) Предлагаю использовать запрос
5 anatoly
 
08.10.14
13:50
разве в подчиненном справочнике может быть >1 владельца??
или в клюшках так можно?
или КЛ просто дубли?
6 palpetrovich
 
08.10.14
13:50
так не?
КонтЛицо.ВыбратьЭлементы(0)
сообщить(""+КонтЛицо.Владелец)
7 palpetrovich
 
08.10.14
13:51
(5) не, они просто будут "похожи" :)
8 Ёпрст
 
08.10.14
13:51
(0) речь про снеговик ?
в клюшках владелец всегда ОДИН.
9 1dvd
 
08.10.14
13:52
(8) а в снеговике может быть больше?
10 Chai Nic
 
08.10.14
13:53
"т.к. бывают случаи, что одно КЛ может относится к нескольким контрагентам (т.е. повторяться)."
1. Создаешь справочник "Контактные лица".
2. Создаешь справочник "Контактные лица контрагентов", делаешь его подчиненным справочнику "Контрагенты". Добавляешь в него реквизит-ссылку на справочник "Контактные лица", со включенным отбором по этому реквизиту.
11 palpetrovich
 
08.10.14
14:07
(0) вообще, как уже говорилось в (1), все решается банальным:
    ТекстЗапроса = "
    |КонтактноеЛицо = Справочник.КонтактныеЛица.Наименование;
    |Контрагент = Справочник.КонтактныеЛица.Владелец;
    |Группировка КонтактноеЛицо;
    |Группировка Контрагент";
если Наименования "одних и тех-же контактов" - одинаковы конечно :)
12 Ёпрст
 
08.10.14
14:09
(9) да, с разных видов справочника
13 vicof
 
08.10.14
14:14
(12) Видов владельцев может быть больше, а владелец - один.
14 Ёпрст
 
08.10.14
14:17
(13) ну да, так и есть, поле то одно
15 lavalit
 
08.10.14
14:55
Как вариант.Наподобие как с ОКЕИ сделано. Сделать справочник "контактеры" - неподчиненным - там все контактеры. Сделать в справочнике который у вас подчиненный (контактные лица) простос сылки на записи в справочнике "контактеры". В результате получим одного и того же контактера в разных контагентах.
16 lavalit
 
08.10.14
14:56
Потом можно и запрос нарисовать соответствующий))
17 MagicFly
 
09.10.14
09:58
(16) я пишу следующий запрос:
"//{{ЗАПРОС(Сформировать)  
    |Без итогов;
    |Представители = Справочник.Представители.Представитель.Наименование;
    |Клиенты = Справочник.Представители.Владелец;
    |Группировка Представители без групп;  
    |Группировка Клиенты;
    |Условие (Представители в Предст);
       |"//}}ЗАПРОС

Правильно ли я составляю запрос?
18 MagicFly
 
09.10.14
10:01
(17) где представитель, это из неподчиненого справочника взято
19 lavalit
 
09.10.14
10:04
а "предст" руками заполняешь? потому как вот эта строка какая то сомнительная
Представители = Справочник.Представители.Представитель.Наименование
Зачем оперировать строковой переменной? к тому же в "предст" надо будет еще и недостающие пробелы пихать.. иначе не прокатит
20 lavalit
 
09.10.14
10:05
наименование символов 25 поди.. а само наименование символов 10.. вот остальные 15 будь добер впихнуть
21 MagicFly
 
09.10.14
10:06
Предст я выбираю из справочника строку и все, чтобы по конкретному представителю отбор был
22 lavalit
 
09.10.14
10:06
|Без итогов;
    |Представители = Справочник.Представители.Представитель;
    |Клиенты = Справочник.Представители.Владелец;
    |Группировка Представители без групп;  
    |Группировка Клиенты;
    |Условие (СокрЛП(Представители.Наименование) в Предст);

вот тогда уж может так прокатит
23 lavalit
 
09.10.14
10:07
а ну из справочника т ыдергаешь агрегат.... так что наименование вообще убирай
24 MagicFly
 
09.10.14
10:10
(23) ок, все получилось, большое спасибо :)
25 lavalit
 
09.10.14
10:10
а вообще счас то ты как организовал справочники? как они друг дружат то?
26 lavalit
 
09.10.14
10:11
ну на здоровье))))
вопрошай ежели чего )))
27 MagicFly
 
09.10.14
10:15
Ну как ты и советовал Представители подчинены справочнику клиенты, представитель - справочник без подчинения и выбирается внутри справочника Представители
28 MagicFly
 
09.10.14
10:15
По другому думаю и не получится))
29 lavalit
 
09.10.14
10:58
А ну если помогло , то хорошо... да . .такая фишка сделана в комплексной но с ОКЕИ... правда если вздумаешь выгружать справочник... со всей его структурой, вот там гемора будет предостаточно))) Там надо будет соблюсти порядок выгрузки справочников... но с ОКЕИ еще тяжесть в том, что у него кода нет "родного" код ОКЕИ это обычный реквизит не код 1С... и подружить ОКЕИ с номенклатурой... не так просто.. Но у тебя есть и код и наименование так что выгрузит норм.... ну в общем не заморачивайся а то тут целая лекция получится)))от когда дело до тела дойдет тогда и будет время поговорить об этом))
30 MagicFly
 
09.10.14
11:38
(29) только подскажи, пожалуйста, как мне сейчас обойтись меньшими потерями, вернее даже затратами сил. Т.к. у меня до этого было в справочнике "представители", что подчинен справочнику "клиенты" была строковая переменная наименование, где все и вносилось, а поскольку сейчас появится новый справочник "представитель", то как бы из этого справочника перегнать наименование?
31 lavalit
 
09.10.14
12:16
я бы какой нибудь инструмент нарисовал бы. Который выгрузит сначала куда нибудь пусть даже в ексель или в текст что было до того как код-клиента и его представитель всего два поля подойдут.... а потом грузить новое - берем из файла ексель код клиента, смотрит какой был представитель, ищем его в новом справочнике и пихаем его в уже новый куда там надо, что получилось после того как...
32 MagicFly
 
16.10.14
07:59
(31) подскажи, пожалуйста, дорогой друг. Я пишу следующую обработку для копирования подчиненного справочника, правильно ли это:
Процедура Сформировать()
ЭлементСправочника.Реквизит1 = ВремРеквизит1;
Спр = СоздатьОбъект("Справочник.Представитель");
СпрПодч = СоздатьОбъект("Справочник.Представители");
СпрПодч.ИспользоватьВладельца(ЭлементСправочника);
СпрПодч.ВыбратьЭлементы();
ВремПодч = "";
Пока СпрПодч.ПолучитьЭлемент = 1 Цикл
     ВремПодч = СпрПодч.ТекущийЭлемент()
КонецЦикла;
Спр.Новый();
Спр.Реквизит1 = ВремРеквизит1;
Спр.Записать();
Если ПустоеЗначение(ВремПодч) = 0 Тогда
     СпрПодч.ИспользоватьВладельца(Спр.ТекущийЭлемент());
     СпрПодч.Новый();
     СпрПодч.Реквизит1 =  ВремПодч.Реквизит1;
     СпрПодч.Записать();
КонецЕсли;
КонецПроцедуры
33 Chai Nic
 
16.10.14
08:14
(32) Я бы вот так сделал:

Процедура СкопироватьПредставителей(Куда,Откуда)
    СписокДляКопирования=СоздатьОбъект("СписокЗначений");
    СпрПредставителиКонтрагентов=СоздатьОбъект("Справочник.ПредставителиКонтрагентов"); // подчиненный контрагентам
    СпрПредставителиКонтрагентов.ИспользоватьВладельца(Откуда);
    СпрПредставителиКонтрагентов.ВыбратьЭлементы();
    Пока СпрПредставителиКонтрагентов.ПолучитьЭлемент()=1 Цикл                            
        СписокДляКопирования.ДобавитьЗначение(СпрПредставителиКонтрагентов.Представитель); // ссылка на справочник-классификатор представителей
    КонецЦикла;                                        
          
    НачатьТранзакцию();
    Для Сч=1 по СписокДляКопирования.РазмерСписка() цикл
        СпрПредставителиКонтрагентов.Новый();
        СпрПредставителиКонтрагентов.Представитель=СписокДляКопирования.ПолучитьЗначение(Сч);
        СпрПредставителиКонтрагентов.Владелец=Куда;
        СпрПредставителиКонтрагентов.Записать();  
    КонецЦикла;
    ЗафиксироватьТранзакцию();
КонецПроцедуры
34 MagicFly
 
16.10.14
09:45
(33) поясни, пожалуйста, что ты имеешь ввиду? Т.е. что откуда копируется?
35 Chai Nic
 
16.10.14
09:46
(34) Контактные лица от одного контрагента к другому.. очевидно же.
36 MagicFly
 
16.10.14
09:49
Но у меня цель другая, надо ио подчиненного справочника "представители", который подчинен контрагентам, скопировать в неподчиненный справочник представитель.
См. выше (15),(27)
37 lavalit
 
16.10.14
09:51
эээ... вот это зачем?
Пока СпрПодч.ПолучитьЭлемент = 1 Цикл
     ВремПодч = СпрПодч.ТекущийЭлемент()
КонецЦикла;
НУ прокрутится цикл и ВремПодч будет равен последнему СпрПодч... а остальные куда?
38 Chai Nic
 
16.10.14
09:51
(36) Абсурд какой-то..
39 lavalit
 
16.10.14
09:52
Это (32) пока вот смотрю по порядку...
40 lavalit
 
16.10.14
09:55
(36) вообще то наоборот надо бы... сначала заполняешь справочник(классификатор) представителей... а потом уже из него подбираешь в подчиненный справочник контрагентов....
41 Chai Nic
 
16.10.14
09:56
(40) ТС похоже сам не понимает того, чего хочет сделать..
42 lavalit
 
16.10.14
09:56
(36) если мы делаем механизьм а-ляОКЕИ... то очевидно, что сначала заполняется ОКЕИ и только потом его элементы переносятся в справочник номенклатуры... но никак ненаоборот.. вот и здесь по тому же прнципу надо
43 lavalit
 
16.10.14
09:58
(41) да все понимает, заблудился немного.. чуть выше был вопрос как существующие представители (когда еще не было классификатора) попадут в этот вновь созданный класификатор..
44 MagicFly
 
16.10.14
09:58
ну да (42) мне и надо заполнить справочник "представитель" элементами из справочника "представители"
45 lavalit
 
16.10.14
09:59
отсюда и появился код в (32)
46 MagicFly
 
16.10.14
09:59
чтобы заново их не вносить
47 MagicFly
 
16.10.14
10:00
(46) хотя бы так для начала
48 Chai Nic
 
16.10.14
10:00
(43) Так когда не было классификатора - что тогда было? Очевидно, в этом случае представители были в привязке к контрагентам, и они разные (даже если одинаковые по сути) - у них нет единого ключа. Как ТС хочет их объединить в классификаторе?
49 lavalit
 
16.10.14
10:00
(46) но ты же вносишь новые записи в "представители" ---СпрПодч.Новый();
50 lavalit
 
16.10.14
10:05
я так понял цель сейчас взять всех представителей из старого подчиненного контрам справочника, перенести их в классификатор ... и потом уже оттуда заново заполить представителей, но уже не в подчиненный справочник конрам, а в реквизит самого справочника контрагентов.... или нет?
51 MagicFly
 
16.10.14
10:09
просто чтобы руками не вписывать в классификатор, а заполнить его уже существующими записями
52 MagicFly
 
16.10.14
10:09
чтобы меньше работы было
53 lavalit
 
16.10.14
10:28
ок... я бы сделал по такой методике примерно конечно...
обходишь всех контрагентов и считаешь из них всех его представителей, делаешь запись в таблице значений "контр"+"ЕгоПредставитель". далее читаешь таблицу и заполняешь классификатор, при этом если в классификаторе уже есть такой представитель, то уже не создавать новый... далее по новой читаешь таблицу и "вспоминаешь" какой представитель относится к какому контру... далее находишь контрагента и пихаешь ему этого представителя... ну как то так... конечно ты сам лучше знаешь нюансы твоей базы.. там подкорректируешь если чего
54 palpetrovich
 
16.10.14
10:42
Я не въезжаю, зачем изобретать велосипед? ...все уже придумано до нас. К примеру в УТ:
"Контрагенты", подчиненный ему "КонтактныеЛицаКонтрагентов" с реквизитом КонтактноеЛицо - справочника "КонтактныеЛица"
простейший запрос дает результат задачи в (0)
ВЫБРАТЬ
КонтактныеЛицаКонтрагентов.КонтактноеЛицо,
КонтактныеЛицаКонтрагентов.Владелец
ИЗ
Справочник.КонтактныеЛицаКонтрагентов КАК КонтактныеЛицаКонтрагентов
СГРУППИРОВАТЬ ПО
КонтактныеЛицаКонтрагентов.КонтактноеЛицо,
КонтактныеЛицаКонтрагентов.Владелец
55 lavalit
 
16.10.14
10:44
(54) 7.7.....
56 lavalit
 
16.10.14
10:46
в восьмерке таки да.. есть такой велик... у автора его нет.. поентому строим сами))))
57 palpetrovich
 
16.10.14
10:50
(56) дык, что его повторить-то? работы на 10 минут
58 lavalit
 
16.10.14
10:55
(57)... да... скелетик нарисовать согласен 10 минут... и он уже готов у автора... вопрос как побырому скорректировать то чего было раньше до "велика".и уж потом кататься на велике))).. ну не буду переписывать всю "историю" данной темы)))))
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан