Имя: Пароль:
1C
1С v8
Общий вопрос по com-соединению
0 ponaroshku
 
16.01.12
10:10
Почитала несколько статей по com-соединению

Попробовала на практике, вроде даже подключилась к базе. Однако что делать после подключения мне не совсем понятно

Везде описывается com-соединение к соседней базе из текущей базы
Разве нельзя сделать подключение из произвольной базе к произвольной базы?
Если все же возможено, как разграничивать базы, т.е. как определять какая из них какая чтобы выполнять запросы?



Буду благодарна как за ответы, так и за доп ссылки на источники знаний
1 YF
 
16.01.12
10:11
(0) Мона по-понятнее?
2 Ц_У
 
16.01.12
10:15
1. что делать после подключения - собственно для чего подключались то и делать
2. Разве нельзя сделать подключение из произвольной базе к произвольной базы? - можно
3.как разграничивать базы, т.е. как определять какая из них какая чтобы выполнять запросы? - Тут не совсем понятно, что имелось ввиду, если в коде, то через переменную ком соединения
3 vmv
 
16.01.12
10:16
База "Из" - та из которой устанавливается соединенинение.
Она произвольной быть не может.

Для хранения в ней пулла подключений делают в этой "Из" некую структуру данных, например, справочник. Этот справочник хранит идентификацию внешней ИБ для строки подключения и извлечения из пулла подключений уже готового сом. Ссылка этого справочника может использоваться в запросах
4 Shurjk
 
16.01.12
10:17
(0) Сначала читаем СП до полного просветления, чтоб было понятно что такое соединение в принципе.
5 ponaroshku
 
16.01.12
10:18
мне кажется, или у вас мнения разделились (2) (3) по поводу "Разве нельзя сделать подключение из произвольной базе к произвольной базы? "

(4) я читала, поэтому и обратилась сюда
читайте внимательней (0)
"Буду благодарна как за ответы, так и за доп ссылки на источники знаний"
6 Shurjk
 
16.01.12
10:19
(3) То есть должна быть какая то специальная - не произвольная база и только в ней можем создавать соединение? А если я к примеру запущу соединение не в базе а в каком то своем приложении написаннорм к примеру на VB?
7 Shurjk
 
16.01.12
10:21
(5) из (0) Понятно что плохо читали исходите из того что соединение это отдельный объект, который обледает только одним методом, а все остальное это свойства и сетоды базы к которой установлено это соединение - когадп ридет помнимание этого все вопросы отпадут сами собой.
8 vmv
 
16.01.12
10:21
(6) это уже будет приложение на ВБ, нэ)
9 Artful Den
 
16.01.12
10:21
10 Ненавижу 1С
 
гуру
16.01.12
10:23
само по себе COM соединение к базам не относится, соединится можно ко всему, что позволяет соединится
а вот то самое соединение может работать с базами данных
11 ponaroshku
 
16.01.12
10:23
(9) да
12 Shurjk
 
16.01.12
10:24
(8) Но ком соединение то в нем все то же будет.
13 Стальная Крыса
 
16.01.12
10:48
даже 2 раза перечитал ...
так и не понял - чего же хочет автор ?
14 ponaroshku
 
16.01.12
10:50
(13) понять, как работать с ком-соединением, как обратиться к конкретной базе
15 SerMaxim
 
16.01.12
10:52
Можно коннектиться из любой базы в любую базу. Когда будешь коннектиться то получишь именнованный экземпляр соединения (КОМ = COMОбъект("");). Потом будешь писать все тексты как КОМ.<что-то там> .
16 ponaroshku
 
16.01.12
11:05
Попробую переформулировать, забудем, что базы две-предположим, подключаюсь к одной базе

если бы не было подключения в принципе ( т.е. работа только с одной базой) , я бы сделала запрос и вывела в Макет все необходимые данные, их вывод бы забила в Печать()

но задача другая, нужны 2 базы. И вот я подключилась к одной из них (предположим, что к одной)
как мне выполнить этот запрос к базе, к которой я подключилась?

по (15) я так поняла если у меня ТекCOMПодключение = Новый COMОбъект(ОбъектПодключения)
то мне стоит обращаться к самой базе через ТекCOMПодключение? или я неправильно поняла?
17 Стальная Крыса
 
16.01.12
11:08
(16) именно  :)

как в СП написано:

// Создается объект-коннектор
cntr = Новый COMObject("V82.COMConnector");
// создается объект COM-соединение
connection = cntr.Connect("File=""c:\InfoBases\Trade"";
       Usr=""Director"";")


теперь "connection" это "объект конкретной базы", в которой можно что-то делать
18 Shurjk
 
16.01.12
11:08
(16) Будет что то типа ТекСОМПодключение.NewObject("Запрос"); Только не завбывай что запрос тебе не может вернуть ссылки на объекты другой базы, т.к. это другая база.
19 vmv
 
16.01.12
11:09
ответ уже дали, вы пропустили по невнимательности

http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=563192
20 Пришел в тапках
 
16.01.12
11:10
V7="";
   V7=Новый COMОбъект("V77.Application");
   strApp = "/D"""+"E:\Base\Завод 7ка"+""" /N"""+"Login"+""" /P"""+"Password"+"""";
   Открыта=V7.Initialize(V7.RMTrade,strApp,"NO_SPLASH_SHOW");
   Нм = V7.CreateObject("Справочник.ТМЦ");
   Нм.ВыбратьЭлементы();
   Пока Нм.ПолучитьЭлемент() = 1 Цикл
       КонецЦикла;
21 Пришел в тапках
 
16.01.12
11:10
пример
22 ponaroshku
 
16.01.12
11:12
(17) спасибо:) наконец-то нужная деталь этого паззла:))

(18) поняла

(19) не заметила

(20) спасибо за пример:)
23 vicof
 
16.01.12
11:12
(22) лучшая благодарность - фотка топлесс)
24 Стальная Крыса
 
16.01.12
11:13
ну и вдогонку:

ТекCOMПодключение = Новый COMObject("V82.COMConnector");

КонкретнаяБаза = ТекCOMПодключение.Connect("File=""c:\InfoBases\Trade"";Usr=""Director"";");

ЗапросКонкретнойБазы = КонкретнаяБаза.NewObject("Запрос");
ЗапросКонкретнойБазы.ТекстЗапроса = "ВЫБРАТЬ * ИЗ МойСправочник";

КонкретныйРезультат = ЗапросКонкретнойБазы.Выполнить();
25 ponaroshku
 
16.01.12
11:18
(23) :)))

(24) спасибо, сейчас попробую:) если запутаюсь апну темку, но в целом прояснилось
26 ponaroshku
 
17.01.12
07:14
Вообщем решила не плодить еще одну тему а пробовать разобраться в этой, т.к. вопрос тот же

написала запрос
   ЗапросИсточника = ТекCOMОбъект.NewObject("Запрос");
   ЗапросИсточника.Текст =    "|ВЫБРАТЬ
|    ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетДт КАК СчетДт,
|    СУММА(ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.Сумма) КАК Сумма
|ИЗ
|    Документ.ОтражениеЗарплатыВРеглУчете.ОтражениеВУчете КАК ОтражениеЗарплатыВРеглУчетеОтражениеВУчете
|        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтражениеЗарплатыВРеглУчете КАК ОтражениеЗарплатыВРеглУчете
|        ПО ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.Ссылка = ОтражениеЗарплатыВРеглУчете.Ссылка
|ГДЕ
|    ОтражениеЗарплатыВРеглУчете.Дата МЕЖДУ &НачалоПериода И &КонецПериода
|
|СГРУППИРОВАТЬ ПО
|    ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетДт
|";
   ЗапросИсточника.УстановитьПараметр("НачалоПериода", Дата("29.11.2011 0:00:00"));
   ЗапросИсточника.УстановитьПараметр("КонецПериода", Дата("01.12.2011 0:00:00"));    
   РезультатЗапросаКИсточнику = ЗапросИсточника.Выполнить();

   Выборка = РезультатЗапросаКИсточнику.Выбрать(ТекCOMОбъект.ОбходРезультатаЗапроса.ПоГруппировкам);
       
   пока Выборка.Следующий()    Цикл
       ОбластьОсновнойЧасти.Параметры.Заполнить(Выборка);
       ТабДокумент.Вывести(ОбластьОсновнойЧасти);
   КонецЦикла;
       

но вывод в макет пока не идет
суть- я сгруппировала по счетам (грубо говоря 10,20,30) и хочу вывести их в область макета в столбец но не сплошняком
(типо
10 сумма
какой-нибудь текст макета
20 сумма
бла-бла-бла
30 сумма)
..

Как бы так сделать?, подскажите, любимое сообщество:)
27 Wobland
 
17.01.12
07:18
(26) тему не читал, но свой штрих добавлю. в общем случае твой цикл должен бы выглядеть так:

Выборка = РезультатЗапросаКИсточнику.Выбрать(ТекCOMОбъект.ОбходРезультатаЗапроса.ПоГруппировкам);
пока Выборка.Следующий()    Цикл
 //тут можно вывести что-то про группу
 Выборка1=Выборка.Выбрать();
 Пока Выборка1.Следующий() Цикл
   //а вот тут детальные записи
 КонецЦикла;
КонецЦикла;
28 ponaroshku
 
17.01.12
07:20
(27) привет:))) жалко тут нет функции добавиться в поклонницы:))
спасибо, попробую:)
29 Wobland
 
17.01.12
07:24
(28) будем считать, добавление состоялось ;)
30 ponaroshku
 
17.01.12
07:31
(29) я похоже поняла в чем моя ошибка
я пытаюсь вывести в одну большую область

о
б     счет10)
л
а      
с     счет20
т     счет 30
ь

лучше наверно создать несколько маленьких областей на каждый счет?
31 ponaroshku
 
17.01.12
07:32
или это не имеет значения?:)
32 Wobland
 
17.01.12
07:33
если я всё правильно понял, то тебе нужно две области:
Область1: для счёта
Область2: для бла-бла
после первого пока выводишь Область1, после второго - Область2
33 ponaroshku
 
17.01.12
07:45
(32)
не совсем
мне нужна в итоге вот так

счет с описанием   | сумма
===========================
69 (проставлено в  | должна заполнится
макете)            |из запроса
===========================
текст текст текст
===========================
20 (проставлено в  | должна заполнится
макете)            |из запроса  


и т п:))

даж нарисовала)  

Поправила выборку как

пока Выборка.Следующий()    Цикл
Выборка1=Выборка.Выбрать();
   Пока Выборка1.Следующий() Цикл
   ОбластьРасходыПоСтрахованию.Параметры.Заполнить(Выборка1.сумма);
   ТабДокумент.Вывести(ОбластьРасходыПоСтрахованию,Выборка1.уровень() );
   КонецЦикла;
КонецЦикла;


накосячила?
34 ponaroshku
 
17.01.12
07:45
блин, сбилась моя импровизированная картинка
35 ponaroshku
 
17.01.12
07:46
если скопировать текст и вставить в блокнотик будет попонятней)
36 Wobland
 
17.01.12
07:49
(33) проставлено в макете - это некий произвольный текст? свой для каждого счёта? обход делай один, без всяких группировок. а вот с областями...
37 Wobland
 
17.01.12
07:50
наделать кучку областей, раз текст у каждого счёта свой, потом в цикле ПолучитьОбласть("Область"+Выборка.Счёт)
38 Wobland
 
17.01.12
07:51
+(37) ну и обозвать области соответственно
39 ponaroshku
 
17.01.12
07:51
(36) текст да, сама написала
в принципе можно на каждый счет свою область и даже свой параметр, но как тогда сопоставить что в такую-то область проставляется такая-то сумма?

мне запрос выдает
счет сумма

мне счет-то для группировки и общей суммы нужен, а в макет только общая сумма по счету нужна
40 Wobland
 
17.01.12
07:52
а всё-таки, Выборка.Счёт.Наименование в качестве "проставлено в макете" не подойдёт?
41 Wobland
 
17.01.12
07:53
(39) ещё раз: Область=Макет.ПолучитьОбласть("ОбластьСчёта"+Выборка.Счёт) - будет получаться своя область для каждого счёта
42 ponaroshku
 
17.01.12
07:53
нет, там произвольная расшифровка бухгалтера проставлена, свой текст)
43 Wobland
 
17.01.12
07:53
+(41) ну и параметр Сумма должен во всех областях одинаково называться
44 ponaroshku
 
17.01.12
07:54
(41) т.е. если у меня идет вывод
44.01
70
69

область надо назвать соответственно ОбластьСчёта44.01, ОбластьСчёта70, ОбластьСчёта69?
45 ponaroshku
 
17.01.12
07:55
так, сейчас попробую)
46 ponaroshku
 
17.01.12
07:58
(41) ("ОбластьСчёта"+Выборка.Счёт)
не сработает, если идет субсчет, область не назвать ОбластьСчёта44.01
47 Wobland
 
17.01.12
07:59
ну сделатй ПолучитьОбласть("Область"+СтрЗаменить(Выборка.Счёт, ".", "_"))
48 ponaroshku
 
17.01.12
08:03
(47) ууу:)) вот это да
49 Wobland
 
17.01.12
08:08
(48) это понимать как "хы! как всё просто" или как "ё-моё, о чём это он?"?
50 ponaroshku
 
17.01.12
08:14
(49) как все просто:) надо же, как быстро можно было догадаться
51 ponaroshku
 
17.01.12
08:18
что-то не взлетает

обозвала области


Ошибка при получении значения атрибута контекста (СчетДт)
   ОбластьРасходыПоСтрахованию= макет.ПолучитьОбласть("Область"+СтрЗаменить(Выборка.СчетДт, ".", "_"));
по причине:
Метод не найден

Поправила так:
Выборка = РезультатЗапросаКИсточнику.Выбрать(ТекCOMОбъект.ОбходРезультатаЗапроса.ПоГруппировкам);
   ОбластьШапки = Макет.ПолучитьОбласть("Шапка") ;
   ОбластьРасходыПоСтрахованию= макет.ПолучитьОбласть("Область"+СтрЗаменить(Выборка.СчетДт, ".", "_"));
   ТабДокумент.Вывести(ОбластьШапки);
   
   пока Выборка.Следующий()    Цикл
       Выборка1=Выборка.Выбрать();
       Пока Выборка1.Следующий() Цикл
           ОбластьРасходыПоСтрахованию.Параметры.Заполнить(Выборка1.сумма);
           ТабДокумент.Вывести(ОбластьРасходыПоСтрахованию,Выборка1.уровень() );
   КонецЦикла;
КонецЦикла;
52 Wobland
 
17.01.12
08:19
(50) я в начале следовал правилу "попробуй сам ответить на свой вопрос и только потом спрашивай других". это я не к тому, что мне как-то лениво тебе помочь, это я так помочь пытаюсь ;)
53 ponaroshku
 
17.01.12
08:20
(52) это я уже потыкала)
54 Wobland
 
17.01.12
08:20
делай один проход, без группировок, это я перемудрил. а что за "Метод не найден"? Макет - это макет?
55 Wobland
 
17.01.12
08:22
Возможно, СтрЗаменить(Счёт.Код) надо делать
56 Wobland
 
17.01.12
08:54
Карина, как ты там? болею ж ;)
57 ponaroshku
 
17.01.12
10:22
(56) я сделала немного по-другому
поправила запрос, взяла
ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетДт.код КАК СчетДт

и тупо написала условие:)

       ОбластьРасходыПоСтрахованию=макет.ПолучитьОбласть("Область69_01");
       Область44_01_2=макет.ПолучитьОбласть("Область44_01_2");
       ТабДокумент.Вывести(ОбластьШапки);
       пока Выборка.Следующий()    Цикл
           если Выборка.СчетДт = "69.01"          тогда
               ОбластьРасходыПоСтрахованию.Параметры.Сумма =Выборка.сумма;
           ТабДокумент.Вывести(ОбластьРасходыПоСтрахованию,Выборка.уровень() );
       иначе
           Сообщить("че за?");
       конецесли;
       если  Выборка.СчетДт = "44.01.2"          тогда
              Область44_01_2.Параметры.Сумма =Выборка.сумма;
           ТабДокумент.Вывести(Область44_01_2,Выборка.уровень() );
       конецесли;
       КонецЦикла;


Так что все ок:))) Спасибо за мысли:)
58 Пришел в тапках
 
17.01.12
10:26
Был бы я Брежнев - поцеловал бы, а так - на здоровье!
59 Wobland
 
17.01.12
10:32
(58) а я не Брежнев, но меня это не смущает. фото на месте, требую поцелуй! ;)
60 ponaroshku
 
17.01.12
10:55
(58) :))

(59) :))) я и так в поклонницах
2 + 2 = 3.9999999999999999999999999999999...