Имя: Пароль:
1C
1C 7.7
v7: Передать параметры в запрос из 1С 7.7 в 1С 8.1 и прочитать результат по-COM соединению
0 andrew76
 
01.02.22
10:32
Добрый день !
Возможно ли параметры в запрос к регистру сведений из 1С 7.7 в 1С 8.1 и прочитать результат по-COM соединению ?
1 ДенисЧ
 
01.02.22
10:33
Да
2 Bigbro
 
01.02.22
10:36
и наоборот - тоже да.
3 andrew76
 
01.02.22
10:38
А дату из 7.7 в 8.1 в параметр запроса как передаете ?
4 andrew76
 
01.02.22
10:40
Запрос =v8.NewObject("Запрос");
Запрос.Текст =
"ВЫБРАТЬ
|    ГрафикиСотрудниковСрезПоследних.График,
|   Сотрудник КАК Сотрудник
|ИЗ
|    РегистрСведений.ГрафикиСотрудников.СрезПоследних(&ДатаСреза, Сотрудник = &ТабНом) КАК ГрафикиСотрудниковСрезПоследних";
            
Запрос.УстановитьПараметр("ДатаСреза", ТекущаяДата());
Запрос.УстановитьПараметр("ТабНом", "980");                      //Таб номер=980 - фильтр по 1 сотруднику
5 Bigbro
 
01.02.22
10:45
формат даты насколько понимаю разный. соответственно переменную для даты надо тоже создавать там куда ком-соединение идет. тогда все работает.
6 lubitelxml
 
01.02.22
10:48
Запрос.УстановитьПараметр("ТабНом", "980"); - у тебя точно строковое измерение? Там по сути ссылка должна быть, а не строка, если РС типовой
7 andrew76
 
01.02.22
11:00
lubitelxml,да Сотрудник - в той конфигурации Строковый.Табельный номер Сотрудника.
8 andrew76
 
01.02.22
11:15
Bigbro,просто переменную в 1с 7 определить как дату и передать ее в в СOM ?
А сами это делать пробовали ? Это работает ?
9 Bigbro
 
01.02.22
11:17
у меня обратная задача. я из 8ки обращаюсь в 7.7
там созданые необходимые глобальные переменные к ним обращаюсь через ком для установки значений и вызываю функции для получения результата
10 andrew76
 
01.02.22
11:28
Нет, интересует процесс из 7 в 8.
11 andrew76
 
01.02.22
11:31
В общем ,чтобы я не делал ,дата не передается из 7 в параметр запроса 8.
я уже переделал запрос-без параметров.Чтобы Проверить- работает или нет.

Zapros =v8.NewObject("Query");
Zapros.Text =
"ВЫБРАТЬ
|    ГрафикиСотрудниковСрезПоследних.График,
|   Сотрудник КАК Сотрудник
|ИЗ
|    РегистрСведений.ГрафикиСотрудников.СрезПоследних(ДатаВремя(2022,1,31), Сотрудник =980) КАК ГрафикиСотрудниковСрезПоследних";

Результат=Zapros.Выполнить().Выбрать();

По идее на выходе должна быть 1 строка результата.
Но как ее прочитать в с 1c 7.7 ?
12 acht
 
01.02.22
11:38
А как ты уже пробовал?
13 andrew76
 
01.02.22
11:41
Время то идет.
14 Guk
 
01.02.22
11:46
(11) выгрузи в ТЗ. только график и сотрудник должны быть примитивных типов (число, строка, дата)...
15 andrew76
 
01.02.22
11:48
НЕеее,график-это ссылка на справочник Графиков !
16 Guk
 
01.02.22
11:49
(15) ну и что ты тогда хочешь в семерке увидеть?...
17 Bigbro
 
01.02.22
11:49
ссылки не передаются, добро пожаловать.
18 Bigbro
 
01.02.22
11:50
увидишь COM-объект.
19 andrew76
 
01.02.22
11:55
Мне нужно прочитать значение из запроса.В данном случае график работы.
20 andrew76
 
01.02.22
11:55
Значит в 7 этого сделать нельзя ?
21 acht
 
01.02.22
11:59
Что ты собираешся делать с полученным значением дальше?
22 andrew76
 
01.02.22
12:01
У Графика (элемент справочника),есть табличные части.Мне их надо прочитать.
23 acht
 
01.02.22
12:08
Идем глубже.
Как ты будешь использовать данные из табличных частей? В данные 7.7 ты сможешь преобразовать только данные примитивных типов - число, строка, дата.

Оптимально - запросить эти данные сразу в запросе на стороне 8.3
24 andrew76
 
01.02.22
12:14
Значит, мне этот запрос посадить в модуль внешнего соединения на 1с 8.1,и вызывать его через 7? (в СОM)
25 acht
 
01.02.22
12:15
Я тебя не понимаю.
Предлагаю остановится на том, что ты не сможешь этого сделать.
26 Bigbro
 
01.02.22
12:22
это вроде бы простой вопрос, но поначалу у меня тоже вызывал порой ступор.
на самом деле все просто - у вас есть 2 среды. они разные. каждая со своими данными. и вы можете из одной в другую передавать только примитивные типы. через присвоение.
но вы можете работать с объектами одной среды из другой. через точки пользуясь методами второй среды. и складывая объектные значения в том числе в переменные - но эти переменные тоже должны быть во второй среде. иначе - увы, мы помним что передаются только примитивные типы.
вот и все.
дальше аккуратно пишите код, расставляя мысленно галочки - вот это у меня запрос на стороне 8ки, а вот эта переменная на стороне 7ки и так далее. и все получится.
27 Bigbro
 
01.02.22
12:24
то есть в8график = в8.ньюобжект("справочник.Графикиработы");
и потом
28 victuan1
 
01.02.22
12:40
(27) ньюобжект?
29 DCKiller
 
01.02.22
13:44
(24) Необязательно вносить изменения в конфигурацию v8. У тебя уже есть обращение к ней на стороне 7.7, твоя задача теперь в этом же запросе получить данные из тех самых таб.частей графика, которые тебе нужны, и в нем же привести данные из них к примитивным типам, чтобы можно было их прочитать как они есть в 7.7. Далее, результат запроса выгружаешь в таблицу значений, потом эту таблицу значений на стороне v8 преобразуешь в текст посредством волшебного метода ЗначениеВСтрокуВнутр(). После чего эту строку уже на стороне 7.7 преобразуешь обратно в таблицу значений при помощи ЗначениеИзСтрокиВнутр(). Ну как бы и всё...
30 andrew76
 
01.02.22
14:17
Не представляю как это можно сделать:
Мне нужно Месяц1 в запросе (это таб.часть справочника)
построчно прочитать:

Zapros.Text =
"ВЫБРАТЬ
|    ГрафикиСотрудниковСрезПоследних.График.Месяц1,
31 Guk
 
01.02.22
14:47
(30) да докопайся уже в запросе до примитивных типов...
32 acht
 
01.02.22
15:41
(29) > таблицу значений на стороне v8 преобразуешь в текст посредством волшебного метода ЗначениеВСтрокуВнутр(). После чего эту строку уже на стороне 7.7 преобразуешь обратно в таблицу значений

И тут бац - взрывается вертолет!
33 DCKiller
 
01.02.22
16:08
(32)
Ну либо парсить эту строку и потом распарсенную, разбитую на многострочный текст обходить и заполнять ее данными ТЗ, созданную на стороне семерки. Либо выгрузить в файл ТЗ на стороне восьмерки, а потом на стороне 7.7 считывать этот файл. Тут масса способов может быть, чего ты цепляешься к деталям?.. Хотя, судя по (30), тут про них говорить преждевременно, челу сперва нужно объяснить, что такое левое/правое соединение в запросе.
34 Злопчинский
 
01.02.22
21:24
(31) ты думаешь - знает что такое примитивные типы ?
35 Bigbro
 
02.02.22
04:09
похоже для ТС ответ на вопрос темы все-таки - нет. (
36 skafandr
 
02.02.22
08:51
(30) +1
1) Дата спокойно передается из 7 как у вас написано
       Запрос.УстановитьПараметр("ДатаСреза", ТекущаяДата());
   только надо понимать что время у даты восьмерки при этом будет 00.00. Если нужно нужно включение данных за указанную дату надо  передавать ТекущаяДата()+1;
1) Сделать запрос до примитивных типов из вашего Месяц1
2) в 7-ке типа такого :
        Результат = Запрос.Выполнить();
    ТЗ8 = Результат.Выгрузить();
    
    Для инд=0 По ТЗ8.Количество()-1 Цикл
        ТекСтрока = ТЗ8.Получить(инд);
        ИННКонтрагент = ТекСтрока.Контрагент.ИНН;
    КонецЦикла;      

обращаю внимание что в ТЗ8 Контрагент это элемент справочника 8,те можно брать реквизиты примитивных типов

Уффффффф