Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Структура таблиц 77 в MS SQL

v7: Структура таблиц 77 в MS SQL
Я
   dk
 
18.12.17 - 11:41
Знаю про файл dds
Знаю про http://www.script-coding.com/v77tables.html
Не могу найти готового решения как в 8-ке в виде
справочник ХХХ таблице на скуле УУУУ, ЧЧЧЧ, ИИИИ
с описанием всех полей
Есть готовое для 77 + 1с++?
 
 
   dk
 
1 - 18.12.17 - 11:42
есть решения через парсер dds, но там поля и имена длинные сокращены
   mehfk
 
2 - 18.12.17 - 11:43
Парсер есть в составе 1с++ .
   Ёпрст
 
3 - 18.12.17 - 11:43
В 7.7 есть метапарсер имён. Поэтому, значть что где хранится не обязательно
   dk
 
4 - 18.12.17 - 11:43
угу, но лениво писать, наверняка готовое где-нить валяется - задача ведь универсальная
   Ёпрст
 
5 - 18.12.17 - 11:44
(4) писать что ?
   Ёпрст
 
6 - 18.12.17 - 11:45
возьми конструктор отчетов, если лень писать руками текст запроса
   dk
 
7 - 18.12.17 - 11:46
это для разрабов не из 1с надо
(5) прямо запускаем в 1с и получаем в текстовом виде
Справочник Номенклатура (SC31)
ПОле Код = CODE
Поле Наименование = DESCR
Поле Вид = SP2541
.....
   dk
 
8 - 18.12.17 - 11:46
и так по всем объектам метаданных
   Ёпрст
 
9 - 18.12.17 - 11:47
(7) дык отдай им словарь, делов то
   Ёпрст
 
10 - 18.12.17 - 11:47
ну или сам пиши, есть же метадатаворк, и там его методы - идОбъекта и т.д и т.п
 
 Рекламное место пустует
   dk
 
11 - 18.12.17 - 11:47
Не, там обрезанные наименования объектов - надо красиво
   dk
 
12 - 18.12.17 - 11:48
самому лень, но похоже придется
   Vakhrin
 
13 - 18.12.17 - 11:50
тут есть: http://vakhrin.com/?p=74
делает вьюхи с "человеческими" именами )
   dk
 
14 - 18.12.17 - 11:57
(13) спасибо
   АНДР
 
15 - 18.12.17 - 12:14
   Vakhrin
 
16 - 18.12.17 - 12:25
(15) "Для скачивания файла нужно иметь не менее 3х полезных ответа на форуме, либо тем с вопросами по работе в 1с."
   ADirks
 
17 - 18.12.17 - 12:38
Вьюшки это вообще знатная штука.
Как-то приходилось с одной польской программой обмен данными делать, так перевёл всё вьюшками на русский, и дело пошло :)
   toypaul
 
18 - 18.12.17 - 13:47
На последнем месте работы начальник писал такое дело на ToySQL. Все таблицы во вьюхи на SQL.
   АНДР
 
19 - 18.12.17 - 13:56
(18) А он знал, кто автор ToySQL? ;)
   Vakhrin
 
20 - 18.12.17 - 15:47
(18) Паша, я использовал 1С++ только потому, что на тот момент он был более доступен, чем ToySQL )
   dk
 
21 - 18.12.17 - 15:48

//*******************************************
Процедура Сформировать()

    // На основе материалов
    // http://vakhrin.com/?p=74
    // (С) Вахрин Андрей Викторович
    
    МД = СоздатьОбъект("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"+ МД.ИДОбъекта(Метаданные.Регистр(инд));
        Попытка
            СКЛ.Выполнить(стр);
        Исключение
            Сообщить("Не созданы итоги регистра... "+ Метаданные.Регистр(инд).Идентификатор);
        КонецПопытки;
    КонецЦикла;
    
    Сообщить("Готово!!!");
    
КонецПроцедуры

   dk
 
22 - 18.12.17 - 15:48
Добавил в (13) регистры
   dk
 
23 - 18.12.17 - 15:49
Vakhrin спасибо еще раз
   dk
 
24 - 19.12.17 - 08:20
Добавил проверок что действительно создаются вьюхи

//*******************************************
Процедура Сформировать()

    // На основе материалов
    // http://vakhrin.com/?p=74
    // (С) Вахрин Андрей Викторович
    
    МД = СоздатьОбъект("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;
            КонецЕсли;
        Исключение
            Сообщить("Не созданы итоги регистра... "+ Метаданные.Регистр(инд).Идентификатор, "!");
        КонецПопытки;
    КонецЦикла;
    
    Сообщить("Готово!!!");
    
КонецПроцедуры

   Изучаю1С8
 
25 - 19.12.17 - 08:23
(17) Алексей а у тебя почта работает?
   ADirks
 
26 - 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)
    |";
    
    Возврат СоздатьПредставление(ИмяПредставления, ТекстЗапроса, фПересоздавать);
КонецФункции
   ADirks
 
27 - 19.12.17 - 08:26
(25) работает, на ngs.ru
   Изучаю1С8
 
28 - 19.12.17 - 08:27
(27) Ага понял, пульну спс)
   toypaul
 
29 - 19.12.17 - 08:37
(20) Андрей, привет. Ваще никаких претензий не имею :) На последнем месте работы просто ToySQL была куплена.
   dk
 
30 - 20.12.17 - 11:19
поле datetimeiddoc чутка хитрее в движениях регистра оказалось

    // На основе материалов
    // http://vakhrin.com/?p=74
    // (С) Вахрин Андрей Викторович
    
    МД = СоздатьОбъект("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;
            КонецЕсли;
        Исключение
            Сообщить("Не созданы итоги регистра... "+ Метаданные.Регистр(инд).Идентификатор, "!");
        КонецПопытки;
    КонецЦикла;
    
    Сообщить("Готово!!!");

   Lokli
 
31 - 25.12.17 - 13:46
(30) А перечисления? )
   Franchiser
 
32 - 25.12.17 - 13:57
(31) а перечисления в МД
   dk
 
33 - 26.12.17 - 16:16

Процедура Сформировать()

    // На основе материалов
    // http://vakhrin.com/?p=74
    // (С) Вахрин Андрей Викторович
    
    МД = СоздатьОбъект("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;
            КонецЕсли;
        Исключение
            Сообщить("Не созданы итоги регистра... "+ Метаданные.Регистр(инд).Идентификатор, "!");
            Сообщить(стр);
        КонецПопытки;
    КонецЦикла;
    
    Сообщить("Готово!!!");
    
КонецПроцедуры

 
 
   dk
 
34 - 26.12.17 - 16:17
(33) добавил ф-цию и NOLOCKи
(31) перечисления тут есть - см таблицу Перечисления
   Злопчинский
 
35 - 26.12.17 - 19:42
(34) а для тупых - этот код что делает? - создает на скуле привычные 1Сные представления?
   dk
 
36 - 27.12.17 - 08:15
(35) да, переводит скульные sc8654 в привычные Спр_Контрагенты
http://www.picshare.ru/uploads/171227/ei7653Ih1o.png
   Бертыш
 
37 - 27.12.17 - 09:05
(29) Я в какие-то лохматые годы покупал компоненту вместе с книжкой. Куда я потом что дел неизвестно. История об этом умалчивает.
   Злопчинский
 
38 - 27.12.17 - 09:13
(36) полезная вещь
   dk
 
39 - 27.12.17 - 12:20
вернул старую функцию получения времени - моя косячила

    // На основе материалов
    // http://vakhrin.com/?p=74
    // (С) Вахрин Андрей Викторович
    
    МД = СоздатьОбъект("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;
            КонецЕсли;
        Исключение
            Сообщить("Не созданы итоги регистра... "+ Метаданные.Регистр(инд).Идентификатор, "!");
            Сообщить(стр);
        КонецПопытки;
    КонецЦикла;
    
    Сообщить("Готово!!!");



Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует