|
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 минут... и он уже готов у автора... вопрос как побырому скорректировать то чего было раньше до "велика".и уж потом кататься на велике))).. ну не буду переписывать всю "историю" данной темы)))))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |