![]() |
![]() |
![]() |
|
v7: Справочники | ☑ | ||
---|---|---|---|---|
0
CyMepku1985
02.03.13
✎
22:24
|
Есть справочник Альфа, требуется при закрытии справочника Бетта в справочник Альфа добавить группы по элементам справочника Бетта(получается),но тип реквизита справочника Альфа относящийся к справочнику Бетта не имеет ссылки на справочник Бетта.
Возможно ли это как - нибудь реализовать? или придется убрать справочник Бетта - пределов все в константы или перечисления? СпрНоменклатура = СоздатьОбъект("Справочник.Номенклатура"); СпрБилеты = СоздатьОбъект("Справочник.Билеты"); СписокБилетов = СоздатьОбъект("СписокЗначений"); Если СпрБилеты.ВыбратьЭлементы() = 1 Тогда Пока СпрБилеты.ПолучитьЭлемент() = 1 Цикл Найден = 0; Если (СпрБилеты.ЭтоГруппа() = 0) и (СпрБилеты.ПометкаУдаления() = 0) Тогда Если СпрНоменклатура.ВыбратьЭлементы() = 1 Тогда Пока СпрНоменклатура.ПолучитьЭлемент() = 1 Цикл Если (СпрНоменклатура.ВидБилета = СпрБилеты.ТекущийЭлемент()) Тогда Найден = 1; Прервать; КонецЕсли; КонецЦикла; Если Найден = 0 Тогда СпрНоменклатура.НоваяГруппа(); СпрНоменклатура.ВидБилета = СпрБилеты.ТекущийЭлемент(); СпрНоменклатура.Записать(); КонецЕсли; ИначеЕсли СпрНоменклатура.ВыбратьЭлементы() = 0 Тогда СпрНоменклатура.НоваяГруппа(); СпрНоменклатура.ВидБилета = СпрБилеты.ТекущийЭлемент(); СпрНоменклатура.Записать(); КонецЕсли; КонецЕсли; КонецЦикла; ИначеЕсли СпрБилеты.ВыбратьЭлементы() = 0 Тогда Предупреждение("Заполните Справочник Билеты"); КонецЕсли; |
|||
1
КонецЦикла
02.03.13
✎
22:35
|
Не очень понятно, но можно сделать синхронизацию по коду или своему реквизиту
Тогда перебираем бетта и создаем при необходимости группы в альфа |
|||
2
CyMepku1985
02.03.13
✎
22:49
|
Группы создаются, но реквизит СпрНоменклатура.ВидБилета имеющий тип СпрБилеты остается незапоненым и нельзя при создании группы указать в реквизите СпрНоменклатура.ВидБилета какой либо элемент справочника СпрБилеты.
У группы кроме наименования и кода может быть заполене ещё какой нибудь реквизит? |
|||
3
КонецЦикла
02.03.13
✎
23:02
|
(2) Ну конечно может быть
Смотри на закладке "Дополнительные", "Использовать" |
|||
4
CyMepku1985
02.03.13
✎
23:08
|
ап
|
|||
5
CyMepku1985
02.03.13
✎
23:09
|
ОК буду разбираться. Складывалось мнение что нельзя
|
|||
6
CyMepku1985
02.03.13
✎
23:13
|
Решено...
Время позднее видимо из-за невнимательности. на закладке "Дополнительные", "Использовать" всего лишь нужно было выставить для групп ... всё работает как надо. Спс КонецЦикла! |
|||
7
ЧеловекДуши
02.03.13
✎
23:18
|
(0) НечегоНеПонимаю... но ты давай, делай... у тебя все получится. :)
.. Если быть конкретным, у справочника есть ID поле, уникально в пределе самого справочника :) ... Так же на уровне данных, Группа и Элемент отличаются только одним реквизитом "ISFOLDER", Флаг того, что запись является элементом или группой. Для групп это поле равно 1, для элементов - 2. Тип - tinyint (0-255). http://www.script-coding.com/v77tables.html |
|||
8
CyMepku1985
02.03.13
✎
23:22
|
Код рабочий. В конфигураторе у реквизита не было выбрано использовать для групп.
Всем спасибо, проблема решено тему можно закрыть. |
|||
9
Zhuravlik
02.03.13
✎
23:36
|
(0) Только здесь цикл по справочнику одного вида внутри другого. Имхо, если нужно сопрягать элементЫ справочника "Билеты" с элементОМ спрачвочника Номенклатура, то "НайтиПоРеквизиту" будет интереснее...
|
|||
10
Zhuravlik
02.03.13
✎
23:39
|
+ Причем "СпрНоменклатура.ВыбратьЭлементы()" - выборка открывается два раза, уж лучше тогда по флагу.
|
|||
11
Zhuravlik
02.03.13
✎
23:40
|
+ ВыбратьПоРеквизиту()
|
|||
12
Zhuravlik
02.03.13
✎
23:55
|
(0) Так быстрее, да и проще:
СпрНоменклатура = СоздатьОбъект("Справочник.Номенклатура"); СпрБилеты = СоздатьОбъект("Справочник.Билеты"); СписокБилетов = СоздатьОбъект("СписокЗначений"); флЕстьЭлементыСпрБилеты = 0; Если СпрБилеты.ВыбратьЭлементы() = 1 Тогда Пока СпрБилеты.ПолучитьЭлемент() = 1 Цикл Если СпрБилеты.ЭтоГруппа() = 1 Тогда Продолжить; КонецЕсли; Если СпрБилеты.ПометкаУдаления() = 1 Тогда Продолжить; КонецЕсли; флЕстьЭлементыСпрБилеты = 1; Если СпрНоменклатура.НайтиПоРеквизиту("ВидБилета", СпрБилеты.ТекущийЭлемент(), 1) = 0 Тогда СпрНоменклатура.НоваяГруппа();ъ СпрНоменклатура.ВидБилета = СпрБилеты.ТекущийЭлемент(); СпрНоменклатура.Записать(); КонецЕсли; КонецЦикла; КонецЕсли; Если флЕстьЭлементыСпрБилеты = 0 Тогда Предупреждение("Справочник ""Билеты"" не заполнен."); КонецЕсли; |
|||
13
Zhuravlik
02.03.13
✎
23:58
|
+ Даже так...
СпрНоменклатура = СоздатьОбъект("Справочник.Номенклатура"); СпрБилеты = СоздатьОбъект("Справочник.Билеты"); флЕстьЭлементыСпрБилеты = 0; СпрБилеты.ВыбратьЭлементы(); Пока СпрБилеты.ПолучитьЭлемент() = 1 Цикл Если СпрБилеты.ЭтоГруппа() = 1 Тогда Продолжить; КонецЕсли; Если СпрБилеты.ПометкаУдаления() = 1 Тогда Продолжить; КонецЕсли; флЕстьЭлементыСпрБилеты = 1; Если СпрНоменклатура.НайтиПоРеквизиту("ВидБилета", СпрБилеты.ТекущийЭлемент(), 1) = 0 Тогда СпрНоменклатура.НоваяГруппа(); СпрНоменклатура.ВидБилета = СпрБилеты.ТекущийЭлемент(); СпрНоменклатура.Записать(); КонецЕсли; КонецЦикла; Если флЕстьЭлементыСпрБилеты = 0 Тогда Предупреждение("Справочник ""Билеты"" не заполнен."); КонецЕсли; |
|||
14
Zhuravlik
03.03.13
✎
00:09
|
(7) :)))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |