Имя: Пароль:
1C
1С v8
Как сослаться на текущую базу данных? (аналогично COM-объекту)
0 AndrewZloy
 
19.01.12
08:12
Имею процедуру, делающую нечто в переданной ей параметром 1С 8.2  базе (обычно – COM-объект). Но, в том числе, она должна срабатывать и с текущей базой. Создавать для этого дополнительный COM нелепо, нельзя ли просто записать нечто типа

БД = ЭтаБаза();

и дальше с этим БД работать? В руководствах не нашёл, а – вполне вероятно, есть такое.
1 rs_trade
 
19.01.12
08:22
(0) нет такого. да и не надо.
2 AndrewZloy
 
19.01.12
08:31
Тёзка, увы! – мне надо. )))
Иначе программа вырастает ровно вдвое – делается «почти копия» всех строк, только вместо «БД.тратата» везде ставлю просто «тратата», – маразм.
Кстати, корневой объект существует во многих современных (грамотно построенных) системах программирования, неужели 1С оказалась и здесь «бааальшим оригиналом»?
3 Ursus maritimus
 
19.01.12
08:39
Да уж прям в два раза. Меняется только создание объектов
Новый или  Новый ComОбъект.
Создание объектов можно делать по условию или вынести в отдельную функцию
4 AndrewZloy
 
19.01.12
09:05
А все кусочки типа …Записать(БД.РежимЗаписиДокумента.Проведение), = БД.Константа.ХХХХ  и т.п. лажа?
Может, не в два, но – очень заметно.
Я пока вывернулся, описав вначале переменные типа

Если Локально тогда
         ТамКонстанты = Константы;
         ТамДокументы = Документы;
         ........
Иначе
         ТамКонстанты = БД.Константы;
         ТамДокументы = БД.Документы;
         ........
КонецЕсли
и дальше пишу везде вместо БД.Константы.ххх  ===> ТамКонстанты.ххх, но – не красиво сие… А было бы – отделался бы одной строчкой.
5 1с-кин
 
19.01.12
09:32
(0) вроде сложности как раз с получением констант и прочих перечислений-ТЗ из другой базы.
Вот где кода немеряно на единицу результата.
А к "своим" объектам 1с обращается сразу, без "предисловий" - у них и так заграмождена структура метаданных.
Или я не так понял?
6 AndrewZloy
 
19.01.12
09:39
Да вопрос не в сложности, а в том, можно ли единообразно обратиться к своей базе, как к базе из COM-объекта? Т.е, как сослаться на объект – «текущая база»?

Обидно сделать программу для COM и дополнительно её усложнять для "своей" базы.
7 1с-кин
 
19.01.12
09:43
(6) вы все равно привязаны к одной базе, откуда запускаете, поэтому она - текущая, и обращение - напрямую к её объектам.
А как вы хотели в противном случае запускать обработку? вне 1с?
8 AndrewZloy
 
19.01.12
10:10
Блиииин… Да знаю я, к чему привязан и как к ней обращаться.  )))

Ещё раз поясняю: есть процедура, УЖЕ работающая через COM с «прочими» базами. Я хочу, чтобы она срабатывала и для текущей базы, причем – без лишних «если … то …». Для этого естественно ей подсунуть в параметре вместо CОМ чужой базы свою. Но как на эту «свою» сослаться, не создавая для неё COM-объекта?

(Вопрос приобрёл уже академический зарактер "на будущее" – пока спрашивал, переписал я процедурку, хотя и неизящно выглядит)
Программист всегда исправляет последнюю ошибку.