Имя: Пароль:
1C
1C 7.7
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) :)))