|
v7: Добавление одинакового реквизита в 2 базы для выполнения прямого запроса | ☑ | ||
---|---|---|---|---|
0
Franchiser
гуру
17.06.20
✎
11:18
|
Есть рабочая база 7.7 и тестовая база 7.7 (полученная из архива рабочей).
Нужно добавить в обе базы в справочник одинаковый реквизит так, чтобы он был в SQL и в файле DDS одинаковым, например SP12345. Как это проще сделать, не тратя время не восстановление базы? |
|||
1
Franchiser
гуру
17.06.20
✎
11:34
|
Как генерируется файл DDS, в файле MD есть информация о связи реквизитов 7.7 с полями sql?
|
|||
2
trad
17.06.20
✎
11:43
|
(0) добавить реквизит в одной ИБ, потом загрузить (не объединить) измененную конфигурацию в другой ИБ
|
|||
3
trad
17.06.20
✎
11:44
|
но если выполнять запросы с применением метапарсера 1с++, то можно этим вопросом не заморачиваться
|
|||
4
Ёпрст
17.06.20
✎
12:22
|
Ну или руками поменять ид реквизита в мд и пересоздать словарик, или и сам словарик потом ручками поправить
|
|||
5
Ёпрст
17.06.20
✎
12:22
|
ну и в табличке, поменять имя реквизита
|
|||
6
Franchiser
гуру
17.06.20
✎
12:35
|
(2) тогда все реквизиты заменятся из другого МД, а мне нужно только 1
|
|||
7
Franchiser
гуру
17.06.20
✎
12:36
|
(3) прямые запросы из 1с 8
|
|||
8
Franchiser
гуру
17.06.20
✎
12:37
|
(4) TurboMD или чем?
|
|||
9
trad
17.06.20
✎
13:06
|
(6) исходя из этого "полученная из архива рабочей" я подумал что исходно мд-шники одинаковые
|
|||
10
Franchiser
гуру
17.06.20
✎
13:10
|
(9) она восстановленная может год назад
|
|||
11
trad
17.06.20
✎
13:13
|
(7) у меня была такая вариация на тему:
1. пишу запросы с использованием метаимен 2. процедура выполнения получает хэш текста запроса 3. в РС по хэшу ищет пропарсенный текст запроса 3.1 если не находи, то запускает семерку по ОЛЕ.отомейшн, там парсит, и пару хэш результат парсинга в РС 4. выполняет пропарсенный текст запроса не будет работать только в случае применения ВТ |
|||
12
Franchiser
гуру
17.06.20
✎
13:20
|
(11) к сожалению уже запросы написаны без матаимен. Так в принципе я иногда занимаюсь парсингом DDS.
Про ВТ не понял, как разница, любые запросы парсятся. |
|||
13
Franchiser
гуру
17.06.20
✎
13:22
|
Интересно каким образом реализован парсинг в 1с++ в какой компоненте или скрипте, можно ли этот алгоритм куда то выщить в язык 1с8 или vbs и использовать в 8-ке ?
|
|||
14
trad
17.06.20
✎
13:28
|
(12) текст ВТ зависит от параметров
|
|||
15
ADirks
17.06.20
✎
13:30
|
(13) в SQL есть такая штука, как view'шки. Генеришь себе вьюшки для всего и вся, и пишешь запросы на чистом русском SQL, откуда угодно
типа например так Функция СоздатьПредставление_Документ(МетаДок, фПересоздавать) фОшибокНет = 1; ИмяДокумента = МетаДок.Идентификатор; ИмяТаблицы = РадугаСервис.ИмяТаблицыШапки(ИмяДокумента); ИмяТаблицыТЧ = РадугаСервис.ИмяТаблицыТабличнойЧасти(ИмяДокумента); сзРеквизиты = СоздатьОбъект("СписокЗначений"); сзРеквизиты.ДобавитьЗначение("IDDoc"); сзРеквизиты.ДобавитьЗначение("IDDoc идДок9"); Для н = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл МетаРекв = Метаданные.ОбщийРеквизитДокумента(н); Если МетаРекв.Сортировка = 0 Тогда ИмяРекв = МетаРекв.Идентификатор; КолонкаРекв = "SP"+РадугаСервис.ИДОбъекта(МетаРекв); сзРеквизиты.ДобавитьЗначение(КолонкаРекв+" "+ИмяРекв); КонецЕсли; КонецЦикла; Для н = 1 По МетаДок.РеквизитШапки() Цикл МетаРекв = МетаДок.РеквизитШапки(н); ИмяРекв = МетаРекв.Идентификатор; КолонкаРекв = "SP"+РадугаСервис.ИДОбъекта(МетаРекв); сзРеквизиты.ДобавитьЗначение(КолонкаРекв+" "+ИмяРекв); КонецЦикла; Для н = 1 По МетаДок.РеквизитТабличнойЧасти() Цикл МетаРекв = МетаДок.РеквизитТабличнойЧасти(н); Если МетаРекв.ИтогПоКолонке = 1 Тогда ИмяРекв = МетаРекв.Идентификатор; КолонкаРекв = "SP"+РадугаСервис.ИДОбъекта(МетаРекв); сзРеквизиты.ДобавитьЗначение(КолонкаРекв+" "+ИмяРекв); КонецЕсли; КонецЦикла; стрРеквизиты = СписокВСтроку(сзРеквизиты, ","+РазделительСтрок+СимволТабуляции); ИмяПредставления = "док"+ИмяДокумента; ТекстЗапроса = " |CREATE VIEW "+ИмяПредставления+" AS |SELECT | "+стрРеквизиты+" |FROM "+ИмяТаблицы+" (NoLock) |"; Если СоздатьПредставление(ИмяПредставления, ТекстЗапроса, фПересоздавать) = 0 Тогда фОшибокНет = 0; КонецЕсли; // Табличная часть Если МетаДок.РеквизитТабличнойЧасти() > 0 Тогда сзРеквизиты = СоздатьОбъект("СписокЗначений"); сзРеквизиты.ДобавитьЗначение("IDDoc"); сзРеквизиты.ДобавитьЗначение("IDDoc идДок9"); сзРеквизиты.ДобавитьЗначение("LineNo_"); сзРеквизиты.ДобавитьЗначение("LineNo_ НомерСтроки"); Для н = 1 По МетаДок.РеквизитТабличнойЧасти() Цикл МетаРекв = МетаДок.РеквизитТабличнойЧасти(н); ИмяРекв = МетаРекв.Идентификатор; КолонкаРекв = "SP"+РадугаСервис.ИДОбъекта(МетаРекв); сзРеквизиты.ДобавитьЗначение(КолонкаРекв+" "+ИмяРекв); КонецЦикла; стрРеквизиты = СписокВСтроку(сзРеквизиты, ","+РазделительСтрок+СимволТабуляции); ИмяПредставления = "докТЧ"+ИмяДокумента; ТекстЗапроса = " |CREATE VIEW "+ИмяПредставления+" AS |SELECT | "+стрРеквизиты+" |FROM "+ИмяТаблицыТЧ+" (NoLock) |"; Если СоздатьПредставление(ИмяПредставления, ТекстЗапроса, фПересоздавать) = 0 Тогда фОшибокНет = 0; КонецЕсли; КонецЕсли; Возврат 1; КонецФункции |
|||
16
ADirks
17.06.20
✎
13:36
|
в сборе это выглядит примерно так
CREATE VIEW докВыписка AS SELECT IDDoc, IDDoc идДок9, SP12956 Комментарий, SP50802 Изменение, SP38950 БанковскийСчет, SP38953 Валюта, SP38956 ФормироватьПроводки, SP38961 Приход, SP38970 Расход FROM DH38949 WITH (NoLock) CREATE VIEW докВыпискаТЧ AS SELECT IDDoc, IDDoc идДок9, LineNo_, LineNo_ НомерСтроки, SP38966 ДвижениеДенежныхСредств, SP38967 НазначениеПлатежа, SP38957 КоррСчет, SP38958 Субконто1, SP38959 Субконто2, SP38960 Субконто3, SP38961 Приход, SP38970 Расход, SP38962 ОперативныйУчет, SP38963 РежимОплаты, SP38964 Распределение, SP38971 ПлатежныйДокумент, SP38968 НомерДокВходящий, SP38969 ДатаДокВходящий, SP53217 ДатаОплаты, SP53223 РасчДокумент FROM DT38949 WITH (NoLock) |
|||
17
trad
17.06.20
✎
13:36
|
(13) так в самой 1cpp и реализован, написан на c++
исходники можно добыть на сайте 1cpp.ru |
|||
18
Холст
17.06.20
✎
13:39
|
(16) Спасибо за пример, в вашем примере компонента Радуга, а не 1CPP ? Будет ли работать этот же запрос создания вьюхи в 1СРР ?
|
|||
19
ADirks
17.06.20
✎
13:40
|
(18) радуга - это исторически сложилось :)
РадугаСервис = СоздатьОбъект("MetaDataWork"); |
|||
20
Franchiser
гуру
17.06.20
✎
13:50
|
(19) идея понятна, только эти вьюшки слетать наверно будут при реструктуризации.
|
|||
21
Franchiser
гуру
17.06.20
✎
13:52
|
Мне хотелось в 8-ке написать прямой запрос на 1с++ со всеми его фишками и особенностями, и тупо передать в какую то процедуру чтобы он распарсился.
|
|||
22
ADirks
17.06.20
✎
13:53
|
(20) не будут
|
|||
23
Ёпрст
17.06.20
✎
14:17
|
Да ё.. поменять любой реквизит в клюшках любому реквизиту.. пара минут.
Стоит оно тог, чтоб вьюхи еще лепить для задачи в (0) ? :) |
|||
24
Ёпрст
17.06.20
✎
14:18
|
*поменять ид
|
|||
25
Franchiser
гуру
17.06.20
✎
14:29
|
(23) чем менять в МД и когда, до реструктуризации?
|
|||
26
Franchiser
гуру
17.06.20
✎
19:47
|
Ну так какими инструментами можно менять идентификаторы в MD?
|
|||
27
Ёпрст
17.06.20
✎
20:16
|
(26) в мд правишь ид реквизита любым средством для работы с компаундом, самое простое, gcomp. Далее в конфе загрузить измененную. Оно само создаст в табличке нкжное поле. Если надо быстро, то мд лепится на пустышке, потом подмена мд и словарика и добавления поля ручками в табличке.
|
|||
28
Franchiser
гуру
17.06.20
✎
21:36
|
(27) короче визуальной среды нет
|
|||
29
Ёпрст
17.06.20
✎
22:02
|
(27)есть, но оно тебе не надо
|
|||
30
Franchiser
гуру
18.06.20
✎
00:40
|
(27)>>Далее в конфе загрузить измененную
Что если подменить мд, без загрузки изменённой и последующей реструктуризацией? >> Если надо быстро, то мд лепится на пустышке, потом подмена мд и словарика и добавления поля ручками в табличке. В этом случае разбор компаунда не нужен? |
|||
31
AAA
18.06.20
✎
05:41
|
По моему, если руками добавлять реквизит в 2 базы с идентичным MD, то и добавится реквизит с идентичным ID
Автору темы проще было все проверить на 2 чистых базах, займет 5 минут ) |
|||
32
Ёпрст
18.06.20
✎
06:22
|
(30)написал же, если надо быстро, то подмена мд и словарика + добавление поля руками в табличке
|
|||
33
Ёпрст
18.06.20
✎
06:23
|
(31) мд разный, да и на "идентичных" счетчик ид может быть разным
|
|||
34
ADirks
18.06.20
✎
07:40
|
(23) Ещё как стоит. Один раз систему слепишь, зато потом жизнь сильно упрощается. Одна отладка запросов чего стоит.
Опять же, писать запросы из одной системы в другую сильно проще. У меня есть пара мест с запросами к трём базам одновременно. |
|||
35
Ёпрст
18.06.20
✎
08:22
|
(34) ну, если не разовая задача то да..всякие там свои таблички с иерархией еще лепить
|
|||
36
Franchiser
гуру
18.06.20
✎
11:39
|
(35) если разбирать MD через gcomp, затем собирать, то насколько это стабильно работает, может ли что-то сломаться/потеряться. Я смотрю у gcomp много разных опций есть при которых что-то в контейнере можно выкинуть или очистить.
|
|||
37
Ёпрст
18.06.20
✎
12:40
|
(36) там нечему ломаться, ну разве что gcomp может облегчить и улучшить структуру мд, выкинув лишние, не используемые вещи
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |