Имя: Пароль:
1C
1C 7.7
v7: Прямые запросы.
0 varelchik
 
22.11.12
15:47
Пытаюсь построить структуру справочников и Общего реквизита для все МД.
В моем примере это IDD МОДа.
Для справочников все очень просто.
   Для н=1 По Метаданные.Справочник() Цикл
       МД=Метаданные.Справочник(н);
       Идент=МД.Идентификатор;
       Если МД.Реквизит("IDD").Выбран()=0 Тогда
           Продолжить;
       КонецЕсли;
       ИДРекв=глМетаДата.ИДРеквизитаСправочника(Идент,"IDD");
       ИдентСпр=глМетаДата.ИДСправочника(Идент);
       
       Запрос.ВыполнитьИнструкцию("insert into СтруктураIDD values('sc"+ИдентСпр+"','id',$ВидСправочника."+Идент+",'sp"+ИДРекв+"')");
   КонецЦикла;
1 varelchik
 
22.11.12
15:48
А вот для Общего реквизита документа чет мозги не доходять.
   Для н=1 По Метаданные.Документ() Цикл
       МД=Метаданные.Документ(н);
       Идент=МД.Идентификатор;
       //ИДД=глМетаДата.ИДРеквизитаШапки(Идент,"IDD");
       Запрос.ВыполнитьИнструкцию("insert into СтруктураIDD values('_1sjourn','iddoc',$ВидДокумента."+Идент+",'Это общий реквизит')");
   КонецЦикла;
2 varelchik
 
22.11.12
15:49
что мене вставить вместо "Это общий реквизит"
пробовал $ОбщийРеквизит.IDD
так ругаеться на усечение данных.
У кого есть какие нибудь соображения?
3 kiruha
 
22.11.12
15:52
Для н=1 По Метаданные.ОбщийРеквизитДокумента() Цикл
4 varelchik
 
22.11.12
15:53
Сразу же объясню зачем мне это.
Есть у меня триггер который висит на _1supdts.
Надо реализовать механизм автоматического присвоения IDD любоиу из объектов МД.
Прилюбом чихе на этой таблицей тригер должен проверить заполнение этого поля и если его нету то присвоить.
Со справочниками без проблем, а вот общим реквизитом документа облом.
5 varelchik
 
22.11.12
15:54
(3) и что мы получим?
мне надо чтобы было поле sp...
6 Ёпрст
 
22.11.12
15:59
в зависимости от галки отбор у этого реквизита, это либо реквизит Жарнальчика, либо шапки документа(ов)
7 Ёпрст
 
22.11.12
15:59
журнальчика
8 varelchik
 
22.11.12
16:01
ОбщийРеквизит отбор стоит
9 Ёпрст
 
22.11.12
16:01
вообще, взял бы у Андрей_Андреич
готовое решение - регистрация Урибом, выгрузка МОД-ом
10 Ёпрст
 
22.11.12
16:03
Жур.$ОбщийРеквизит.IDD
11 varelchik
 
22.11.12
16:03
Запрос.ВыполнитьИнструкцию("insert into СтруктураIDD values('_1sjourn','iddoc',$ВидДокумента."+Идент+",$ОбщийРеквизит.IDD)");
вот что выдает :
State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Недопустимое имя столбца "sp9163".
12 Ёпрст
 
22.11.12
16:03
где Жур - алияс от _1sjourn
13 Ёпрст
 
22.11.12
16:06
А так, через (3) + ИДОбъекта
14 varelchik
 
22.11.12
16:06
(12)
а вот тута моно трохи по подробнее?
15 varelchik
 
22.11.12
16:06
аааааааааа
16 varelchik
 
22.11.12
16:08
(13) блин от я вася!
Сенкс.
Поехал дальше.
17 varelchik
 
22.11.12
16:09
ИДД=глМетаДата.ИДОбъекта(Метаданные.ОбщийРеквизитДокумента("IDD"));
   Для н=1 По Метаданные.Документ() Цикл
       МД=Метаданные.Документ(н);
       Идент=МД.Идентификатор;
       Запрос.ВыполнитьИнструкцию("insert into СтруктураIDD values('_1sjourn','iddoc',$ВидДокумента."+Идент+",'sp"+ИДД+"')");
   КонецЦикла;
18 kiruha
 
22.11.12
16:32
Не проще отслеживать изменения только журнала ?
Зачем цикл по всем документам ?
19 kiruha
 
22.11.12
16:34
Считай журнал - это один справочник
20 varelchik
 
22.11.12
17:36
Спасибо за советы.
Решил сделать проще.
ПОвесить тригеры на все Справочники и ЖурналДокументов и забить.
21 kiruha
 
22.11.12
18:02
Еще вариант только на _1SUIDCTL- хранение максимальных ID по типам, если ID штатно создаются
22 kiruha
 
22.11.12
18:25
собственно туда 1С ина пишет при создании нового ID вот логично одновременно и IDD тогда же
И аналогично вставлять
TYPEID MAXIDD
и брать для автоматического создания IDD
23 varelchik
 
23.11.12
12:47
(22)хм.
а это идея.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс