Имя: Пароль:
1C
1C 7.7
v7: Посоветуйте, как реализовать такой изврат
,
0 Скользящий
 
14.12.12
16:48
2 базы объединяю по УРБД. Мне надо чтобы в зависимости от константы базы отрабатывался в определенных модулях один код, в случае другой константы другой.  Базы практически идентичные, но есть мелкие доработки в коде и там и там. К примеру модули выгрузок через Клиент Банк. Все модули будут вынесены в текст через #ЗагрузитьИзФайла. К сожалению, не получится написать, что если Константа База1, то #ЗагрузитьИзФайла этот файл, если Константа База2 то #ЗагрузитьИзФайла  другой файл. Или как то можно извратиться? Можно конечно прямо в одном модуле все прописать через Если - но долго и муторно. Зачем я это делаю?
Объединяю две базы 1С7.7 территориально они разнесены, но учитывается в них одно и то же, переносили документы универсалом раз в месяц и сверяли баланс - да, так бывает, убираю этот анахронизм.
1 Irek-kazan
 
14.12.12
16:50
не совсем понял, а нельзя на этапе выгрузки в файл определится по какому алгоритму будет загружаться и на основании этого именовать файл
2 Amra
 
14.12.12
16:51
(0) Так в текстовике откуда грузится файл пиши код с проверкой константы
3 Скользящий
 
14.12.12
16:52
(2) Можно, конечно в каждой процедуре проверять константу и разделить код, но это надо в каждой процедуре писать. Хотелось бы как то, - одна база, один модуль грузится, другая - другой. )
4 viktor_vv
 
14.12.12
17:08
В 1C++ есть класс ВыполняемыйМодуль, может поможет

Предназначен для работы с динамическими модулями, передаваемыми в параметре метода в качестве строки.

После установки текста модуля скомпилируйте и выполните его. Модуль инициализируется и выполнит операторы, расположенные в конце тела модуля, вне методов. После этого можно обращаться к переменным модуля, как к свойствам этого объекта, и к методам модуля, как к методам объекта.

Грузить можно как раз из тестовиков.
Особо не копал.
5 Скользящий
 
14.12.12
17:11
Посмотрю, но грузить при старте лишнюю dll что то не хочется.
6 Cthulhu
 
14.12.12
20:18
Какие проблемы-то?
1. Все модули #ЗагрузитьИзФайла
2. В каждой ИБ - СВОЙ комплект текстов модулей.
7 Cthulhu
 
14.12.12
20:20
ЗЫ: я тебе даже больше скажу.
Если иметь ввиду, что глобальник вообще-то для всех ИБ одинаков.
То комплекты текстов модулей можно прям в призапускесистемы в зависимости от каких угодно данных - как угодно готовить.
потому что тексты модулей загружаются и компилируются только при их использовании (открытие форм, проведение) - кроме глобальника, он грузится и компилируется при открытии ИБ.
8 Скользящий
 
14.12.12
20:22
Блин, Ктулху, а ведь ты прав. Выкинуть все модули наружу и так и оставить. ) Правда, надо будет с формами все проверить, поскольку формы и реквизиты диалогов будут одинаковы, возможны конфликты. Глобальник кстати я тоже наружу вытащил, тормозов не замечено.
9 Скользящий
 
14.12.12
20:24
Скорее всего, базу объединю, т.е. комплект модулей будет одинаковый, а потом сравню мдшники, и посмотрю что отличается и модули заменю у нужных документов, в случае конфликтов с реквизитами формы доработаю.  Спасибо, ты мне открыл глаза на вполне очевидную вещь, чувствовал что где то туплю, но никак не мог сообразить. )
10 Cthulhu
 
14.12.12
20:44
(8): глобальник компилируется только при запуске - запуск замедляется, так что при запуске тормоза есть (но не критичные даже при довольно пухлоых глобальниках).
все, что одинаковое - будет в виде одинаковых файлов текстов модулей в разных ИБ. какие "конфликты"????
прим.: кстати, о подменах модулей "на лету" (в процессе эксплуатации базы). чтобы подмененный модул начал работать - надо пере-открыть форму, для которой выполнена подмена текста модуля формы (или начать проведение заного). а вот чтобы подмена глобальника сработала - надо перезапустить базу данных (но это гораздо мягче, чем одновременный выгон всех с правкой конфигурации!).
11 Надсмотрщик
 
14.12.12
20:47
Проще пареной репы. Твой вопрос не стоит и выеденого яйца.
12 Cthulhu
 
14.12.12
20:49
(11): ответ, одинаково универсальный и лечебный для ущемленного самолюбия автора.
или сказать чо хотел?.. )))
13 Надсмотрщик
 
14.12.12
20:51
(12) Все на внешних обработках
14 Скользящий
 
14.12.12
20:55
(10) Конфликты будут, если в тексте модуля будут задействованы реквизиты, которых нет. Хотя, если формы общие для всех, то да, реквизиты по любому будут. Насчет компиляции знаю, чтобы изменилось то что в глобальнике, надо перезапустить 1С, чтобы то что в форме дока или обработки - переоткрыть форму. Не первый год замужем. )
15 mehfk
 
14.12.12
20:59
>потому что тексты модулей загружаются и компилируются только >при их использовании (открытие форм, проведение) - кроме >глобальника, он грузится и компилируется при открытии ИБ.
16 mehfk
 
14.12.12
21:00
15+ Есть особенности с turboMD и turboBL(1с++)
17 Cthulhu
 
14.12.12
21:12
(14): если УРБД - то сие невозможно (и это - не конфликт, а синтаксическая ошибка).
(16): и ещё возможно до едреней фени "особенностей" при прочих способах использования нештатных механизмов. вплоть до специально рисуемых на коленке вк исключительно в целях наработки количества "особенностей" в использовании штатных механизмов 1с. это что-то меняет в сказанном по сути?
18 mehfk
 
14.12.12
21:15
(17) Че?
19 Скользящий
 
14.12.12
21:21
(17) Первую часть не совсем понял, т.е. если урбы, то невозможны конфликты (сиречь синтаксические ошибки)? )
20 Cthulhu
 
14.12.12
21:23
(19): то структура метаданных (и состав реквизитов агрегатных данных) - одинаковы. ну или базы рассинхронизированы - но это уже совсем другая и гораздо более глубокая ж0пa.
(18): по слогам попробуй.
21 Злопчинский
 
15.12.12
00:17
при старте системы из самой базы получать код для конкретной ПИБ - пихать его в доп.создаваемый глобмодуль и выполнять.
22 xXeNoNx
 
15.12.12
00:27
ну если по полной извращаться, то как вариант, то можно грузить код тож из файла
23 xXeNoNx
 
15.12.12
00:32
+(22) Код обработки "клиентБанк" например...., но такой изврат я уж давно не видел..., уж легче бухов убедить что нет лучше стандартной обработки загрузки из КБ, чем стандартная
24 mehfk
 
15.12.12
07:55
(20) А ты выплюнь МПХ и скажи нормально.
25 Скользящий
 
15.12.12
15:20
Напомните плиз, если делать общую базу на Win7, и потом с этого  мдшника обновить базe на 2003 сервере или XP - формы не "поедут"? Вроде помниться была такая фича.
26 Нуф-Нуф
 
15.12.12
15:21
вы все еще дрочитесь на 7ке?
27 Aleksey
 
15.12.12
15:42
(26) ну не всем же на айфон фапать
28 Vladal
 
15.12.12
20:07
(25) На XP формы ехали, когда в ней были включены икспишные темы, когда обнаружил эту закономерность, на своей машине включил классическую тему и забыл о съехавших формах.
29 KRV
 
15.12.12
20:11
Морды у форм сделай одинаковые, но в зависимости от констант выводи реквизиты? Не?
30 Cthulhu
 
15.12.12
20:35
(28): закономерность в том, что двигло 1св7 сохраняет морду с указанием отступов в святой уверенности, что высота заголовка окна и толщина бордюров, которые по дефолту и неизменные в вин95 - точно таки же в любой операционке, в которой юзается пофигуратор - и исходя их этих тупо прошитых в двиге размеров сохранет отступы. в результате при открытии то же самое что при редактировании получается только в единственном случяе - если высота заголовка окна и толщина бордюров во время редактирования/сохранения форм точно такие же, как в вин95 (а таквже в вин2к и в классической схеме ХРюши - но это уже сложилось исторически).
А вот где именно в Вин7 можно указать высоту заголовка окна и толщину бордюров для АПИ-шных системных окошек - вот это вопрос. Кстати, может из встречаюсихся тут гуру подскажет кто?..
31 Vladal
 
16.12.12
01:26
(30) Я пока нашел выход в переключении на классическую тему.
Впрочем, и стандартная вроде как нормально работает.
32 Torquader
 
16.12.12
02:18
(30) Так GetSystemMetrics никто не отменял, как и Set, который позволяет в реестр записать настройки текущей темы.
Хотя, больше всего оно едет, если режим шрифта устанавливать на 125 или 150 процентов - бухгалтера так любят, когда буквы крупные, что на кривые формы им наплевать.
Просто в 1С почему-то решили, что размер нужно сохранять относительно края окна, а не клиентской области - ну их тоже можно понять - для скролинга формы у них два окна в одном (внутри одного передвигается другое).
P.S. в Windows 95 как и в Windows 3.11 все эти параметры тоже менялись - только там было намного меньше желающих их менять, так как темы были достаточно примитивно реализованы (даже перехода цвета в окне не было).
33 Ganiev
 
17.12.12
07:07
Если ТекущийИбКод() = ? Тогда
   Путь = //Путь к файлу
ИначеЕсли ТекущийИбКод()  =? Тогда
   Путь = // Путь к другому файлу
КонецЕСли
#ЗагрузитИзФайла  // путь
34 Aleksey
 
17.12.12
07:21
(33) И что работает?
35 ЧеловекДуши
 
17.12.12
07:33
Все просто, делаешь так, что бы твоя константа не мигрировала в обменах :)
Но ты как наверняка все дело в том, а где именно был создан документ и такой код. То делай се просто, создай общий реквизит в документах и присваивай нужное значение из твоей константы. Тем самым, где бы не выполняли проведение документа, то всегда будет нужный результат.
Но по сути, всегда нужно править документы там, где их создают. А не в центре.
36 Ganiev
 
17.12.12
08:22
(34) А по чему нет? Все работает! Ну еще нужно завязаться на Значение константы!
37 Ganiev
 
17.12.12
08:23
(33) Пордон за описку * ТекущаяИБКод()
38 vde69
 
17.12.12
08:26
так проще будет:

#ЗагрузитИзФайла  ТекущаяИБКод()
39 Aleksey
 
17.12.12
08:31
Я конечно всё понимаю, но давно 7-ка научилась вычислять выражения в этой директиве? Всегда бралась имя файла и искалась в каталоги пользователя, и если там нет в каталоги ИБ (если конечно не указан полный путь). И всякие извраты типа (33) или (38) вроде бы не работали. Или я что-то путаю?
40 vde69
 
17.12.12
08:37
(39) хороший вопрос, сам не проверял...

вообще считаю код во внешнем файле большим злом, конечно можно динамически менять, зато сколько было траблов с потерей актуальной версии и т.д.

ИХМО
если изменений мало - просто делаем ветки кода, если изменений много - переходим на МОД и обновляем каждую конфигу отдельно
41 Скользящий
 
17.12.12
09:08
(33) Не будет работать...
42 Mikeware
 
17.12.12
09:19
веселые люди...
ну, Ganiev - тот понятно...
а вот vde69 - насторожил... не ожидал я от него такого...
43 Скользящий
 
17.12.12
09:22
Как там у Булгакова? "Советы космического масштаба и космической же глупости..." (С)
44 vde69
 
17.12.12
09:25
(42) я последний раз ЗагрузитИзФайла видел 7 лет назад...
45 Ёпрст
 
17.12.12
09:25
(0)

Процедура ПриЗагрузкеМодуляФормы(<?>) КонецПроцедуры
Синтаксис:
Процедура ПриЗагрузкеМодуляФормы(<ИмяОбъекта>)КонецПроцедуры
Назначение:
Предопределенная процедура вызывается при загрузке модуля формы.
Параметры:
<ИмяОбъекта> - (Строка) Передается по значению.  полный путь к объекту, для которого загружается форма
ЗАМЕЧАНИЕ:
В качестве параметра в процедуру передается полный путь к загружаемому объекту внутри md ( список всех форм можно получить с помощью метода СписокВсехФорм / AllFormsList ). Если внутри процедуры изменить значение параметра ИмяОбъекта, то загрузится модуль в соответствии с этим новым путем. Если новый путь задан неверно, то будет загружен тот модуль, который предполагался изначально.
46 Ёпрст
 
17.12.12
09:26
на вот, воткнешь формекс и привет.
47 Mikeware
 
17.12.12
09:26
(44) а тут без разницы, сколько лет назад видел. Механизм отработки одинаков везде (и не только в 1С).
48 Mikeware
 
17.12.12
09:30
(45) и плодить копии документов?
к тому же, как я понял, ему нужны не только модули форм - но и модули проведений.
а в формексе - только для модулей форм.
я б заюзал ВыполняемыйМодуль
49 Ёпрст
 
17.12.12
09:32
(48) почему копии ? всего лишь хранить тексты модулей..
50 Ёпрст
 
17.12.12
09:33
а ну да..там подмена объектом целиком
51 Ёпрст
 
17.12.12
09:36
ну, тогда класс перехватчик и в нём уже - Загрузитьиз файла который нужон в зависимости от константы..
52 Ёпрст
 
17.12.12
09:37
ну и без ВыполняемыйМодуль не обойтись, скорее всего
53 Скользящий
 
17.12.12
09:38
Вчера ковырялся, с модулями конечно решение достаточно простое, только тогда если надо модифицировать модули документов, придется модифицировать их в обоих базах сразу, тут главное не забыть и не запутаться. А так работает. Решил все таки сделать одинаковые модули в обоих базах, хоть и выгружаемые наружу, как период отладочный после объединения пройдет, возможно, закину обратно все модули из текстовиков в МДшник.
54 Dolly_EV
 
17.12.12
10:06
(0) сведи обе базы к одинаковой конфиге и не парься - имхо, ПРОЩЕ будет побороть бухов в этом случае, ну максимум, пару вилок на "любимые" обработки
55 Ganiev
 
18.12.12
09:35
(41) Ребят не гоните у меня 7.7 и ТекущаяИБКод() Работает!
http://1c.moy.su/publ/1-1-0-4 Вам в помощь
56 Ёпрст
 
18.12.12
11:27
(55) :))))))))))

и ЗагрузитьИзФайла Путь работает ?
Наркоман шоле ?
57 Андрей_Андреич
 
naïve
18.12.12
11:31
(56) Особенно ЗагрузитИзФайла без мягкого знака.
У мну есть сотрудник типо программист - он вообще документацию не читал. Пишет руководствуясь только здравым смыслом. Если я так придумал - так и должно быть. Нормальный язык должон работать нормально и т.д.
58 Mikeware
 
18.12.12
11:49
(57) "особые приметы: говорит и пишет с акцентом"©
Ganiev , похоже, еще и думает с акцентом...)
59 Cthulhu
 
18.12.12
21:48
(32): а "для тупых"?.. ну, или фразой из анекдота - "ты не выёживайся, клиа, ты пальцем покажи!.."
или мутить искать редактор тем и пачить винду(7) под установку неподписанных тем?..
60 Скользящий
 
18.12.12
22:07
(59) Переделал на вин7, просто поставил классическую тему - багов не замечено с формами.
61 Cthulhu
 
18.12.12
22:32
(60): Ок, доставлю софт на свежеподаренный сони-ваио - проверю, спасибо.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший