Имя: Пароль:
1C
 
Самописка. Открыть форму через com соединение
, ,
0 anisa8310
 
16.02.15
11:05
Добрый день!
Самописка.
1С:Предприятие 8.3 (8.3.5.1443)
Пытаюсь подключиться через com к файловой базе и получить форму списка.
Пока тренируюсь:
&НаКлиенте
Процедура ВедомостьЗП(Команда)
    ПолучитьФормуВедомости();
КонецПроцедуры

&НаСервере
Процедура ПолучитьФормуВедомости()
   cntr = Новый COMObject("V83.COMConnector");

connection = cntr.Connect("File=""F:\ЛАД\HR 3"";Usr="""";");
Сообщить("Соединение установлено");
СпрСотрудники = connection.Справочники.Сотрудники;
Выборка = СпрСотрудники.Выбрать();
Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Наименование);
КонецЦикла;
//Это все работает
//А форму списка то как получить?
//На клиенте же надо?


КонецПроцедуры

Заранее всех благодарю за внимание!
1 vde69
 
16.02.15
11:06
COM - не оперирует оконными обьектами
2 Господин ПЖ
 
16.02.15
11:07
>Пытаюсь подключиться через com к файловой базе и получить форму списка.

ловите наркомана
3 ShoGUN
 
16.02.15
11:09
(0) Описание COM интерфейсов 1с почитай, для начала.
4 anisa8310
 
16.02.15
11:11
угу
5 бомболюк
 
16.02.15
11:53
ну а почему сразу нельзя? если использовать "v8x.Application" то формы модально прекрасно открываются ;-)
6 ДенисЧ
 
16.02.15
11:59
Расстрелять за такое решение.
7 Господин ПЖ
 
16.02.15
13:46
(5) апликейшен != com
8 ShoGUN
 
16.02.15
13:58
(7) С чего бы? Тоже COM, только другой компонент. Automation использует COM.
9 ДенисЧ
 
16.02.15
13:58
(7) аппликейшн==оле==ком
учи матчасть
10 Господин ПЖ
 
16.02.15
14:18
неудачно выразился
11 anisa8310
 
16.02.15
14:21
Все нормально! разобралась -не верно выразилась-
&НаКлиенте
Процедура ВедомостьЗП(Команда)
        
    БазаИсточник = Новый COMОбъект("V83.Application");
    
    СтрокаПодключения = "Srvr=""*****"";Ref=""****"";Usr=""***"";Pwd=""111"";";
    Попытка
        БазаИсточник.Connect(СтрокаПодключения);    
    Исключение
        Сообщить(ОписаниеОшибки());
    Возврат;
    КонецПопытки;
    
    Документ = БазаИсточник.Документы.ВедомостьНаВыплатуЗарплатыВКассу;
    Документ.ПолучитьФормуСписка().Открыть();
    БазаИсточник = Неопределено;
    
    
КонецПроцедуры
12 anisa8310
 
16.02.15
14:24
(9) да, теперь мне надо из выбрать из списка док. и из его таб части- выбрать всех и поместить в тч своей базы-короче такая задумка) можно и запросом было но! надо же перед тем как выбрать посмотреть на документ то или не то-подразделений очень много и т.д
Поэтому открыть форму поглядеть -потом выбрать этот док из списка другой базы и уже запрос отработает и заполнит ТЧ на моей стороне базу и ну там уже другая кухня.
13 anisa8310
 
16.02.15
14:26
как теперь установить параметр запроса - текущей строки из полученного списка?
14 ShoGUN
 
16.02.15
14:29
(11) Хоспади, Аниса, поставь нормальную фотку :)))
(13) Не понял вопроса. В параметр запроса засунуть выбранный документ из списка что ли?
15 anisa8310
 
16.02.15
14:39
(14) да, хочу из спискавыбрать как параметр к моему запросу (который сейчас шлифую на строне ЗУПА))
а что фотка соот-ет действительности мототоксикоз вообще то
16 anisa8310
 
16.02.15
14:41
(14) в скайпе за то нормальная фотка же? там зубы и фейс есть
17 ShoGUN
 
16.02.15
14:43
(15) Проще всего - форму _выбора_ вызывать модально, тогда в возвращаемом значении будет ссылка на выбранный документ.
18 ShoGUN
 
16.02.15
14:43
(16) Ты ж не лошадь, зачем мне зубы)))
19 anisa8310
 
16.02.15
14:46
(18) Нет не лощадь)
20 anisa8310
 
16.02.15
14:47
(17) а как мне её модально тогда вызвать? получить бы только ссылку и установить как параметр в запросе в внешней базе
21 ShoGUN
 
16.02.15
14:49
(20)Документ = БазаИсточник.Документы.ВедомостьНаВыплатуЗарплатыВКассу;
    ВыбранныйДок = Документ.ПолучитьФормуВыбора().ОткрытьМодально();

Но только тут надо учитывать, что весь процесс будет висеть, пока открыта форма и док не выбран.
22 anisa8310
 
16.02.15
15:47
(21) Документ.абпРасходПоКассе.Форма.ФормаДокумента.Форма(652)}: Значение не является значением объектного типа (NewObject)
    Запрос = Соединение.NewObject("Запрос");
застопорилась..запрос на той стороне создать не получаться
23 H A D G E H O G s
 
16.02.15
15:48
(9) Привет ДенисЧ.
24 ShoGUN
 
16.02.15
16:07
(22) Тип у переменной "Соединение" какой?
25 anisa8310
 
16.02.15
16:13
(24) Мне кажется что один раз com объект уже создали и запрос-это тоже com-поэтому что то не правильно делаю:

&НаКлиенте
Процедура ВедомостьЗП(Команда)
        
    БазаИсточник = Новый COMОбъект("V83.Application");
    
    СтрокаПодключения = "Srvr=""GMAIN"";Ref=""zup3"";Usr=""ЛАД"";Pwd=""111"";";
    Попытка
        СоединениеБаз=БазаИсточник.Connect(СтрокаПодключения);    
    Исключение
        Сообщить(ОписаниеОшибки());
    Возврат;
    КонецПопытки;
    
    Документ = БазаИсточник.Документы.ВедомостьНаВыплатуЗарплатыВКассу;
    ВыбранныйДок = Документ.ПолучитьФормуВыбора().ОткрытьМодально();

    ///////Выполняем запрос
    ЗапросНовый = СоединениеБаз.NewObject("Запрос");
    ЗапросНовый.Текст =
    "ВЫБРАТЬ
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.Сотрудник,
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.Подразделение,
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.СтатьяФинансирования,
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.СтатьяРасходов,
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.КВыплате,
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.КомпенсацияЗаЗадержкуЗарплаты,
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.Ссылка.Ссылка,
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.Ссылка.СуммаПоДокументу,
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.Ссылка.Комментарий
    |ИЗ
    |Документ.ВедомостьНаВыплатуЗарплатыВКассу.Зарплата КАК ВедомостьНаВыплатуЗарплатыВКассуЗарплата
    |ГДЕ
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.Ссылка = &Ссылка";
ЗапросНовый.УстановитьПараметр("Ссылка", ВыбранныйДок);
    РезультатЗапроса = ЗапросНовый.Выполнить();
    
    //ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    //
    //Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    //    Сообщить(ВыборкаДетальныеЗаписи.Сотрудник);
    //    
    //КонецЦикла;
    
КонецПроцедуры
26 anisa8310
 
16.02.15
16:16
ЗапросНовый = СоединениеБаз.NewObject("Запрос");- соединениеБаз-есть соединение com, запрос это тоже com объект
27 ShoGUN
 
16.02.15
16:22
(25) Не путай :) V83.Application и V83.COMConnector - это разные объекты, с похожими(но разными!) методами.

У тебя СоединениеБаз - булево, поскольку

Automation сервер (Automation server)
Connect (Connect)
Синтаксис:

Connect(<СтрокаСоединения>)
Параметры:

<СтрокаСоединения> (обязательный)

Тип: Строка.
Строка параметров (Строка соединения), используемая 1С:Предприятием для соединения с информационной базой.
Возвращаемое значение:

Тип: Булево.
Истина - инициализация прошла удачно, Ложь - в противном случае.
Описание:

Выполняет соединение системы 1С:Предприятие с информационной базой.
28 anisa8310
 
16.02.15
16:37
да еще понятнее стало) Спасибо! (27)
Параметр к запросу-выбранный документ не отдается)) запрос работает теперь
29 ShoGUN
 
16.02.15
17:08
(28) Точно не отдаётся. Вроде там подвоха нет никакого. Ну, кроме того, что документ со стороны инициатора соединения тоже виден, как COMОбъект.
30 ShoGUN
 
16.02.15
17:11
(29) "Точно не отдаётся." => "Точно не отдаётся?"
31 hhhh
 
16.02.15
17:19
(28) только примитивные типы передаются. Возвращай номер дату и вид документа.
32 anisa8310
 
16.02.15
17:20
(30) Есть подвох: Точно не отдается, ругается.
Зуп форма списка открывается- выбрать длокумент можно, затем выполняет запрос и при передаче параметра ругается:
"роизошла исключительная ситуация (1C:Enterprise 8.3.5.1443): {(14, 49)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ВедомостьНаВыплатуЗарплатыВКассуЗарплата.Ссылка <<?>>= &Ссылка
"
33 ShoGUN
 
16.02.15
17:21
(31) Ей надо передать документ как параметр в запрос к той же базе.
34 anisa8310
 
16.02.15
17:21
Если параметр- назначала просто номер, для поверки тогда сообщал мне "com объект" столько раз скольо строк в документе - 3 шт)
35 hhhh
 
16.02.15
17:22
(32) наверно ссылку из другой базы фигачите.
36 anisa8310
 
16.02.15
17:23
(33) нет ссылка не из другой базы
Документ = БазаИсточник.Документы.ВедомостьНаВыплатуЗарплатыВКассу;
    ВыбранныйДок = Документ.ПолучитьФормуВыбора().ОткрытьМодально();
    Сообщить(ВыбранныйДок);
37 ShoGUN
 
16.02.15
17:23
(34) Видимо, модальное открытие не работает, в смысле - значение не возвращает(вместо этого возвращает Неопределено). Проверь через Сообщить();
38 anisa8310
 
16.02.15
17:24
к одной подключаемся
39 anisa8310
 
16.02.15
17:24
(37) Сообщает (com объект)
40 anisa8310
 
16.02.15
17:25
т.е не ссылка значит и параметр отсюда не хочет передаваться
41 anisa8310
 
16.02.15
17:25
все пропало шеф
42 hhhh
 
16.02.15
17:26
ну посмотрите отладчиком, что там
43 ShoGUN
 
16.02.15
17:28
(39) Спакойно :))) Кто ж так делает?
  Сообщить(БазаИсточник.String(ВыбранныйДок)); - вот так покажет, что надо.
Для базы-клиента все объекты непримитивных типов в базе-сервере будут COMОбъекты. Преобразуй через БазаИсточник.String в строку и смотри, что это.
44 hhhh
 
16.02.15
17:31
(41) может так??

МойДокумент = БазаИсточник.Документы.ВедомостьНаВыплатуЗарплатыВКассу;
    ВыбранныйДок = МойДокумент.ПолучитьФормуВыбора().ОткрытьМодально();
45 anisa8310
 
16.02.15
17:33
теперь показывает) Ведомость в кассу 77ЗК-000017 от 30.01.2015
46 anisa8310
 
16.02.15
17:34
да параметр теперь этот остался если сообщить две фамилии -то вообще здорово)
47 ShoGUN
 
16.02.15
17:34
(45) Ну значит выбирается док. Должно работать.
48 anisa8310
 
16.02.15
17:35
да сейчас еще проверю))
49 ShoGUN
 
16.02.15
17:37
(48) Может ты форму крестиком закрыла, тогда вернётся "Неопределено". Сделай обработку этого.
50 anisa8310
 
16.02.15
17:43
Да, пока не пойму почему не сообщает результат запроса-тоже наверное что то с COM-м представлением
51 ShoGUN
 
16.02.15
17:46
(50) Ох, Аниса :)
Книга знаний: Охота на Com-ов

Читай, просвещайся :)
52 ShoGUN
 
16.02.15
17:46
По COM-соединению можно передать только примитивные типы. Больше ничего и не нужно!
53 anisa8310
 
16.02.15
17:49
(52) да комы для меня загадка)) буду читать
54 anisa8310
 
16.02.15
17:54
Процедура ВедомостьЗП(Команда)
        
    БазаИсточник = Новый COMОбъект("V83.Application");
    
    БазаИсточникКоннектор=Новый COMОбъект("V83.ComConnector");
    СтрокаПодключения = "Srvr=""GMAIN"";Ref=""zup3"";Usr=""ЛАД"";Pwd=""111"";";
    
    Попытка
        СоединениеБаз=БазаИсточник.Connect(СтрокаПодключения);    
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    
    Попытка
        ВнешнееСоединение = БазаИсточникКоннектор.Connect(СтрокаПодключения);    
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
        
    Документ = БазаИсточник.Документы.ВедомостьНаВыплатуЗарплатыВКассу;
    ВыбранныйДок = Документ.ПолучитьФормуВыбора().ОткрытьМодально();
    Док=БазаИсточник.String(ВыбранныйДок);
    Сообщить(Док);

    ///////Выполняем запрос

    ЗапросНовый = ВнешнееСоединение.NewObject("Запрос");
    ЗапросНовый.Текст =
    "ВЫБРАТЬ
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.Сотрудник,
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.Подразделение,
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.СтатьяФинансирования,
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.СтатьяРасходов,
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.КВыплате,
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.КомпенсацияЗаЗадержкуЗарплаты,
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.Ссылка.Ссылка,
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.Ссылка.СуммаПоДокументу,
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.Ссылка.Комментарий
    |ИЗ
    |Документ.ВедомостьНаВыплатуЗарплатыВКассу.Зарплата КАК ВедомостьНаВыплатуЗарплатыВКассуЗарплата
    |ГДЕ
    |ВедомостьНаВыплатуЗарплатыВКассуЗарплата.Ссылка = &Ссылка";
    
ЗапросНовый.УстановитьПараметр("Ссылка", Док);
    РезультатЗапроса = ЗапросНовый.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить(ВыборкаДетальныеЗаписи.Сотрудник);
        
    КонецЦикла;
    КонецПроцедуры
55 anisa8310
 
16.02.15
17:56
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить(ВыборкаДетальныеЗаписи.Сотрудник);
        
    КонецЦикла;

Вот это не сообщает(
56 anisa8310
 
16.02.15
17:57
V8.String(Выборка.Ссылка) так нужно сообщать
57 anisa8310
 
16.02.15
17:58
из охоты на Сом ов
58 anisa8310
 
16.02.15
18:11
нет не могу получить  выборку в комментарий
59 anisa8310
 
16.02.15
18:12
Сообщить("Производится выгрузка  "+ЗапросНовый.String(ВыборкаДетальныеЗаписи.Сотрудник));
60 anisa8310
 
16.02.15
18:28
(52) не сообщает в цикле значения запроса
61 hhhh
 
16.02.15
20:24
XMLString
62 anisa8310
 
16.02.15
20:26
(61) Что? я вот снова решила вернуться к этой задаче почему не сообщает выборку
63 anisa8310
 
16.02.15
20:27
сом объект пишет если убрать стринг
64 DirecTwiX
 
16.02.15
20:31
(54) Зачем и "V83.Application" и "V83.ComConnector"???

(63) String -> XMLString
65 anisa8310
 
16.02.15
20:35
V83.Application-это булево
V83.ComConnector - для соединения- а что они друг другу мешать могут? (64)
66 anisa8310
 
16.02.15
20:35
String -> XMLString заменит чтоли попробовать
67 DirecTwiX
 
16.02.15
20:59
(65) Application может всё, что умеет ComConnector.
Чтобы было не булево, а COM, надо писать
   Соединение.Connect(Строка);
   Соединение.NewObject(...)
а не
   Соединение = Соединение.Connect(Строка);
   Соединение.NewObject(...)

Последний вариант будет, если использовать ComConnector.
68 anisa8310
 
16.02.15
21:06
(67) сейчас попробую убрать лишнее
69 anisa8310
 
16.02.15
21:21
нет не получается..
70 DirecTwiX
 
16.02.15
21:36
(69) В общем, всё плохо.
А в (11) получалось...
71 anisa8310
 
16.02.15
21:51
(70) Да, просто параметр не передается почему то, хотя сообщение получаю о выбранном в списке документе.
72 anisa8310
 
16.02.15
21:52
Хочу выбрать документ потом получить из него таб часть и заполнить свою таб часть-но вот застряла на одном шаге
73 hhhh
 
16.02.15
22:48
в итоге что получилось?
74 anisa8310
 
17.02.15
17:17
(73) пока ничего-завтра вернусь к этой задаче) Спасибо!
75 D_E_S_131
 
17.02.15
17:44
А в 21-м веке уже запретили данные выгружать в промежуточные (например XML) файлы и использовать их по назначению в других базах?
76 anisa8310
 
18.02.15
22:20
(75) нет. только COM и почти бесшовная интеграция)
77 anisa8310
 
26.02.15
17:38
Кстати все сделала) работает как часики
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан