|
v7: Различные версии одной поделки для разных конфигураций.. Как организовать? | ☑ | ||
---|---|---|---|---|
0
Dolly_EV
31.03.15
✎
09:24
|
Имеется поделка на 77 к самописной конфе. Вдруг резко потребовалось эту поделку прикрутить к еще двум другим конфам (одна ПУБ, друга совсем не типовая. У исходной конфы - далекие предки Бухгалтерия и ТиС)
Начал прикручивать и задумался - а как сделать универсально? чтобы в итоге потом сопровождать ОДНУ поделку для трех конф, а не ТРИ разные версии? Проблема понятно в том, что в исходной конфе есть функция "торгПроверкаДоступа(...)", а во вновь прикручиваемой - нету такой функции. В самой поделке делаю вилку по вариантам конфигураций, но как избежать ругани при синтаксическом контроле (Функция не обнаружена (торгПроверкаДоступа)? Пытаюсь использовать лСервис=СоздатьОбъект("Сервис"); лСервис.ДобавитьГлобальныйМодуль(фКаталогЭкспорта+"допГМ.txt"); где, в доп.глобальнике пытаюсь прописать недостающие функции и процедуры - пустышками, но не выходит каменный цветок...Или фишка в том, чтобы доп.глобальник грузить ДО открытия формы поделки? Кто как вообще подобную задачу решал? |
|||
1
fisher
31.03.15
✎
09:28
|
Я х.з, что у тебя за поделка, но вариант как бы очевиден. Разделить универсальный и специфичный функционал. Универсальный поддерживать универсально, специфичный - специфично :) А с поставкой выёживаться не надо. Поставки проще сделать различные.
|
|||
2
Dolly_EV
31.03.15
✎
09:30
|
+(0) Решение - тащить все недостающие процедуры и функции из ВСЕХ трех конфиг в САМУ поделку - не вариант. Оно очевидно и некрасиво. Так же переписка всех разных мест на ОДИНАКОВУЮ логику опять же в пределах поделки - тоже не вариант: логика местами сильно расходится...
(1) ну так это ТРИ поставки))) чего и хочется избежать |
|||
3
fisher
31.03.15
✎
09:33
|
Хотя, если у тебя получится грузить специфичные блоки универсально через неведомую мне хрень "ДобавитьГлобальныйМодуль" - то тоже вполне ничего.
(2) Стопудово можно переписать так, что ядро будет универсальное. |
|||
4
Dolly_EV
31.03.15
✎
09:33
|
неведомая хрень "ДобавитьГлобальныйМодуль" - это formex.
|
|||
5
Dolly_EV
31.03.15
✎
09:34
|
вот про него тащемта и вопрос... ибо именно "ДобавитьГлобальныйМодуль" раньше не пользовал, тем более в таком контексте
|
|||
6
fisher
31.03.15
✎
09:36
|
(4) Ну, я уже давно уже забыл 7.7 как страшный сон. formex юзал только для раскраски и управления формами.
А если у тебя не будет основного универсального ядра, то толку не будет. Может оказаться проще сопровождать три поделки. |
|||
7
Dolly_EV
31.03.15
✎
09:37
|
(6) да ядро-то как раз есть, основное и универсальное. разница - в мелочах.. и из-за мелочей все распадается на три поставки. А их светит поддерживать и дорабатывать (((
|
|||
8
fisher
31.03.15
✎
09:39
|
(7) Ой, я тебя умоляю. Два раза скопипастить обновленное универсальное ядро. А остальное хоть так, хоть эдак делать придется.
|
|||
9
fisher
31.03.15
✎
09:41
|
Если получится обойтись без копипасты - то хорошо, конечно.
|
|||
10
Dolly_EV
31.03.15
✎
09:42
|
(8) не, не совсем так.. ядро есть, но оно не совсем универсальное)). Т.е. его просто так не скопипастишь без допила на две другие конфы
|
|||
11
Гёдза
31.03.15
✎
10:10
|
Шаблон("торгПроверитьЛяЛяЛя")
|
|||
12
Dolly_EV
31.03.15
✎
10:12
|
(11) угу.. думал в этом направлении.. но тоже как-то не комильфо
|
|||
13
fisher
31.03.15
✎
10:17
|
(10) Воот. А надо сделать совсем универсальное. Это вполне реально. Ессно, придется реструктурировать.
|
|||
14
ADirks
31.03.15
✎
11:02
|
Если можно подключить 1С++, то код от синтакс-анализатора можно запрятать в ВыполняемыйМодуль.
|
|||
15
Dolly_EV
31.03.15
✎
15:52
|
(14) Алексей, имеешь ввиду запихать все "ветвящиеся моменты" в несколько выполняемых модулей?
|
|||
16
Dolly_EV
31.03.15
✎
15:53
|
(14) не понял я, можно по-подробнее?
|
|||
17
Dolly_EV
31.03.15
✎
16:51
|
Тема, она вот она: http://www.1cpp.ru/forum/YaBB.pl?num=1202810577/0
но без окончания (( |
|||
18
Ёпрст
31.03.15
✎
16:59
|
Все списифические функции в ВМ залепить и привет, далее проверка их наличия через исключения ВМ.. всё, если есть исключение - загрузить, нет исключения - ничего не делать
|
|||
19
Гёдза
31.03.15
✎
17:18
|
Твоя поделка использует 1сpp для своих целей?
|
|||
20
Dolly_EV
31.03.15
✎
17:19
|
(19) клюшки без 1cpp по-моему нельзя использовать))
(18) Т.е. все проблемные вызовы, типа "торгПроверкаДоступа()" обернуть в ВМ.торгПроверкаДоступа() далее ВМ = СоздатьОбъект("ВыполняемыйМодуль"); ВМ.УстановитьМодуль(ТекстМодуля); (18) "далее проверка их наличия через исключения ВМ" вот это как? не работал я с "ВыполняемыйМодуль" |
|||
21
Dolly_EV
31.03.15
✎
17:32
|
(18) Ёпрст! Сказавши А, скажи Б))) Последний пинок в нужном направлении!
про "исключения"! Хелп читаю про "ВыполняемыйМодуль" - как-то там не понятно... и у "РазрешитьИсключения" и у "ВыполнитьПроцедуруКонтекста" - в als - одно и тоже описалово от последней... |
|||
22
Ёпрст
31.03.15
✎
17:32
|
(20) далее в попытке компилируешь модуль, если не успешно - грузишь его.
|
|||
23
Dolly_EV
31.03.15
✎
17:32
|
а в самом модуле что пишу?
|
|||
24
Dolly_EV
31.03.15
✎
17:33
|
+(23) на примере "торгПроверкаДоступа()"
|
|||
25
Ёпрст
31.03.15
✎
17:36
|
пример проверки, есть ли переменная модуля:
Модуль = СоздатьОбъект("ВыполняемыйМодуль"); Модуль.УстановитьМодуль("т = глПеременнаяМодуля"); Попытка Модуль.КомпилироватьМодуль(); Исключение Серв = СоздатьОбъект("Сервис"); Серв.ДобавитьГлобальныйМодуль(ТекстГлобальничка); КонецПопытки; |
|||
26
Ёпрст
31.03.15
✎
17:37
|
(24) для проц и функций - аналогично
|
|||
27
Dolly_EV
31.03.15
✎
17:41
|
(25) чего-то как-то громоздко...
Хочется ОДИН раз заменить "глПеременнаяМодуля" на ВМ.глПеременнаяМодуля потом в ВМ чего-нить прописать и вообще забыть про "глПеременнаяМодуля" |
|||
28
Dolly_EV
31.03.15
✎
17:44
|
....но при этом в ВМ для той конфы, где есть глПеременнаяМодуля - оно и возвращалось/выполнялось. А где нет - ничего не делалось и не падало.
|
|||
29
Dolly_EV
31.03.15
✎
17:45
|
//======================================================================
Функция торгПроверкаДоступа(ОбъектМФ,СписПроверок,Конт) Экспорт Если лИДКонф="БИТ" Тогда //вот здесь как вызвать "родную" торгПроверкаДоступа() ?? ИначеЕсли лИДКонф="ОПТОВИК" Тогда //нету Возврат 1; ИначеЕсли лИДКонф="ПУБ" Тогда //нету Возврат 1; КонецЕсли; КонецФункции // торгПроверкаДоступа(ОбъектМФ,СписПроверок,Конт) |
|||
30
Dolly_EV
31.03.15
✎
17:48
|
+(29) а где-то надо будет не просто ничего не делать ,а перенаправить вызов в другое место...
|
|||
31
Ёпрст
31.03.15
✎
17:55
|
Ничего не понял, что надо и что мешает через вм скомпилировать модуль с вызовом процы, и если компиляция не успешная - загрузить доп глобальник с ней. Всё
|
|||
32
Dolly_EV
31.03.15
✎
18:03
|
(31) Да схема "внедрения" не до конца ясна.
Вот у меня сейчас есть готовая поделка на конфе "БИТ" Беру конфу "ПУБ", открываю в ней поделку, жму Синтаксический контроль - мне вываливается, что Если торгПроверкаДоступа<<?>>(ОбъектМФ,СписПроверок,Контекст)=0 тогда {D:\BASES\_....ERT(1232)}: Функция не обнаружена (торгПроверкаДоступа). Для этогно конкретного случая мне надо, чтобы для "БИТ" эта функция работала, для остальных - не надо ничего делать Дальше мои действия? Я хочу дописать ВМ.торгПроверкаДоступа и перейти к следующей ошибке... вот в ВМ как обработать теперь торгПроверкаДоступа для трех вариантов? |
|||
33
Dolly_EV
31.03.15
✎
18:10
|
Следующая ошибка:
Процедура не обнаружена (глДокументУстановкаНомера) Для этого случая мне надо, чтобы для "БИТ" эта процедура работала, для "ПУБ" - перенаправилась в другую процедуру, для "ОПТОВИК" - ничего не происходило. Я хочу написать в основной поделке "ВМ.глДокументУстановкаНомера(...)" и забыть это место, а в ВМ обработать по вилке... |
|||
34
Ёпрст
31.03.15
✎
18:16
|
Всё просто, все критичные места проверить через вм. чего не хватает - добавить через доп глобальник.
Далее, все вызовы лепить через шаблон |
|||
35
Ёпрст
31.03.15
✎
18:16
|
или еще как
|
|||
36
Ёпрст
31.03.15
✎
18:16
|
всё
|
|||
37
Ёпрст
31.03.15
✎
18:16
|
и будет полный синтаксис контроль и всё на свете
|
|||
38
ADirks
01.04.15
✎
08:00
|
ну как-то так
ункция Модуль(Конт, ТекстМодуля) Экспорт Модуль = СоздатьОбъект("ВыполняемыйМодуль"); Модуль.УстановитьМодуль(ТекстМодуля); Модуль.НазначитьКонтекст(Конт); Модуль.КомпилироватьМодуль(); Модуль.ВыполнитьМодуль(); Возврат Модуль; КонецФункции Процедура _() Если Конфа = "БИТ" Тогда вм = Модуль(Контекст, " |Процедура УстановкаНомера(Конт) | глДокументУстановкаНомера(Конт); |КонецПроцедуры |"); ИначеЕсли Конфа = "ПУБ" Тогда вм = Модуль(Контекст, " |Процедура УстановкаНомера(Конт) | глДокументУстановкаНомера_ПУБ(Конт); |КонецПроцедуры |"); Иначе вм = Модуль(Контекст, " |Процедура УстановкаНомера(Конт) |КонецПроцедуры |"); КонецЕсли; вм.УстановкаНомера(Контекст); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |