Имя: Пароль:
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 минут... и он уже готов у автора... вопрос как побырому скорректировать то чего было раньше до "велика".и уж потом кататься на велике))).. ну не буду переписывать всю "историю" данной темы)))))
Независимо от того, куда вы едете — это в гору и против ветра!