Имя: Пароль:
1C
1C 7.7
v7: работа с подчиненными справочниками
,
0 Ar-Bus
 
21.04.12
18:29
Есть справочник Контрагенты. Ему подчинен справочник АналитикаКонтрагентов. У справочника "АналитикаКонтрагентов" есть подчиненный справочник "ЗначениеАналитики". И есть независимый справочник "АналитическийПризнак". Открываем в режиме 1С Предприятие форму списка справочник "Контрагенты". Жмем "подчиненный справочник", открывается форма списка справочника "АналитикаКонтрагентов". В этой форме списка две колонки, соответственно можно выбирать значение двух реквизитов:
  -видАналитики - берется из справочника "АналитическийПризнак"
  -Значение - берется из справочника "ЗначениеАналитики", который подчинен справочнику "АналитикаКонтрагентов".
Вопрос: когда я нахожусь в форме списка справочника "АналитикаКонтрагентов", пытаюсь добавить новую строку.
   -просит ввести код, по присваивается автоматически
   -в колонке "ВидАналитики" жму ..., открывается справочник "Аналитический признак", выбираю нужный элемент, жму Enter, текущий элемент заносится в реквизит "ВидАналитики" - все как обычно, все понятно...
   -затем пытаюсь ввести значение в колонку "ЗначениеАналитики". По идее, жму ..., и вот тут должна открыться форма списка справочника "ЗначениеАналитики" с уже выполненным отбором по владельцу "ВидАналитики". Но этого не происходит, после нажатия ... опять почему-то открывается справочник "контрагенты", после выбора контрагента открывается справочник "АналитикаКлиентов", а вот уже после выбора элемента из этого справочника открывается форма списка справочника "ЗначениеАналитики", где уже и находится нужное мне значение... Такое ощущение, что где-то кто-то владельца не видит...
Совсем запутался в этих подчиненных справочниках, подскажите, кто может, что я не так делаю? Какой код в какой модуль надо вставить?
1 aleks-id
 
21.04.12
18:32
>>Какой код в какой модуль
Какой ногой… Об какие берега?.. Уволю!. (c)
3 Cthulhu
 
21.04.12
18:47
(21): пока ты не ввел и не сохранил элемент справочника (при редактировании в списке это эквивалентно завершению редактирования новой строки) - он (элемент) не существует, и, соответственно, у него никак не может быть подчиненных элементов (из которых ты что-то там выбираешь).
аналогичная ситуация, кстати, в типовой, с реквизитом "основное свойство" типа "справочник.свойствачегототам", подчиненного.
4 Ar-Bus
 
21.04.12
19:01
хорошо, но на сохраненном элементе такая же история получается! Ну вот нахожусь в форме списка справочника АналитикаКлиентов, уже введено три элемента... АналитическийПризнак указывается без проблем, а вот "ЗначениеАналитики" ведет непонятными дорогами... Пытаюсь выбрать значение, жму ..., а мне вместо открытия формы списка "ЗначениеАналитики" опять предлагается выбирать контрагента... Почему???
5 Кокос
 
21.04.12
19:05
открой свойства поля. там на закладках должна быть привязка к другому полю
6 GreyK
 
21.04.12
19:08
(4) Я немного не понял, не люблю длинные тексты :( Но в свойствах реквизитов формы есть такая хрень "Связан с", может стоит его заполнить?
7 Ar-Bus
 
21.04.12
19:11
может вы с 1С 8 путаете? не в семерке "связан с"
8 Ar-Bus
 
21.04.12
19:12
ой, нет, правда есть "связан с". Сейчас попробую заполнить
9 Cthulhu
 
21.04.12
19:12
(8): интересно, чем же... )))
10 Кокос
 
21.04.12
19:14
(9) ему надо наверное туда Владелец вписать :)
11 Cthulhu
 
21.04.12
19:16
(10): садись, "два".
12 Ar-Bus
 
21.04.12
19:17
(5) а что нужно там указать в этом поле "связан с"?
13 Кокос
 
21.04.12
19:18
(12) в форме списка? а хз. я уже не помню. попробуй Владелец, ТекущаяСтрока.Владелец или наименование колонки где лежит значение владельца. сто лет на 7рке ничего не писал. последний клиент на 7рке остался и тот только на обновах
14 Cthulhu
 
21.04.12
19:59
(12): ТекущийЭлемент
15 Cthulhu
 
21.04.12
19:59
(14)+: именно вот так прям, без скобок. ;)
16 Cthulhu
 
21.04.12
20:18
Не, брешу. Облом.
"Связан с" понимает только наименование реквизита формы.
Навскидку спасает (от предварительного выбора элемента-владельца при начале выбора реквизита типа "подчиненный справочник") вот ето:
Процедура ПриНачалеВыбораЗначения(НаимРекв,ФСО) //предопределенная
   Перем тКонт;
   Если НаимРекв="РеквИзПодчСпр" Тогда
       ФСО=0; ОткрытьФорму("Справочник.ПодчСпр",тКонт);
       тКонт.ИерархическийСписок(1); тКонт.ИспользоватьВладельца(ТекущийЭлемент());
   КонецЕсли;
КонецПроцедуры //ПриНачалеВыбораЗначения
17 Ar-Bus
 
22.04.12
08:04
а процедура ПриНачалеВыбораЗначения в модуле какой формы списка должна быть? Где указан этот реквизит, который необходимо выбрать из подчиненного справочника?
18 Voronve
 
22.04.12
10:05
(17) В модуле той формы списка которую открываешь. Если форма одна то в модуле "ФормаСписка". Попробуй вот так:

Процедура ПриНачалеВыбораЗначения(ИдентификаторЭлементаДиалога, Флаг)

   Если ИдентификаторЭлементаДиалога="<твой идентификатор поля справочника типа ЗначениеАналитики>" Тогда
       <твой идентификатор поля справочника типа ЗначениеАналитики>.ИспользоватьВладельца(ТекущийЭлемент());
   КонецЕсли;

КонецПроцедуры
19 Мимохожий Однако
 
22.04.12
10:13
Можно в форме списка подчиненных элементов добавить отбор в процедуре ПриОткрытии()
20 Ar-Bus
 
22.04.12
15:07
(16) Спасибо огромное! Этот код помог моей беде!
21 Cthulhu
 
22.04.12
15:16
(20): кстати, (18) тоже работает. и изящнее.
хотя в (16) в принципе методика, которая позволяет делать полный перехват выбора с подсовыванием открытия какой угодно формы чего угодно (хоть внешней обработки) в режиме выбора - с отловом выбранного значения и деланием на его основе тоже чего угодно в ОбработкаВыбораЗначения.
22 Ar-Bus
 
22.04.12
15:52
Сделал реквизит "ЗначениеАналитики" справочника "АналитикаКлиента" периодическим. На закладку документа добавил ТЗ, пытаюсь ее заполнить текущими данными, колонка "ВидАналити" заполняется, а "ЗначениеАналитики" остается пустым. Что не так в коде?

Процедура ПриВыбореКонтрагента()
   ТЗ.Очистить();
   ТЗ.НоваяКолонка("ВидАналитики");
   ТЗ.НоваяКолонка("ЗначениеАналитики");
   АналитикаКлиентов=СоздатьОбъект("Справочник.АналитикаКлиентов");
   АналитикаКлиентов.ИспользоватьВладельца(Контрагент);
   ЗначенияАналитикиКлиентов=СоздатьОбъект("Справочник.ЗначенияАналитикиКлиентов");
   ЗначенияАналитикиКлиентов.ИспользоватьДату(РабочаяДата());
   АналитикаКлиентов.ВыбратьЭлементы();
   Пока АналитикаКлиентов.ПолучитьЭлемент()=1 Цикл
       ТЗ.НоваяСтрока();
       ТЗ.ВидАналитики=АналитикаКлиентов.ВидАналитики;
       //ЗначенияАналитикиКлиентов.ИспользоватьДату(ДатаДок);
       ЗначенияАналитикиКлиентов.ИспользоватьВладельца(АналитикаКлиентов.ВидАналитики);
       //ТЗ.ЗначениеАналитики=ЗначенияАналитикиКлиентов.Наименование.Получить(ДатаДок);
       ТЗ.ЗначениеАналитики=ЗначенияАналитикиКлиентов;
   КонецЦикла;
КонецПроцедуры
23 Мимохожий Однако
 
22.04.12
16:10
Что же ты присваешь в строке:
ТЗ.ЗначениеАналитики=ЗначенияАналитикиКлиентов;?
24 Ar-Bus
 
22.04.12
16:15
(23) а что там нужно присваивать? Я уже и отладчиком смотрел, вообще строка

ЗначенияАналитикиКлиентов.ИспользоватьВладельца(АналитикаКлиентов.ВидАналитики)

выдает пустое значение, если рассчитать это выражение... Почему? Что не так?
25 Злопчинский
 
22.04.12
16:37
(24)
ЗначенияАналитикиКлиентов.ИспользоватьВладельца(АналитикаКлиентов.ВидАналитики);
       //ТЗ.ЗначениеАналитики=ЗначенияАналитикиКлиентов.Наименование.Получить(ДатаДок);
       ТЗ.ЗначениеАналитики=ЗначенияАналитикиКлиентов;
.
где здесь в справочнике "ЗначенияАналитикиКлиентов" - ПОЗИЦИОНИРОВАНИЕ на вполне конкретный элемент этого справочника, ссылку на который ты потом закидываешь в ТЗ..?
26 Ar-Bus
 
22.04.12
16:39
(25) ну для периодического реквизита на одну дату может быть установлено одно значение. Когда я говорю "ЗначенияАналитикиКлиентов.ИспользоватьДату(РабочаяДата())" - это разве не значит получение элемента? Может тогда подскажете, как мне спозиционироваться на элементе?
27 Злопчинский
 
22.04.12
16:41
(24) когда ты пишешь СпрЧтото = СоздатьОбъект("Справочник.ЧтоТо"); - перед твоим мысленным взором должна предстать картинка типа таблицы с бегунком - для сравнения представь себе  логорифмическая линейка. Когда ты пишешь Использовать владельца, ИспользоватьДату - ты на логорифмической линейке ограничиваешь область по которой может ерзать бегунок. и чтоб sgjkexbnm конкретное значение - надо бегунок поставить на это конкрентное значение - или перебором или поиском или как-то еще.
28 Злопчинский
 
22.04.12
16:42
(26) чисто в качестве образования: "ну для периодического реквизита на одну дату может быть установлено одно значение." - в общем случае неверно, для периодич.реквизита на одну дату  может быть установлено просто дофуя значений
29 Ar-Bus
 
22.04.12
16:51
(27) Мне кажется, что тут дело с ИспользоватьВладельца()
пытался написать такой код:


Процедура ПриВыбореКонтрагента()
   ТЗ.Очистить();
   ТЗ.НоваяКолонка("ВидАналитики");
   ТЗ.НоваяКолонка("ЗначениеАналитики");
   АналитикаКлиентов=СоздатьОбъект("Справочник.АналитикаКлиентов");
   АналитикаКлиентов.ИспользоватьВладельца(Контрагент);
   ЗначенияАналитикиКлиентов=СоздатьОбъект("Справочник.ЗначенияАналитикиКлиентов");
   ЗначенияАналитикиКлиентов.ИспользоватьДату(ДатаДок);
   АналитикаКлиентов.ВыбратьЭлементы();
   Пока АналитикаКлиентов.ПолучитьЭлемент()=1 Цикл
       ТЗ.НоваяСтрока();
       ТЗ.ВидАналитики=АналитикаКлиентов.ВидАналитики;
       ЗначенияАналитикиКлиентов.ИспользоватьВладельца(АналитикаКлиентов.ВидАналитики);
       ЗначенияАналитикиКлиентов.ВыбратьЭлементы();
       Пока ЗначенияАналитикиКлиентов.ПолучитьЭлемент()=1 Цикл
           ТЗ.ЗначениеАналитики=ЗначенияАналитикиКлиентов;
       КонецЦикла;
   КонецЦикла;
КонецПроцедуры

захожу в отладчик. Цикл Пока ЗначенияАналитикиКлиентов.ПолучитьЭлемент()=1 не работает, не получает он не одного элемента!
30 Злопчинский
 
22.04.12
16:58
читай и думай!!!
в (0) > Значение - берется из справочника "ЗначениеАналитики", который подчинен справочнику
"АналитикаКонтрагентов".
в (29) >  ЗначенияАналитикиКлиентов.ИспользоватьВладельца(АналитикаКлиентов.ВидАналитики);

так всетаки значение аналитик чему подчинено - АналитикеКлиентов или ВидуАналитики?
31 Злопчинский
 
22.04.12
16:59
напиши
Результат = АналитикаКлиентов.ВыбратьЭлементы();
проверь чему равен "результат" - если 0  - в выборке нет ни одного элемента
32 Злопчинский
 
22.04.12
17:00
если хочешь - скидывай на [email protected] ид и пароль для доступа по тимвьюверу - подключусь на рабочий стол - посмотрим вместе на тови хитрозамороченные схемы... - только оперативно! долго ждать и быть добрым - не в моих правилах...
33 Злопчинский
 
22.04.12
17:02
все что ты в (0) описал - смотри как сделано в типовой ТиС - справочник "свойстваКонтрагентов" или "СвойстваНоменклатуры"
34 Ar-Bus
 
22.04.12
17:07
(30) СПАСИБО ЗА ТО, ЧТО ГЛАЗА ОТКРЫЛ!!! Действительно, нужно было написать такой код:


Процедура ПриВыбореКонтрагента()
   ТЗ.Очистить();
   ТЗ.НоваяКолонка("ВидАналитики");
   ТЗ.НоваяКолонка("ЗначениеАналитики");
   АналитикаКлиентов=СоздатьОбъект("Справочник.АналитикаКлиентов");
   АналитикаКлиентов.ИспользоватьВладельца(Контрагент);
   АналитикаКлиентов.ВыбратьЭлементы();
   Пока АналитикаКлиентов.ПолучитьЭлемент()=1 Цикл
       ТЗ.НоваяСтрока();
       ТЗ.ВидАналитики=АналитикаКлиентов.ВидАналитики;
       ТЗ.ЗначениеАналитики=АналитикаКлиентов.ЗначениеАналитики.Получить(ДатаДок);
   КонецЦикла;
КонецПроцедуры
35 Злопчинский
 
22.04.12
17:26
(34) уф.. теперь я могу кино пойти смотреть спокойно...