|
v7: Структура таблиц 77 в MS SQL
| ☑ |
0
dk
18.12.17
✎
11:41
|
Знаю про файл dds
Знаю про
Не могу найти готового решения как в 8-ке в виде
справочник ХХХ таблице на скуле УУУУ, ЧЧЧЧ, ИИИИ
с описанием всех полей
Есть готовое для 77 + 1с++?
|
|
1
dk
18.12.17
✎
11:42
|
есть решения через парсер dds, но там поля и имена длинные сокращены
|
|
2
mehfk
18.12.17
✎
11:43
|
Парсер есть в составе 1с++ .
|
|
3
Ёпрст
18.12.17
✎
11:43
|
В 7.7 есть метапарсер имён. Поэтому, значть что где хранится не обязательно
|
|
4
dk
18.12.17
✎
11:43
|
угу, но лениво писать, наверняка готовое где-нить валяется - задача ведь универсальная
|
|
5
Ёпрст
18.12.17
✎
11:44
|
(4) писать что ?
|
|
6
Ёпрст
18.12.17
✎
11:45
|
возьми конструктор отчетов, если лень писать руками текст запроса
|
|
7
dk
18.12.17
✎
11:46
|
это для разрабов не из 1с надо
(5) прямо запускаем в 1с и получаем в текстовом виде
Справочник Номенклатура (SC31)
ПОле Код = CODE
Поле Наименование = DESCR
Поле Вид = SP2541
.....
|
|
8
dk
18.12.17
✎
11:46
|
и так по всем объектам метаданных
|
|
9
Ёпрст
18.12.17
✎
11:47
|
(7) дык отдай им словарь, делов то
|
|
10
Ёпрст
18.12.17
✎
11:47
|
ну или сам пиши, есть же метадатаворк, и там его методы - идОбъекта и т.д и т.п
|
|
11
dk
18.12.17
✎
11:47
|
Не, там обрезанные наименования объектов - надо красиво
|
|
12
dk
18.12.17
✎
11:48
|
самому лень, но похоже придется
|
|
13
Vakhrin
18.12.17
✎
11:50
|
тут есть:
делает вьюхи с "человеческими" именами )
|
|
14
dk
18.12.17
✎
11:57
|
(13) спасибо
|
|
15
АНДР
18.12.17
✎
12:14
|
ё-sql
|
|
16
Vakhrin
18.12.17
✎
12:25
|
(15) "Для скачивания файла нужно иметь не менее 3х полезных ответа на форуме, либо тем с вопросами по работе в 1с."
|
|
17
ADirks
18.12.17
✎
12:38
|
Вьюшки это вообще знатная штука.
Как-то приходилось с одной польской программой обмен данными делать, так перевёл всё вьюшками на русский, и дело пошло :)
|
|
18
toypaul
гуру
18.12.17
✎
13:47
|
На последнем месте работы начальник писал такое дело на ToySQL. Все таблицы во вьюхи на SQL.
|
|
19
АНДР
18.12.17
✎
13:56
|
(18) А он знал, кто автор ToySQL? ;)
|
|
20
Vakhrin
18.12.17
✎
15:47
|
(18) Паша, я использовал 1С++ только потому, что на тот момент он был более доступен, чем ToySQL )
|
|
21
dk
18.12.17
✎
15:48
|
//*******************************************
Процедура Сформировать()
// На основе материалов
//
// (С) Вахрин Андрей Викторович
МД = СоздатьОбъект("MetaDataWork");
СКЛ = СоздатьОбъект("ODBCRecordSet");
Префикс = "";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+Префикс+"Журнал ");
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+Префикс+"Журнал
|AS
|SELECT DATE_TIME_IDDOC ДатаДок, IDDOC Ссылка, IDDOCDEF Вид, DOCNO Номер, Closed Проведен, ISMARK ПометкаУдаления
| ";
Для инд = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Если Метаданные.ОбщийРеквизитДокумента(инд).Сортировка = 1 Тогда
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.ОбщийРеквизитДокумента(инд)) + " "+
Метаданные.ОбщийРеквизитДокумента(инд).Идентификатор;
КонецЕсли;
КонецЦикла;
стр = стр + "
|FROM dbo._1SJOURN";
Попытка
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не создан журнал документов...");
КонецПопытки;
// Документы
Для инд = 1 По Метаданные.Документ() Цикл
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+Префикс+"Док_"+ Метаданные.Документ(инд).Идентификатор);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+Префикс+"Док_"+ Метаданные.Документ(инд).Идентификатор + "
|AS
|SELECT IDDOC Ссылка, "+ МД.ИДОбъекта(Метаданные.Документ(инд)) + " Вид";
Для рек = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Если Метаданные.ОбщийРеквизитДокумента(рек).Сортировка = 0 Тогда
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.ОбщийРеквизитДокумента(рек)) + " "+
Метаданные.ОбщийРеквизитДокумента(рек).Идентификатор;
КонецЕсли;
КонецЦикла;
Для рек = 1 По Метаданные.Документ(инд).РеквизитШапки() Цикл
стр = стр + "
| , sp"+ МД.ИДОбъекта(Метаданные.Документ(инд).РеквизитШапки(рек)) + " "+
Метаданные.Документ(инд).РеквизитШапки(рек).Идентификатор;
КонецЦикла;
стр = стр + "
|FROM dbo.DH"+ МД.ИДОбъекта(Метаданные.Документ(инд));
Попытка
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не созданы шапки документов... "+ Метаданные.Документ(инд).Идентификатор);
КонецПопытки;
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+Префикс+"Док_"+Метаданные.Документ(инд).Идентификатор+"_ТЧ");
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo." + Префикс + "Док_" + Метаданные.Документ(инд).Идентификатор + "_ТЧ" + "
|AS
|SELECT IDDOC Ссылка, "+ МД.ИДОбъекта(Метаданные.Документ(инд)) + " Вид
|, LINENO_ НомерСтроки";
Для рек = 1 По Метаданные.Документ(инд).РеквизитТабличнойЧасти() Цикл
стр = стр + "
| , sp"+ МД.ИДОбъекта(Метаданные.Документ(инд).РеквизитТабличнойЧасти(рек)) + " "+
Метаданные.Документ(инд).РеквизитТабличнойЧасти(рек).Идентификатор;
КонецЦикла;
стр = стр + "
|FROM dbo.DT"+ МД.ИДОбъекта(Метаданные.Документ(инд));
Попытка
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не созданы табличные части документов... "+ Метаданные.Документ(инд).Идентификатор);
КонецПопытки;
КонецЦикла;
// Справочники
Для инд = 1 По Метаданные.Справочник() Цикл
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+Префикс+"Спр_"+ Метаданные.Справочник(инд).Идентификатор);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+Префикс+"Спр_"+ Метаданные.Справочник(инд).Идентификатор + "
|AS
|SELECT ID Ссылка
|, ISMARK ПометкаУдаления" +
?(Метаданные.Справочник(инд).ДлинаКода <> 0, ", CODE Код", "") +
?(Метаданные.Справочник(инд).ДлинаНаименования <> 0, ", DESCR Наименование", "") +
", " + МД.ИДОбъекта(Метаданные.Справочник(инд)) + " Вид";
Если СокрЛП(Метаданные.Справочник(инд).Владелец) <> "Метаданные" Тогда
стр = стр + ", PARENTEXT Владелец";
КонецЕсли;
Если Метаданные.Справочник(инд).КоличествоУровней <> 1 Тогда
стр = стр + ", PARENTID Родитель
|, ISFOLDER ЭтоГруппа";
КонецЕсли;
Для рек = 1 По Метаданные.Справочник(инд).Реквизит() Цикл
Если Метаданные.Справочник(инд).Реквизит(рек).Периодический = 1 Тогда
Продолжить;
КонецЕсли;
стр = стр + "
| , sp"+ МД.ИДОбъекта(Метаданные.Справочник(инд).Реквизит(рек)) + " "+
Метаданные.Справочник(инд).Реквизит(рек).Идентификатор;
КонецЦикла;
стр = стр + "
|FROM dbo.SC" + МД.ИДОбъекта(Метаданные.Справочник(инд));
Попытка
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не созданы справочники... " + Метаданные.Справочник(инд).Идентификатор);
КонецПопытки;
КонецЦикла;
// периодические значения реквизитов справочников
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+Префикс+"Периодические");
Исключение
КонецПопытки;
стр = "";
Для инд = 1 По Метаданные.Справочник() Цикл
тСпр = Метаданные.Справочник(инд);
Для чРек = 1 По тСпр.Реквизит() Цикл
тРек = тСпр.Реквизит(чРек);
Если тРек.Периодический = 1 Тогда
стр = стр + ?(СтрДлина(стр) = 0, "", "
|UNION ALL
|");
стр = стр +
"select 'Спр"+ тСпр.Идентификатор + "' Справочник"+ ", '"+ тРек.Идентификатор + "
|' Реквизит, S.ID Ссылка, C.DATE Дата, C.VALUE Значение
|FROM SC"+ МД.ИДОбъекта(тСпр) + " S, _1SCONST C WHERE S.ID = C.OBJID";
КонецЕсли;
КонецЦикла;
КонецЦикла;
стр = "CREATE VIEW dbo.Периодические
|AS
|" + стр;
Попытка
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не созданы периодические... ");
КонецПопытки;
// константы
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+Префикс+"Константы");
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+Префикс+"Константы
|AS
|SELECT C1.ID ID
| , C2.Идентификатор Идентификатор
| , C2.Периодическая Периодическая
| , C1.DATE Дата
| , C1.VALUE Значение
|FROM _1SCONST C1, Конст C2
|WHERE C1.OBJID = ' 0 '
| AND C1.ID = C2.ID";
Попытка
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не созданы константы... ");
КонецПопытки;
// Периодические реквизиты
Попытка
СКЛ.Выполнить("CREATE Table dbo."+Префикс+"Конст
|(ID Char(9), Идентификатор Char(60), Периодическая Int)");
Исключение
Сообщить("Не создана таблица Конст");
КонецПопытки;
стр = "DELETE FROM "+Префикс+"Конст";
Попытка
СКЛ.Выполнить(стр);
Исключение
КонецПопытки;
Для инд = 1 По Метаданные.Константа() Цикл
тКонст = Метаданные.Константа(инд);
Попытка
СКЛ.Выполнить("INSERT INTO "+Префикс+"Конст (ID,Идентификатор,Периодическая)
| VALUES ('"+ МД.ИДОбъекта(тКонст) + "','"+ тКонст.Идентификатор + "',"+ тКонст.Периодический + ")");
Исключение
КонецПопытки;
КонецЦикла;
// Перечисления
Попытка
стр = "CREATE Table dbo."+Префикс+"Перечисления
|(Вид char(30),Значение char(30),ID char(9))";
СКЛ.Выполнить(стр);
Исключение
КонецПопытки;
стр = "DELETE FROM "+Префикс+"Перечисления";
Попытка
СКЛ.Выполнить(стр);
Исключение
КонецПопытки;
Для инд = 1 По Метаданные.Перечисление() Цикл
пер = Перечисление.ПолучитьАтрибут(Метаданные.Перечисление(инд).Идентификатор);
Для инд1 = 1 По пер.КоличествоЗначений() Цикл
стр = "INSERT INTO "+Префикс+"Перечисления (Вид, Значение, ID) VALUES
| ('"+ Метаданные.Перечисление(инд).Идентификатор + "',
| '"+ пер.ЗначениеПоНомеру(инд1).Идентификатор() + "',
| '"+ МД.ЗначениеВСтрокуБД(пер.ЗначениеПоНомеру(инд1)) + "')";
Попытка
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не созданы перечисления...");
КонецПопытки;
КонецЦикла;
КонецЦикла;
// Регистры
Для инд = 1 По Метаданные.Регистр() Цикл
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+Префикс+"Рег_"+ Метаданные.Регистр(инд).Идентификатор);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+Префикс+"Рег_"+ Метаданные.Регистр(инд).Идентификатор + "
|AS
|SELECT IDDOC Ссылка, "+ МД.ИДОбъекта(Метаданные.Регистр(инд)) + " Вид
|, LINENO_ НомерСтроки
|, ACTNO НомерДвижения
|, CASE WHEN DEBKRED = 0 THEN '+' ELSE '-' END ВидДвижения
|"+?(Метаданные.Регистр(инд).БыстраяОбработкаДвижений = 1,", IDDOCDEF ВидДокумента","") +"
|"+?(Метаданные.Регистр(инд).БыстраяОбработкаДвижений = 1,", DATE_TIME_IDDOC ДатаВремяИдДок","") +"
|";
// Измерения
Для рек = 1 По Метаданные.Регистр(инд).Измерение() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор;
Если Метаданные.Регистр(инд).Измерение(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
// Ресурсы
Для рек = 1 По Метаданные.Регистр(инд).Ресурс() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор;
Если Метаданные.Регистр(инд).Ресурс(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
// Реквизиты
Для рек = 1 По Метаданные.Регистр(инд).Реквизит() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Реквизит(рек)) + " "+
Метаданные.Регистр(инд).Реквизит(рек).Идентификатор;
Если Метаданные.Регистр(инд).Реквизит(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Реквизит(рек)) + " "+
Метаданные.Регистр(инд).Реквизит(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
стр = стр + "
|FROM dbo.RA"+ МД.ИДОбъекта(Метаданные.Регистр(инд));
Попытка
Сообщить(стр);
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не созданы движения регистра... "+ Метаданные.Регистр(инд).Идентификатор);
КонецПопытки;
// Итоги
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+Префикс+"Рег_"+Метаданные.Регистр(инд).Идентификатор+"_Итоги");
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo." + Префикс + "Рег_" + Метаданные.Регистр(инд).Идентификатор + "_Итоги" + "
|AS
|SELECT "+ МД.ИДОбъекта(Метаданные.Регистр(инд)) + " Вид
|, PERIOD ДатаИтогов";
// Измерения
Для рек = 1 По Метаданные.Регистр(инд).Измерение() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор;
Если Метаданные.Регистр(инд).Измерение(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
// Ресурсы
Для рек = 1 По Метаданные.Регистр(инд).Ресурс() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор;
Если Метаданные.Регистр(инд).Ресурс(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
стр = стр + "
|FROM dbo.RG"+ МД.ИДОбъекта(Метаданные.Регистр(инд));
Попытка
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не созданы итоги регистра... "+ Метаданные.Регистр(инд).Идентификатор);
КонецПопытки;
КонецЦикла;
Сообщить("Готово!!!");
КонецПроцедуры
|
|
22
dk
18.12.17
✎
15:48
|
Добавил в (13) регистры
|
|
23
dk
18.12.17
✎
15:49
|
|
|
24
dk
19.12.17
✎
08:20
|
Добавил проверок что действительно создаются вьюхи
//*******************************************
Процедура Сформировать()
// На основе материалов
//
// (С) Вахрин Андрей Викторович
МД = СоздатьОбъект("MetaDataWork");
СКЛ = СоздатьОбъект("ODBCRecordSet");
Префикс = "";
ИмяОбъекта = Префикс+"Журнал";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+ИмяОбъекта+"
|AS
|SELECT DATE_TIME_IDDOC ДатаДок, IDDOC Ссылка, IDDOCDEF Вид, DOCNO Номер, Closed Проведен, ISMARK ПометкаУдаления
| ";
Для инд = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Если Метаданные.ОбщийРеквизитДокумента(инд).Сортировка = 1 Тогда
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.ОбщийРеквизитДокумента(инд)) + " "+
Метаданные.ОбщийРеквизитДокумента(инд).Идентификатор;
КонецЕсли;
КонецЦикла;
стр = стр + "
|FROM dbo._1SJOURN";
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не создан журнал документов...", "!");
КонецПопытки;
// Документы
Для инд = 1 По Метаданные.Документ() Цикл
ИмяОбъекта = Префикс+"Док_"+ Метаданные.Документ(инд).Идентификатор;
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+ИмяОбъекта + "
|AS
|SELECT IDDOC Ссылка, "+ МД.ИДОбъекта(Метаданные.Документ(инд)) + " Вид";
Для рек = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Если Метаданные.ОбщийРеквизитДокумента(рек).Сортировка = 0 Тогда
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.ОбщийРеквизитДокумента(рек)) + " "+
Метаданные.ОбщийРеквизитДокумента(рек).Идентификатор;
КонецЕсли;
КонецЦикла;
Для рек = 1 По Метаданные.Документ(инд).РеквизитШапки() Цикл
стр = стр + "
| , sp"+ МД.ИДОбъекта(Метаданные.Документ(инд).РеквизитШапки(рек)) + " "+
Метаданные.Документ(инд).РеквизитШапки(рек).Идентификатор;
КонецЦикла;
стр = стр + "
|FROM dbo.DH"+ МД.ИДОбъекта(Метаданные.Документ(инд));
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы шапки документов... "+ Метаданные.Документ(инд).Идентификатор, "!");
КонецПопытки;
// Табличная часть
Если Метаданные.Документ(инд).РеквизитТабличнойЧасти() <> 0 Тогда
ИмяОбъекта = Префикс+"Док_"+Метаданные.Документ(инд).Идентификатор+"_ТЧ";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo." + Префикс + ИмяОбъекта + "
|AS
|SELECT IDDOC Ссылка, "+ МД.ИДОбъекта(Метаданные.Документ(инд)) + " Вид
|, LINENO_ НомерСтроки";
Для рек = 1 По Метаданные.Документ(инд).РеквизитТабличнойЧасти() Цикл
стр = стр + "
| , sp"+ МД.ИДОбъекта(Метаданные.Документ(инд).РеквизитТабличнойЧасти(рек)) + " "+
Метаданные.Документ(инд).РеквизитТабличнойЧасти(рек).Идентификатор;
КонецЦикла;
стр = стр + "
|FROM dbo.DT"+ МД.ИДОбъекта(Метаданные.Документ(инд));
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы табличные части документов... "+ Метаданные.Документ(инд).Идентификатор, "!");
КонецПопытки;
КонецЕсли;
КонецЦикла;
// Справочники
Для инд = 1 По Метаданные.Справочник() Цикл
ИмяОбъекта = Префикс+"Спр_"+ Метаданные.Справочник(инд).Идентификатор;
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+ИмяОбъекта + "
|AS
|SELECT ID Ссылка
|, ISMARK ПометкаУдаления" +
?(Метаданные.Справочник(инд).ДлинаКода <> 0, ", CODE Код", "") +
?(Метаданные.Справочник(инд).ДлинаНаименования <> 0, ", DESCR Наименование", "") +
", " + МД.ИДОбъекта(Метаданные.Справочник(инд)) + " Вид";
Если СокрЛП(Метаданные.Справочник(инд).Владелец) <> "Метаданные" Тогда
стр = стр + ", PARENTEXT Владелец";
КонецЕсли;
Если Метаданные.Справочник(инд).КоличествоУровней <> 1 Тогда
стр = стр + ", PARENTID Родитель
|, ISFOLDER ЭтоГруппа";
КонецЕсли;
Для рек = 1 По Метаданные.Справочник(инд).Реквизит() Цикл
Если Метаданные.Справочник(инд).Реквизит(рек).Периодический = 1 Тогда
Продолжить;
КонецЕсли;
стр = стр + "
| , sp"+ МД.ИДОбъекта(Метаданные.Справочник(инд).Реквизит(рек)) + " "+
Метаданные.Справочник(инд).Реквизит(рек).Идентификатор;
КонецЦикла;
стр = стр + "
|FROM dbo.SC" + МД.ИДОбъекта(Метаданные.Справочник(инд));
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы справочники... " + Метаданные.Справочник(инд).Идентификатор, "!");
КонецПопытки;
КонецЦикла;
// периодические значения реквизитов справочников
ИмяОбъекта = Префикс+"Периодические";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "";
Для инд = 1 По Метаданные.Справочник() Цикл
тСпр = Метаданные.Справочник(инд);
Для чРек = 1 По тСпр.Реквизит() Цикл
тРек = тСпр.Реквизит(чРек);
Если тРек.Периодический = 1 Тогда
стр = стр + ?(СтрДлина(стр) = 0, "", "
|UNION ALL
|");
стр = стр +
"select 'Спр"+ тСпр.Идентификатор + "' Справочник"+ ", '"+ тРек.Идентификатор + "
|' Реквизит, S.ID Ссылка, C.DATE Дата, C.VALUE Значение
|FROM SC"+ МД.ИДОбъекта(тСпр) + " S, _1SCONST C WHERE S.ID = C.OBJID";
КонецЕсли;
КонецЦикла;
КонецЦикла;
стр = "CREATE VIEW dbo."+ИмяОбъекта+"
|AS
|" + стр;
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы периодические... ", "!");
КонецПопытки;
// константы
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+Префикс+"Константы");
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+Префикс+"Константы
|AS
|SELECT C1.ID ID
| , C2.Идентификатор Идентификатор
| , C2.Периодическая Периодическая
| , C1.DATE Дата
| , C1.VALUE Значение
|FROM _1SCONST C1, Конст C2
|WHERE C1.OBJID = ' 0 '
| AND C1.ID = C2.ID";
Попытка
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не созданы константы... ", "!");
КонецПопытки;
// Периодические реквизиты
Попытка
СКЛ.Выполнить("CREATE Table dbo."+Префикс+"Конст
|(ID Char(9), Идентификатор Char(60), Периодическая Int)");
Исключение
Сообщить("Не создана таблица Конст", "!");
КонецПопытки;
стр = "DELETE FROM "+Префикс+"Конст";
Попытка
СКЛ.Выполнить(стр);
Исключение
КонецПопытки;
Для инд = 1 По Метаданные.Константа() Цикл
тКонст = Метаданные.Константа(инд);
Попытка
СКЛ.Выполнить("INSERT INTO "+Префикс+"Конст (ID,Идентификатор,Периодическая)
| VALUES ('"+ МД.ИДОбъекта(тКонст) + "','"+ тКонст.Идентификатор + "',"+ тКонст.Периодический + ")");
Исключение
КонецПопытки;
КонецЦикла;
// Перечисления
Попытка
стр = "CREATE Table dbo."+Префикс+"Перечисления
|(Вид char(30),Значение char(30),ID char(9))";
СКЛ.Выполнить(стр);
Исключение
КонецПопытки;
стр = "DELETE FROM "+Префикс+"Перечисления";
Попытка
СКЛ.Выполнить(стр);
Исключение
КонецПопытки;
Для инд = 1 По Метаданные.Перечисление() Цикл
пер = Перечисление.ПолучитьАтрибут(Метаданные.Перечисление(инд).Идентификатор);
Для инд1 = 1 По пер.КоличествоЗначений() Цикл
стр = "INSERT INTO "+Префикс+"Перечисления (Вид, Значение, ID) VALUES
| ('"+ Метаданные.Перечисление(инд).Идентификатор + "',
| '"+ пер.ЗначениеПоНомеру(инд1).Идентификатор() + "',
| '"+ МД.ЗначениеВСтрокуБД(пер.ЗначениеПоНомеру(инд1)) + "')";
Попытка
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не созданы перечисления...", "!");
КонецПопытки;
КонецЦикла;
КонецЦикла;
// Регистры
Для инд = 1 По Метаданные.Регистр() Цикл
ИмяОбъекта = Префикс+"Рег_"+ Метаданные.Регистр(инд).Идентификатор;
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+ИмяОбъекта + "
|AS
|SELECT IDDOC Ссылка, "+ МД.ИДОбъекта(Метаданные.Регистр(инд)) + " Вид
|, LINENO_ НомерСтроки
|, ACTNO НомерДвижения
|, CASE WHEN DEBKRED = 0 THEN '+' ELSE '-' END Движение
|"+?(Метаданные.Регистр(инд).БыстраяОбработкаДвижений = 1,", IDDOCDEF ВидДокумента","") +"
|"+?(Метаданные.Регистр(инд).БыстраяОбработкаДвижений = 1,", DATE_TIME_IDDOC ДатаВремяИдДок","") +"
|";
// Измерения
Для рек = 1 По Метаданные.Регистр(инд).Измерение() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор;
Если Метаданные.Регистр(инд).Измерение(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
// Ресурсы
Для рек = 1 По Метаданные.Регистр(инд).Ресурс() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор;
Если Метаданные.Регистр(инд).Ресурс(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
// Реквизиты
Для рек = 1 По Метаданные.Регистр(инд).Реквизит() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Реквизит(рек)) + " "+
Метаданные.Регистр(инд).Реквизит(рек).Идентификатор;
Если Метаданные.Регистр(инд).Реквизит(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Реквизит(рек)) + " "+
Метаданные.Регистр(инд).Реквизит(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
стр = стр + "
|FROM dbo.RA"+ МД.ИДОбъекта(Метаданные.Регистр(инд));
Попытка
//Сообщить(стр);
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы движения регистра... "+ Метаданные.Регистр(инд).Идентификатор, "!");
КонецПопытки;
// Итоги
ИмяОбъекта = Префикс+"Рег_"+Метаданные.Регистр(инд).Идентификатор+"_Итоги";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo." + ИмяОбъекта + "
|AS
|SELECT "+ МД.ИДОбъекта(Метаданные.Регистр(инд)) + " Вид
|, PERIOD ДатаИтогов";
// Измерения
Для рек = 1 По Метаданные.Регистр(инд).Измерение() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор;
Если Метаданные.Регистр(инд).Измерение(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
// Ресурсы
Для рек = 1 По Метаданные.Регистр(инд).Ресурс() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор;
Если Метаданные.Регистр(инд).Ресурс(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
стр = стр + "
|FROM dbo.RG"+ МД.ИДОбъекта(Метаданные.Регистр(инд));
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы итоги регистра... "+ Метаданные.Регистр(инд).Идентификатор, "!");
КонецПопытки;
КонецЦикла;
Сообщить("Готово!!!");
КонецПроцедуры
|
|
25
Изучаю1С8
19.12.17
✎
08:23
|
(17) Алексей а у тебя почта работает?
|
|
26
ADirks
19.12.17
✎
08:25
|
Ещё можно немножко повычислять что-нибудь, для удобства.
Например так:
Функция СоздатьПредставление_ЖурналДокументов(фПересоздавать)
стрДатаДок = "Substring(Date_Time_IDDoc, 7, 2)+'.'+Substring(Date_Time_IDDoc, 5, 2)+'.'+Substring(Date_Time_IDDoc, 3, 2)";
дДатаДок = "Convert(DateTime, Left(Date_Time_IDDoc, 8), 112)";
сзКолонки = СоздатьОбъект("СписокЗначений");
сзКолонки.ДобавитьЗначение("ROW_ID ROW_ID");
сзКолонки.ДобавитьЗначение("IDJOURNAL");
сзКолонки.ДобавитьЗначение("IDJOURNAL идЖурнал10");
сзКолонки.ДобавитьЗначение("IDDoc");
сзКолонки.ДобавитьЗначение("IDDoc идДок9");
сзКолонки.ДобавитьЗначение("IDDocDef");
сзКолонки.ДобавитьЗначение("IDDocDef идВидДок10");
сзКолонки.ДобавитьЗначение("IDDocDef ВидДок");
сзКолонки.ДобавитьЗначение("AppCode");
сзКолонки.ДобавитьЗначение("DATE_TIME_IDDOC");
сзКолонки.ДобавитьЗначение("DATE_TIME_IDDOC ПозицияДокумента");
сзКолонки.ДобавитьЗначение("DATE_TIME_IDDOC идДок23");
сзКолонки.ДобавитьЗначение(стрДатаДок+" стрДатаДок");
сзКолонки.ДобавитьЗначение(дДатаДок+" ДатаДок");
сзКолонки.ДобавитьЗначение("'№'+Rtrim(DocNo)+' от '+"+стрДатаДок+" НомерДата");
сзКолонки.ДобавитьЗначение("DNPrefix");
сзКолонки.ДобавитьЗначение("DOCNO");
сзКолонки.ДобавитьЗначение("LTrim(RTrim(DOCNO)) НомерДок");
сзКолонки.ДобавитьЗначение("Closed");
сзКолонки.ДобавитьЗначение("Closed&1 Проведен");
сзКолонки.ДобавитьЗначение("IsMark");
сзКолонки.ДобавитьЗначение("IsMark ПометкаУдаления");
сзКолонки.ДобавитьЗначение("ActCnt");
сзКолонки.ДобавитьЗначение("VerStamp");
Для н = 1 По Метаданные.Регистр() Цикл
МетаРег = Метаданные.Регистр(н);
КолонкаРекв = "RF"+РадугаМД.ИДОбъекта(МетаРег);
сзКолонки.ДобавитьЗначение(КолонкаРекв);
КонецЦикла;
Для н = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл
МетаРекв = Метаданные.ОбщийРеквизитДокумента(н);
Если МетаРекв.Сортировка = 1 Тогда
ИмяРекв = МетаРекв.Идентификатор;
КолонкаРекв = "SP"+РадугаМД.ИДОбъекта(МетаРекв);
сзКолонки.ДобавитьЗначение(КолонкаРекв+" "+ИмяРекв);
сзКолонки.ДобавитьЗначение(КолонкаРекв+" "+КолонкаРекв);
КонецЕсли;
КонецЦикла;
МетаРекв = Метаданные.ОбщийРеквизитДокумента("идДок13");
КолонкаРекв = "SP"+РадугаМД.ИДОбъекта(МетаРекв);
сзКолонки.ДобавитьЗначение("'ID,12,' + "+КолонкаРекв+" РасшифровкаДляОтчетов");
сзКолонки.ДобавитьЗначение("dbo.ПредставлениеДокумента(IDDoc, 1, 1) ПредставлениеДокумента");
стрКолонки = СписокВСтроку(сзКолонки, ","+РазделительСтрок+СимволТабуляции);
ИмяПредставления = "ЖурналДокументов";
ТекстЗапроса = "
|CREATE VIEW "+ИмяПредставления+" AS
|SELECT
| "+стрКолонки+"
|FROM _1SJourn (NoLock)
|";
Возврат СоздатьПредставление(ИмяПредставления, ТекстЗапроса, фПересоздавать);
КонецФункции
|
|
27
ADirks
19.12.17
✎
08:26
|
(25) работает, на ngs.ru
|
|
28
Изучаю1С8
19.12.17
✎
08:27
|
(27) Ага понял, пульну спс)
|
|
29
toypaul
гуру
19.12.17
✎
08:37
|
(20) Андрей, привет. Ваще никаких претензий не имею :) На последнем месте работы просто ToySQL была куплена.
|
|
30
dk
20.12.17
✎
11:19
|
поле datetimeiddoc чутка хитрее в движениях регистра оказалось
// На основе материалов
//
// (С) Вахрин Андрей Викторович
МД = СоздатьОбъект("MetaDataWork");
СКЛ = СоздатьОбъект("ODBCRecordSet");
Префикс = "";
ИмяОбъекта = Префикс+"Журнал";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+ИмяОбъекта+"
|AS
|SELECT DATE_TIME_IDDOC ДатаДок, IDDOC Ссылка, IDDOCDEF Вид, DOCNO Номер, Closed Проведен, ISMARK ПометкаУдаления
| ";
Для инд = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Если Метаданные.ОбщийРеквизитДокумента(инд).Сортировка = 1 Тогда
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.ОбщийРеквизитДокумента(инд)) + " "+
Метаданные.ОбщийРеквизитДокумента(инд).Идентификатор;
КонецЕсли;
КонецЦикла;
стр = стр + "
|FROM dbo._1SJOURN";
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не создан журнал документов...", "!");
КонецПопытки;
// Документы
Для инд = 1 По Метаданные.Документ() Цикл
ИмяОбъекта = Префикс+"Док_"+ Метаданные.Документ(инд).Идентификатор;
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+ИмяОбъекта + "
|AS
|SELECT IDDOC Ссылка, "+ МД.ИДОбъекта(Метаданные.Документ(инд)) + " Вид";
Для рек = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Если Метаданные.ОбщийРеквизитДокумента(рек).Сортировка = 0 Тогда
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.ОбщийРеквизитДокумента(рек)) + " "+
Метаданные.ОбщийРеквизитДокумента(рек).Идентификатор;
КонецЕсли;
КонецЦикла;
Для рек = 1 По Метаданные.Документ(инд).РеквизитШапки() Цикл
стр = стр + "
| , sp"+ МД.ИДОбъекта(Метаданные.Документ(инд).РеквизитШапки(рек)) + " "+
Метаданные.Документ(инд).РеквизитШапки(рек).Идентификатор;
КонецЦикла;
стр = стр + "
|FROM dbo.DH"+ МД.ИДОбъекта(Метаданные.Документ(инд));
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы шапки документов... "+ Метаданные.Документ(инд).Идентификатор, "!");
КонецПопытки;
// Табличная часть
Если Метаданные.Документ(инд).РеквизитТабличнойЧасти() <> 0 Тогда
ИмяОбъекта = Префикс+"Док_"+Метаданные.Документ(инд).Идентификатор+"_ТЧ";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo." + Префикс + ИмяОбъекта + "
|AS
|SELECT IDDOC Ссылка, "+ МД.ИДОбъекта(Метаданные.Документ(инд)) + " Вид
|, LINENO_ НомерСтроки";
Для рек = 1 По Метаданные.Документ(инд).РеквизитТабличнойЧасти() Цикл
стр = стр + "
| , sp"+ МД.ИДОбъекта(Метаданные.Документ(инд).РеквизитТабличнойЧасти(рек)) + " "+
Метаданные.Документ(инд).РеквизитТабличнойЧасти(рек).Идентификатор;
КонецЦикла;
стр = стр + "
|FROM dbo.DT"+ МД.ИДОбъекта(Метаданные.Документ(инд));
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы табличные части документов... "+ Метаданные.Документ(инд).Идентификатор, "!");
КонецПопытки;
КонецЕсли;
КонецЦикла;
// Справочники
Для инд = 1 По Метаданные.Справочник() Цикл
ИмяОбъекта = Префикс+"Спр_"+ Метаданные.Справочник(инд).Идентификатор;
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+ИмяОбъекта + "
|AS
|SELECT ID Ссылка
|, ISMARK ПометкаУдаления" +
?(Метаданные.Справочник(инд).ДлинаКода <> 0, ", CODE Код", "") +
?(Метаданные.Справочник(инд).ДлинаНаименования <> 0, ", DESCR Наименование", "") +
", " + МД.ИДОбъекта(Метаданные.Справочник(инд)) + " Вид";
Если СокрЛП(Метаданные.Справочник(инд).Владелец) <> "Метаданные" Тогда
стр = стр + ", PARENTEXT Владелец";
КонецЕсли;
Если Метаданные.Справочник(инд).КоличествоУровней <> 1 Тогда
стр = стр + ", PARENTID Родитель
|, ISFOLDER ЭтоГруппа";
КонецЕсли;
Для рек = 1 По Метаданные.Справочник(инд).Реквизит() Цикл
Если Метаданные.Справочник(инд).Реквизит(рек).Периодический = 1 Тогда
Продолжить;
КонецЕсли;
стр = стр + "
| , sp"+ МД.ИДОбъекта(Метаданные.Справочник(инд).Реквизит(рек)) + " "+
Метаданные.Справочник(инд).Реквизит(рек).Идентификатор;
КонецЦикла;
стр = стр + "
|FROM dbo.SC" + МД.ИДОбъекта(Метаданные.Справочник(инд));
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы справочники... " + Метаданные.Справочник(инд).Идентификатор, "!");
КонецПопытки;
КонецЦикла;
// периодические значения реквизитов справочников
ИмяОбъекта = Префикс+"Периодические";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "";
Для инд = 1 По Метаданные.Справочник() Цикл
тСпр = Метаданные.Справочник(инд);
Для чРек = 1 По тСпр.Реквизит() Цикл
тРек = тСпр.Реквизит(чРек);
Если тРек.Периодический = 1 Тогда
стр = стр + ?(СтрДлина(стр) = 0, "", "
|UNION ALL
|");
стр = стр +
"select 'Спр"+ тСпр.Идентификатор + "' Справочник"+ ", '"+ тРек.Идентификатор + "
|' Реквизит, S.ID Ссылка, C.DATE Дата, C.VALUE Значение
|FROM SC"+ МД.ИДОбъекта(тСпр) + " S, _1SCONST C WHERE S.ID = C.OBJID";
КонецЕсли;
КонецЦикла;
КонецЦикла;
стр = "CREATE VIEW dbo."+ИмяОбъекта+"
|AS
|" + стр;
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы периодические... ", "!");
КонецПопытки;
// константы
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+Префикс+"Константы");
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+Префикс+"Константы
|AS
|SELECT C1.ID ID
| , C2.Идентификатор Идентификатор
| , C2.Периодическая Периодическая
| , C1.DATE Дата
| , C1.VALUE Значение
|FROM _1SCONST C1, Конст C2
|WHERE C1.OBJID = ' 0 '
| AND C1.ID = C2.ID";
Попытка
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не созданы константы... ", "!");
КонецПопытки;
// Периодические реквизиты
Попытка
СКЛ.Выполнить("CREATE Table dbo."+Префикс+"Конст
|(ID Char(9), Идентификатор Char(60), Периодическая Int)");
Исключение
Сообщить("Не создана таблица Конст", "!");
КонецПопытки;
стр = "DELETE FROM "+Префикс+"Конст";
Попытка
СКЛ.Выполнить(стр);
Исключение
КонецПопытки;
Для инд = 1 По Метаданные.Константа() Цикл
тКонст = Метаданные.Константа(инд);
Попытка
СКЛ.Выполнить("INSERT INTO "+Префикс+"Конст (ID,Идентификатор,Периодическая)
| VALUES ('"+ МД.ИДОбъекта(тКонст) + "','"+ тКонст.Идентификатор + "',"+ тКонст.Периодический + ")");
Исключение
КонецПопытки;
КонецЦикла;
// Перечисления
Попытка
стр = "CREATE Table dbo."+Префикс+"Перечисления
|(Вид char(30),Значение char(30),ID char(9))";
СКЛ.Выполнить(стр);
Исключение
КонецПопытки;
стр = "DELETE FROM "+Префикс+"Перечисления";
Попытка
СКЛ.Выполнить(стр);
Исключение
КонецПопытки;
Для инд = 1 По Метаданные.Перечисление() Цикл
пер = Перечисление.ПолучитьАтрибут(Метаданные.Перечисление(инд).Идентификатор);
Для инд1 = 1 По пер.КоличествоЗначений() Цикл
стр = "INSERT INTO "+Префикс+"Перечисления (Вид, Значение, ID) VALUES
| ('"+ Метаданные.Перечисление(инд).Идентификатор + "',
| '"+ пер.ЗначениеПоНомеру(инд1).Идентификатор() + "',
| '"+ МД.ЗначениеВСтрокуБД(пер.ЗначениеПоНомеру(инд1)) + "')";
Попытка
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не созданы перечисления...", "!");
КонецПопытки;
КонецЦикла;
КонецЦикла;
// Регистры
Для инд = 1 По Метаданные.Регистр() Цикл
ИмяОбъекта = Префикс+"Рег_"+ Метаданные.Регистр(инд).Идентификатор;
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
флЕстьДатаТайм = Метаданные.Регистр(инд).БыстраяОбработкаДвижений;
Если флЕстьДатаТайм = 0 Тогда
// Проверим Измерения
Для рек = 1 По Метаданные.Регистр(инд).Измерение() Цикл
флЕстьДатаТайм = Метаданные.Регистр(инд).Измерение(рек).ОтборДвижений;
Если флЕстьДатаТайм = 1 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли; //Если флЕстьДатаТайм = 0 Тогда
////Если флЕстьДатаТайм = 0 Тогда
//// // Проверим реквизиты
//// Для рек = 1 По Метаданные.Регистр(инд).Реквизит() Цикл
//// флЕстьДатаТайм = Метаданные.Регистр(инд).Реквизит(рек).ОтборДвижений;
//// Если флЕстьДатаТайм = 1 Тогда
//// Прервать;
//// КонецЕсли;
//// КонецЦикла;
////КонецЕсли; //Если флЕстьДатаТайм = 0 Тогда
стр = "CREATE VIEW dbo."+ИмяОбъекта + "
|AS
|SELECT IDDOC Ссылка, "+ МД.ИДОбъекта(Метаданные.Регистр(инд)) + " Вид
|, LINENO_ НомерСтроки
|, ACTNO НомерДвижения
//|, CASE WHEN DEBKRED = 0 THEN '+' ELSE '-' END Движение
|, DEBKRED Движение
|"+?(флЕстьДатаТайм = 1,", IDDOCDEF ВидДокумента","") +"
|"+?(флЕстьДатаТайм = 1,", DATE_TIME_IDDOC ДатаВремяИдДок","") +"
//|"+?(флЕстьДатаТайм = 1,", dbo.datetime_1s(DATE_TIME_IDDOC) ДатаВремя","") +"
|";
// Измерения
Для рек = 1 По Метаданные.Регистр(инд).Измерение() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор;
Если Метаданные.Регистр(инд).Измерение(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
// Ресурсы
Для рек = 1 По Метаданные.Регистр(инд).Ресурс() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор;
Если Метаданные.Регистр(инд).Ресурс(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
// Реквизиты
Для рек = 1 По Метаданные.Регистр(инд).Реквизит() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Реквизит(рек)) + " "+
Метаданные.Регистр(инд).Реквизит(рек).Идентификатор;
Если Метаданные.Регистр(инд).Реквизит(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Реквизит(рек)) + " "+
Метаданные.Регистр(инд).Реквизит(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
стр = стр + "
|FROM dbo.RA"+ МД.ИДОбъекта(Метаданные.Регистр(инд));
Попытка
//Сообщить(стр);
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы движения регистра... "+ Метаданные.Регистр(инд).Идентификатор, "!");
КонецПопытки;
// Итоги
ИмяОбъекта = Префикс+"Рег_"+Метаданные.Регистр(инд).Идентификатор+"_Итоги";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo." + ИмяОбъекта + "
|AS
|SELECT "+ МД.ИДОбъекта(Метаданные.Регистр(инд)) + " Вид
|, PERIOD ДатаИтогов";
// Измерения
Для рек = 1 По Метаданные.Регистр(инд).Измерение() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор;
Если Метаданные.Регистр(инд).Измерение(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
// Ресурсы
Для рек = 1 По Метаданные.Регистр(инд).Ресурс() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор;
Если Метаданные.Регистр(инд).Ресурс(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
стр = стр + "
|FROM dbo.RG"+ МД.ИДОбъекта(Метаданные.Регистр(инд));
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы итоги регистра... "+ Метаданные.Регистр(инд).Идентификатор, "!");
КонецПопытки;
КонецЦикла;
Сообщить("Готово!!!");
|
|
31
Lokli
25.12.17
✎
13:46
|
(30) А перечисления? )
|
|
32
Franchiser
гуру
25.12.17
✎
13:57
|
(31) а перечисления в МД
|
|
33
dk
26.12.17
✎
16:16
|
Процедура Сформировать()
// На основе материалов
//
// (С) Вахрин Андрей Викторович
МД = СоздатьОбъект("MetaDataWork");
СКЛ = СоздатьОбъект("ODBCRecordSet");
Префикс = "";
ИмяОбъекта = Префикс+"Журнал";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+ИмяОбъекта+"
|AS
|SELECT DATE_TIME_IDDOC ДатаДок, IDDOC Ссылка, IDDOCDEF Вид, DOCNO Номер, Closed Проведен, ISMARK ПометкаУдаления
| ";
Для инд = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Если Метаданные.ОбщийРеквизитДокумента(инд).Сортировка = 1 Тогда
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.ОбщийРеквизитДокумента(инд)) + " "+
Метаданные.ОбщийРеквизитДокумента(инд).Идентификатор;
КонецЕсли;
КонецЦикла;
стр = стр + "
|FROM dbo._1SJOURN (NOLOCK)";
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не создан журнал документов...", "!");
Сообщить(стр);
КонецПопытки;
// Документы
Для инд = 1 По Метаданные.Документ() Цикл
ИмяОбъекта = Префикс+"Док_"+ Метаданные.Документ(инд).Идентификатор;
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+ИмяОбъекта + "
|AS
|SELECT IDDOC Ссылка, "+ МД.ИДОбъекта(Метаданные.Документ(инд)) + " Вид";
Для рек = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Если Метаданные.ОбщийРеквизитДокумента(рек).Сортировка = 0 Тогда
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.ОбщийРеквизитДокумента(рек)) + " "+
Метаданные.ОбщийРеквизитДокумента(рек).Идентификатор;
КонецЕсли;
КонецЦикла;
Для рек = 1 По Метаданные.Документ(инд).РеквизитШапки() Цикл
стр = стр + "
| , sp"+ МД.ИДОбъекта(Метаданные.Документ(инд).РеквизитШапки(рек)) + " "+
Метаданные.Документ(инд).РеквизитШапки(рек).Идентификатор;
КонецЦикла;
стр = стр + "
|FROM dbo.DH"+ МД.ИДОбъекта(Метаданные.Документ(инд)) + " (NOLOCK)";
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы шапки документов... "+ Метаданные.Документ(инд).Идентификатор, "!");
Сообщить(стр);
КонецПопытки;
// Табличная часть
Если Метаданные.Документ(инд).РеквизитТабличнойЧасти() <> 0 Тогда
ИмяОбъекта = Префикс+"Док_"+Метаданные.Документ(инд).Идентификатор+"_ТЧ";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo." + Префикс + ИмяОбъекта + "
|AS
|SELECT IDDOC Ссылка, "+ МД.ИДОбъекта(Метаданные.Документ(инд)) + " Вид
|, LINENO_ НомерСтроки";
Для рек = 1 По Метаданные.Документ(инд).РеквизитТабличнойЧасти() Цикл
стр = стр + "
| , sp"+ МД.ИДОбъекта(Метаданные.Документ(инд).РеквизитТабличнойЧасти(рек)) + " "+
Метаданные.Документ(инд).РеквизитТабличнойЧасти(рек).Идентификатор;
КонецЦикла;
стр = стр + "
|FROM dbo.DT"+ МД.ИДОбъекта(Метаданные.Документ(инд)) + " (NOLOCK)";
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы табличные части документов... "+ Метаданные.Документ(инд).Идентификатор, "!");
Сообщить(стр);
КонецПопытки;
КонецЕсли;
КонецЦикла;
// Справочники
Для инд = 1 По Метаданные.Справочник() Цикл
ИмяОбъекта = Префикс+"Спр_"+ Метаданные.Справочник(инд).Идентификатор;
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+ИмяОбъекта + "
|AS
|SELECT ID Ссылка
|, ISMARK ПометкаУдаления" +
?(Метаданные.Справочник(инд).ДлинаКода <> 0, ", CODE Код", "") +
?(Метаданные.Справочник(инд).ДлинаНаименования <> 0, ", DESCR Наименование", "") +
", " + МД.ИДОбъекта(Метаданные.Справочник(инд)) + " Вид";
Если СокрЛП(Метаданные.Справочник(инд).Владелец) <> "Метаданные" Тогда
стр = стр + ", PARENTEXT Владелец";
КонецЕсли;
Если Метаданные.Справочник(инд).КоличествоУровней <> 1 Тогда
стр = стр + ", PARENTID Родитель
|, ISFOLDER ЭтоГруппа";
КонецЕсли;
Для рек = 1 По Метаданные.Справочник(инд).Реквизит() Цикл
Если Метаданные.Справочник(инд).Реквизит(рек).Периодический = 1 Тогда
Продолжить;
КонецЕсли;
стр = стр + "
| , sp"+ МД.ИДОбъекта(Метаданные.Справочник(инд).Реквизит(рек)) + " "+
Метаданные.Справочник(инд).Реквизит(рек).Идентификатор;
КонецЦикла;
стр = стр + "
|FROM dbo.SC" + МД.ИДОбъекта(Метаданные.Справочник(инд)) + " (NOLOCK)";
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы справочники... " + Метаданные.Справочник(инд).Идентификатор, "!");
Сообщить(стр);
КонецПопытки;
КонецЦикла;
// периодические значения реквизитов справочников
ИмяОбъекта = Префикс+"Периодические";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "";
Для инд = 1 По Метаданные.Справочник() Цикл
тСпр = Метаданные.Справочник(инд);
Для чРек = 1 По тСпр.Реквизит() Цикл
тРек = тСпр.Реквизит(чРек);
Если тРек.Периодический = 1 Тогда
стр = стр + ?(СтрДлина(стр) = 0, "", "
|UNION ALL
|");
стр = стр +
"select 'Спр"+ тСпр.Идентификатор + "' Справочник"+ ", '"+ тРек.Идентификатор + "
|' Реквизит, S.ID Ссылка, C.DATE Дата, C.VALUE Значение
|FROM SC"+ МД.ИДОбъекта(тСпр) + " S (NOLOCK), _1SCONST C (NOLOCK) WHERE S.ID = C.OBJID";
КонецЕсли;
КонецЦикла;
КонецЦикла;
стр = "CREATE VIEW dbo."+ИмяОбъекта+"
|AS
|" + стр;
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы периодические... ", "!");
Сообщить(стр);
КонецПопытки;
// константы
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+Префикс+"Константы");
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+Префикс+"Константы
|AS
|SELECT C1.ID ID
| , C2.Идентификатор Идентификатор
| , C2.Периодическая Периодическая
| , C1.DATE Дата
| , C1.VALUE Значение
|FROM _1SCONST C1 (NOLOCK), Конст C2 (NOLOCK)
|WHERE C1.OBJID = ' 0 '
| AND C1.ID = C2.ID";
Попытка
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не созданы константы... ", "!");
Сообщить(стр);
КонецПопытки;
// Периодические реквизиты
Попытка
СКЛ.Выполнить("CREATE Table dbo."+Префикс+"Конст
|(ID Char(9), Идентификатор Char(60), Периодическая Int)");
Исключение
Сообщить("Не создана таблица Конст", "!");
КонецПопытки;
стр = "DELETE FROM "+Префикс+"Конст";
Попытка
СКЛ.Выполнить(стр);
Исключение
КонецПопытки;
Для инд = 1 По Метаданные.Константа() Цикл
тКонст = Метаданные.Константа(инд);
Попытка
СКЛ.Выполнить("INSERT INTO "+Префикс+"Конст (ID,Идентификатор,Периодическая)
| VALUES ('"+ МД.ИДОбъекта(тКонст) + "','"+ тКонст.Идентификатор + "',"+ тКонст.Периодический + ")");
Исключение
КонецПопытки;
КонецЦикла;
// Перечисления
Попытка
стр = "CREATE Table dbo."+Префикс+"Перечисления
|(Вид char(30),Значение char(30),ID char(9))";
СКЛ.Выполнить(стр);
Исключение
КонецПопытки;
стр = "DELETE FROM "+Префикс+"Перечисления";
Попытка
СКЛ.Выполнить(стр);
Исключение
КонецПопытки;
Для инд = 1 По Метаданные.Перечисление() Цикл
пер = Перечисление.ПолучитьАтрибут(Метаданные.Перечисление(инд).Идентификатор);
Для инд1 = 1 По пер.КоличествоЗначений() Цикл
стр = "INSERT INTO "+Префикс+"Перечисления (Вид, Значение, ID) VALUES
| ('"+ Метаданные.Перечисление(инд).Идентификатор + "',
| '"+ пер.ЗначениеПоНомеру(инд1).Идентификатор() + "',
| '"+ МД.ЗначениеВСтрокуБД(пер.ЗначениеПоНомеру(инд1)) + "')";
Попытка
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не созданы перечисления...", "!");
Сообщить(стр);
КонецПопытки;
КонецЦикла;
КонецЦикла;
// Создадим ф-цию конвертации времени
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'datetime_1s','FN')")) = 1 Тогда
// Создадим ф-цию
Стр = "
|
|CREATE FUNCTION [dbo].[datetime_1s]
|(
| @dtm varchar(14)
|)
|RETURNS datetime
|AS
|BEGIN
| declare @tm varchar(6);
| set @tm = LTRIM(RTRIM(SUBSTRING(@dtm, 9, 6)));
| declare abc char(36);
| set abc = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
| declare ind int;
| declare @n int;
| declare ms bigint;
| declare @dt datetime;
| declare @out varchar(8);
| set @out = '';
| declare c char(1);
| set @n = 1;
| set ms = 0;
| while @n<LEN(@tm) + 1
| begin
| set c = SUBSTRING(@tm, @n, @n);
| set ind = CHARINDEX(c, abc)-1;
| set ms = ms * 36 + ind;
| set @n = @n + 1;
| end;
| set ms = ms / 10000;
|
| declare @h int;
| declare m int;
| declare @s int;
| set @h = CAST(ms/3600 AS int);
| set ms = ms - @h*3600;
| set m = cast(ms / 60 as int);
|
| set @s = ms - m*60;
| set @dt = cast( Substring(@dtm, 7, 2) + '.' +
| Substring(@dtm, 5, 2) + '.' +
| Substring(@dtm, 1, 4) + ' ' +
|
| right('0' + cast(@h as varchar(2)), 2) + ':' +
| right('0' + cast(m as varchar(2)), 2) + ':' +
| right('0' + cast(@s as varchar(2)), 2) as datetime);
|
| RETURN @dt;
|
|END
|";
Попытка
СКЛ.ВыполнитьСкалярный(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'datetime_1s','FN')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не создана ф-ция конвертации времени... ", "!");
Сообщить(стр);
КонецПопытки;
КонецЕсли; //Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'datetime_1s','FN')")) = 1 Тогда
// Регистры
Для инд = 1 По Метаданные.Регистр() Цикл
ИмяОбъекта = Префикс+"Рег_"+ Метаданные.Регистр(инд).Идентификатор;
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
флЕстьДатаТайм = Метаданные.Регистр(инд).БыстраяОбработкаДвижений;
Если флЕстьДатаТайм = 0 Тогда
// Проверим Измерения
Для рек = 1 По Метаданные.Регистр(инд).Измерение() Цикл
флЕстьДатаТайм = Метаданные.Регистр(инд).Измерение(рек).ОтборДвижений;
Если флЕстьДатаТайм = 1 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли; //Если флЕстьДатаТайм = 0 Тогда
////Если флЕстьДатаТайм = 0 Тогда
//// // Проверим реквизиты
//// Для рек = 1 По Метаданные.Регистр(инд).Реквизит() Цикл
//// флЕстьДатаТайм = Метаданные.Регистр(инд).Реквизит(рек).ОтборДвижений;
//// Если флЕстьДатаТайм = 1 Тогда
//// Прервать;
//// КонецЕсли;
//// КонецЦикла;
////КонецЕсли; //Если флЕстьДатаТайм = 0 Тогда
стр = "CREATE VIEW dbo."+ИмяОбъекта + "
|AS
|SELECT IDDOC Ссылка, "+ МД.ИДОбъекта(Метаданные.Регистр(инд)) + " Вид
|, LINENO_ НомерСтроки
|, ACTNO НомерДвижения
//|, CASE WHEN DEBKRED = 0 THEN '+' ELSE '-' END Движение
|, DEBKRED Движение
|"+?(флЕстьДатаТайм = 1,", IDDOCDEF ВидДокумента","") +"
|"+?(флЕстьДатаТайм = 1,", DATE_TIME_IDDOC ДатаВремяИдДок","") +"
|"+?(флЕстьДатаТайм = 1,", dbo.datetime_1s(DATE_TIME_IDDOC) ДатаВремя","") +"
|";
// Измерения
Для рек = 1 По Метаданные.Регистр(инд).Измерение() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор;
Если Метаданные.Регистр(инд).Измерение(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
// Ресурсы
Для рек = 1 По Метаданные.Регистр(инд).Ресурс() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор;
Если Метаданные.Регистр(инд).Ресурс(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
// Реквизиты
Для рек = 1 По Метаданные.Регистр(инд).Реквизит() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Реквизит(рек)) + " "+
Метаданные.Регистр(инд).Реквизит(рек).Идентификатор;
Если Метаданные.Регистр(инд).Реквизит(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Реквизит(рек)) + " "+
Метаданные.Регистр(инд).Реквизит(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
стр = стр + "
|FROM dbo.RA"+ МД.ИДОбъекта(Метаданные.Регистр(инд)) + " (NOLOCK)";
Попытка
//Сообщить(стр);
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы движения регистра... "+ Метаданные.Регистр(инд).Идентификатор, "!");
Сообщить(стр);
КонецПопытки;
// Итоги
ИмяОбъекта = Префикс+"Рег_"+Метаданные.Регистр(инд).Идентификатор+"_Итоги";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo." + ИмяОбъекта + "
|AS
|SELECT "+ МД.ИДОбъекта(Метаданные.Регистр(инд)) + " Вид
|, PERIOD ДатаИтогов";
// Измерения
Для рек = 1 По Метаданные.Регистр(инд).Измерение() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор;
Если Метаданные.Регистр(инд).Измерение(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
// Ресурсы
Для рек = 1 По Метаданные.Регистр(инд).Ресурс() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор;
Если Метаданные.Регистр(инд).Ресурс(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
стр = стр + "
|FROM dbo.RG"+ МД.ИДОбъекта(Метаданные.Регистр(инд)) + " (NOLOCK)";
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы итоги регистра... "+ Метаданные.Регистр(инд).Идентификатор, "!");
Сообщить(стр);
КонецПопытки;
КонецЦикла;
Сообщить("Готово!!!");
КонецПроцедуры
|
|
34
dk
26.12.17
✎
16:17
|
(33) добавил ф-цию и NOLOCKи
(31) перечисления тут есть - см таблицу Перечисления
|
|
35
Злопчинский
26.12.17
✎
19:42
|
(34) а для тупых - этот код что делает? - создает на скуле привычные 1Сные представления?
|
|
36
dk
27.12.17
✎
08:15
|
(35) да, переводит скульные sc8654 в привычные Спр_Контрагенты
|
|
37
Бертыш
27.12.17
✎
09:05
|
(29) Я в какие-то лохматые годы покупал компоненту вместе с книжкой. Куда я потом что дел неизвестно. История об этом умалчивает.
|
|
38
Злопчинский
27.12.17
✎
09:13
|
(36) полезная вещь
|
|
39
dk
27.12.17
✎
12:20
|
вернул старую функцию получения времени - моя косячила
// На основе материалов
//
// (С) Вахрин Андрей Викторович
МД = СоздатьОбъект("MetaDataWork");
СКЛ = СоздатьОбъект("ODBCRecordSet");
Префикс = "";
ИмяОбъекта = Префикс+"Журнал";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+ИмяОбъекта+"
|AS
|SELECT DATE_TIME_IDDOC ДатаДок, IDDOC Ссылка, IDDOCDEF Вид, DOCNO Номер, Closed Проведен, ISMARK ПометкаУдаления
| ";
Для инд = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Если Метаданные.ОбщийРеквизитДокумента(инд).Сортировка = 1 Тогда
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.ОбщийРеквизитДокумента(инд)) + " "+
Метаданные.ОбщийРеквизитДокумента(инд).Идентификатор;
КонецЕсли;
КонецЦикла;
стр = стр + "
|FROM dbo._1SJOURN (NOLOCK)";
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не создан журнал документов...", "!");
Сообщить(стр);
КонецПопытки;
// Документы
Для инд = 1 По Метаданные.Документ() Цикл
ИмяОбъекта = Префикс+"Док_"+ Метаданные.Документ(инд).Идентификатор;
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+ИмяОбъекта + "
|AS
|SELECT IDDOC Ссылка, "+ МД.ИДОбъекта(Метаданные.Документ(инд)) + " Вид";
Для рек = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Если Метаданные.ОбщийРеквизитДокумента(рек).Сортировка = 0 Тогда
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.ОбщийРеквизитДокумента(рек)) + " "+
Метаданные.ОбщийРеквизитДокумента(рек).Идентификатор;
КонецЕсли;
КонецЦикла;
Для рек = 1 По Метаданные.Документ(инд).РеквизитШапки() Цикл
стр = стр + "
| , sp"+ МД.ИДОбъекта(Метаданные.Документ(инд).РеквизитШапки(рек)) + " "+
Метаданные.Документ(инд).РеквизитШапки(рек).Идентификатор;
КонецЦикла;
стр = стр + "
|FROM dbo.DH"+ МД.ИДОбъекта(Метаданные.Документ(инд)) + " (NOLOCK)";
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы шапки документов... "+ Метаданные.Документ(инд).Идентификатор, "!");
Сообщить(стр);
КонецПопытки;
// Табличная часть
Если Метаданные.Документ(инд).РеквизитТабличнойЧасти() <> 0 Тогда
ИмяОбъекта = Префикс+"Док_"+Метаданные.Документ(инд).Идентификатор+"_ТЧ";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo." + Префикс + ИмяОбъекта + "
|AS
|SELECT IDDOC Ссылка, "+ МД.ИДОбъекта(Метаданные.Документ(инд)) + " Вид
|, LINENO_ НомерСтроки";
Для рек = 1 По Метаданные.Документ(инд).РеквизитТабличнойЧасти() Цикл
стр = стр + "
| , sp"+ МД.ИДОбъекта(Метаданные.Документ(инд).РеквизитТабличнойЧасти(рек)) + " "+
Метаданные.Документ(инд).РеквизитТабличнойЧасти(рек).Идентификатор;
КонецЦикла;
стр = стр + "
|FROM dbo.DT"+ МД.ИДОбъекта(Метаданные.Документ(инд)) + " (NOLOCK)";
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы табличные части документов... "+ Метаданные.Документ(инд).Идентификатор, "!");
Сообщить(стр);
КонецПопытки;
КонецЕсли;
КонецЦикла;
// Справочники
Для инд = 1 По Метаданные.Справочник() Цикл
ИмяОбъекта = Префикс+"Спр_"+ Метаданные.Справочник(инд).Идентификатор;
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+ИмяОбъекта + "
|AS
|SELECT ID Ссылка
|, ISMARK ПометкаУдаления" +
?(Метаданные.Справочник(инд).ДлинаКода <> 0, ", CODE Код", "") +
?(Метаданные.Справочник(инд).ДлинаНаименования <> 0, ", DESCR Наименование", "") +
", " + МД.ИДОбъекта(Метаданные.Справочник(инд)) + " Вид";
Если СокрЛП(Метаданные.Справочник(инд).Владелец) <> "Метаданные" Тогда
стр = стр + ", PARENTEXT Владелец";
КонецЕсли;
Если Метаданные.Справочник(инд).КоличествоУровней <> 1 Тогда
стр = стр + ", PARENTID Родитель
|, ISFOLDER ЭтоГруппа";
КонецЕсли;
Для рек = 1 По Метаданные.Справочник(инд).Реквизит() Цикл
Если Метаданные.Справочник(инд).Реквизит(рек).Периодический = 1 Тогда
Продолжить;
КонецЕсли;
стр = стр + "
| , sp"+ МД.ИДОбъекта(Метаданные.Справочник(инд).Реквизит(рек)) + " "+
Метаданные.Справочник(инд).Реквизит(рек).Идентификатор;
КонецЦикла;
стр = стр + "
|FROM dbo.SC" + МД.ИДОбъекта(Метаданные.Справочник(инд)) + " (NOLOCK)";
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы справочники... " + Метаданные.Справочник(инд).Идентификатор, "!");
Сообщить(стр);
КонецПопытки;
КонецЦикла;
// периодические значения реквизитов справочников
ИмяОбъекта = Префикс+"Периодические";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "";
Для инд = 1 По Метаданные.Справочник() Цикл
тСпр = Метаданные.Справочник(инд);
Для чРек = 1 По тСпр.Реквизит() Цикл
тРек = тСпр.Реквизит(чРек);
Если тРек.Периодический = 1 Тогда
стр = стр + ?(СтрДлина(стр) = 0, "", "
|UNION ALL
|");
стр = стр +
"select 'Спр"+ тСпр.Идентификатор + "' Справочник"+ ", '"+ тРек.Идентификатор + "
|' Реквизит, S.ID Ссылка, C.DATE Дата, C.VALUE Значение
|FROM SC"+ МД.ИДОбъекта(тСпр) + " S (NOLOCK), _1SCONST C (NOLOCK) WHERE S.ID = C.OBJID";
КонецЕсли;
КонецЦикла;
КонецЦикла;
стр = "CREATE VIEW dbo."+ИмяОбъекта+"
|AS
|" + стр;
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы периодические... ", "!");
Сообщить(стр);
КонецПопытки;
// константы
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+Префикс+"Константы");
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo."+Префикс+"Константы
|AS
|SELECT C1.ID ID
| , C2.Идентификатор Идентификатор
| , C2.Периодическая Периодическая
| , C1.DATE Дата
| , C1.VALUE Значение
|FROM _1SCONST C1 (NOLOCK), Конст C2 (NOLOCK)
|WHERE C1.OBJID = ' 0 '
| AND C1.ID = C2.ID";
Попытка
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не созданы константы... ", "!");
Сообщить(стр);
КонецПопытки;
// Периодические реквизиты
Попытка
СКЛ.Выполнить("CREATE Table dbo."+Префикс+"Конст
|(ID Char(9), Идентификатор Char(60), Периодическая Int)");
Исключение
Сообщить("Не создана таблица Конст", "!");
КонецПопытки;
стр = "DELETE FROM "+Префикс+"Конст";
Попытка
СКЛ.Выполнить(стр);
Исключение
КонецПопытки;
Для инд = 1 По Метаданные.Константа() Цикл
тКонст = Метаданные.Константа(инд);
Попытка
СКЛ.Выполнить("INSERT INTO "+Префикс+"Конст (ID,Идентификатор,Периодическая)
| VALUES ('"+ МД.ИДОбъекта(тКонст) + "','"+ тКонст.Идентификатор + "',"+ тКонст.Периодический + ")");
Исключение
КонецПопытки;
КонецЦикла;
// Перечисления
Попытка
стр = "CREATE Table dbo."+Префикс+"Перечисления
|(Вид char(30),Значение char(30),ID char(9))";
СКЛ.Выполнить(стр);
Исключение
КонецПопытки;
стр = "DELETE FROM "+Префикс+"Перечисления";
Попытка
СКЛ.Выполнить(стр);
Исключение
КонецПопытки;
Для инд = 1 По Метаданные.Перечисление() Цикл
пер = Перечисление.ПолучитьАтрибут(Метаданные.Перечисление(инд).Идентификатор);
Для инд1 = 1 По пер.КоличествоЗначений() Цикл
стр = "INSERT INTO "+Префикс+"Перечисления (Вид, Значение, ID) VALUES
| ('"+ Метаданные.Перечисление(инд).Идентификатор + "',
| '"+ пер.ЗначениеПоНомеру(инд1).Идентификатор() + "',
| '"+ МД.ЗначениеВСтрокуБД(пер.ЗначениеПоНомеру(инд1)) + "')";
Попытка
СКЛ.Выполнить(стр);
Исключение
Сообщить("Не созданы перечисления...", "!");
Сообщить(стр);
КонецПопытки;
КонецЦикла;
КонецЦикла;
// Создадим ф-цию конвертации времени
Попытка
СКЛ.Выполнить("DROP FUNCTION [dbo].[datetime_1s]");
Исключение
КонецПопытки;
Стр = "
|
|CREATE FUNCTION [dbo].[datetime_1s]
|(
| val varchar(23)
|)
|RETURNS datetime
|AS
|BEGIN
|declare i int, @h int, m int, @s int
|declare @result datetime
|declare t char(8)
|
|set i = dbo.sp_toint(substring(val,9,6))
|
|set @h = ((i/10000) / 60) / 60
|set m = ((i/10000) / 60) - @h * 60
|set @s = (i/10000) - (@h * 60 * 60 + m * 60)
|
|set t = CASE WHEN @h < 10 THEN '0' + cast(@h as char(1)) ELSE cast(@h as char(2)) END + ':'
| + CASE WHEN m < 10 THEN '0' + cast(m as char(1)) ELSE cast(m as char(2)) END + ':'
| + CASE WHEN @s < 10 THEN '0' + cast(@s as char(1)) ELSE cast(@s as char(2)) END
|
| set @result = convert(datetime,(left(val,4)+'-'+substring(val,5,2)+'-'+substring(val,7,2)+' '+t),20)
|
|RETURN( @result )
|
|END
|";
Попытка
СКЛ.ВыполнитьСкалярный(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'datetime_1s','FN')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не создана ф-ция конвертации времени... ", "!");
Сообщить(стр);
КонецПопытки;
//КонецЕсли; //Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'datetime_1s','FN')")) = 1 Тогда
// Регистры
Для инд = 1 По Метаданные.Регистр() Цикл
ИмяОбъекта = Префикс+"Рег_"+ Метаданные.Регистр(инд).Идентификатор;
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
флЕстьДатаТайм = Метаданные.Регистр(инд).БыстраяОбработкаДвижений;
Если флЕстьДатаТайм = 0 Тогда
// Проверим Измерения
Для рек = 1 По Метаданные.Регистр(инд).Измерение() Цикл
флЕстьДатаТайм = Метаданные.Регистр(инд).Измерение(рек).ОтборДвижений;
Если флЕстьДатаТайм = 1 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли; //Если флЕстьДатаТайм = 0 Тогда
////Если флЕстьДатаТайм = 0 Тогда
//// // Проверим реквизиты
//// Для рек = 1 По Метаданные.Регистр(инд).Реквизит() Цикл
//// флЕстьДатаТайм = Метаданные.Регистр(инд).Реквизит(рек).ОтборДвижений;
//// Если флЕстьДатаТайм = 1 Тогда
//// Прервать;
//// КонецЕсли;
//// КонецЦикла;
////КонецЕсли; //Если флЕстьДатаТайм = 0 Тогда
стр = "CREATE VIEW dbo."+ИмяОбъекта + "
|AS
|SELECT IDDOC Ссылка, "+ МД.ИДОбъекта(Метаданные.Регистр(инд)) + " Вид
|, LINENO_ НомерСтроки
|, ACTNO НомерДвижения
//|, CASE WHEN DEBKRED = 0 THEN '+' ELSE '-' END Движение
|, DEBKRED Движение
|"+?(флЕстьДатаТайм = 1,", IDDOCDEF ВидДокумента","") +"
|"+?(флЕстьДатаТайм = 1,", DATE_TIME_IDDOC ДатаВремяИдДок","") +"
|"+?(флЕстьДатаТайм = 1,", dbo.datetime_1s(DATE_TIME_IDDOC) ДатаВремя","") +"
|";
// Измерения
Для рек = 1 По Метаданные.Регистр(инд).Измерение() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор;
Если Метаданные.Регистр(инд).Измерение(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
// Ресурсы
Для рек = 1 По Метаданные.Регистр(инд).Ресурс() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор;
Если Метаданные.Регистр(инд).Ресурс(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
// Реквизиты
Для рек = 1 По Метаданные.Регистр(инд).Реквизит() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Реквизит(рек)) + " "+
Метаданные.Регистр(инд).Реквизит(рек).Идентификатор;
Если Метаданные.Регистр(инд).Реквизит(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Реквизит(рек)) + " "+
Метаданные.Регистр(инд).Реквизит(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
стр = стр + "
|FROM dbo.RA"+ МД.ИДОбъекта(Метаданные.Регистр(инд)) + " (NOLOCK)";
Попытка
//Сообщить(стр);
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы движения регистра... "+ Метаданные.Регистр(инд).Идентификатор, "!");
Сообщить(стр);
КонецПопытки;
// Итоги
ИмяОбъекта = Префикс+"Рег_"+Метаданные.Регистр(инд).Идентификатор+"_Итоги";
Попытка
СКЛ.Выполнить("DROP VIEW dbo."+ИмяОбъекта);
Исключение
КонецПопытки;
стр = "CREATE VIEW dbo." + ИмяОбъекта + "
|AS
|SELECT "+ МД.ИДОбъекта(Метаданные.Регистр(инд)) + " Вид
|, PERIOD ДатаИтогов";
// Измерения
Для рек = 1 По Метаданные.Регистр(инд).Измерение() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор;
Если Метаданные.Регистр(инд).Измерение(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Измерение(рек)) + " "+
Метаданные.Регистр(инд).Измерение(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
// Ресурсы
Для рек = 1 По Метаданные.Регистр(инд).Ресурс() Цикл
стр = стр + ", sp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор;
Если Метаданные.Регистр(инд).Ресурс(рек).Тип = "Неопределенный" Тогда
стр = стр + ", tsp"+ МД.ИДОбъекта(Метаданные.Регистр(инд).Ресурс(рек)) + " "+
Метаданные.Регистр(инд).Ресурс(рек).Идентификатор + "_Доп";
КонецЕсли;
КонецЦикла;
стр = стр + "
|FROM dbo.RG"+ МД.ИДОбъекта(Метаданные.Регистр(инд)) + " (NOLOCK)";
Попытка
СКЛ.Выполнить(стр);
Если ПустоеЗначение(СКЛ.ВыполнитьСкалярный("SELECT OBJECT_ID(N'"+ИмяОбъекта+"','V')")) = 1 Тогда
А = 1 / 0;
КонецЕсли;
Исключение
Сообщить("Не созданы итоги регистра... "+ Метаданные.Регистр(инд).Идентификатор, "!");
Сообщить(стр);
КонецПопытки;
КонецЦикла;
Сообщить("Готово!!!");
|
|