Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Из 1с 7.7 получить данные из регистра 1с 8.1 по COM-соединению.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
andrew76
Добрый день !

Нужно в 1с 7.7 прочитать данные из регистра сведений ГрафикиСотрудников (база на 1с 8.1) по COM-cоединению.
График в запросе -это ссылка на справочник графиков сотрудников.Это элемент справочника с табличной частью.
Как в 1c 7.7 из 1с 8 в результате запроса прочитать построчно эту табличную часть ?

Пишу :

Запрос =v8.NewObject("Запрос");
Запрос.Текст =
"ВЫБРАТЬ
|    ГрафикиСотрудниковСрезПоследних.График,
|   Сотрудник КАК Сотрудник
|ИЗ
|    РегистрСведений.ГрафикиСотрудников.СрезПоследних(&ДатаСреза, Сотрудник = &ТабНом) КАК ГрафикиСотрудниковСрезПоследних";
            
Запрос.УстановитьПараметр("ДатаСреза", ТекущаяДата());
Запрос.УстановитьПараметр("ТабНом", "934");                      //Таб номер=934 - фильтр по 1 сотруднику

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



Или вариант такой :

Фильтр  =v8.NewObject("Структура");
Фильтр.Вставить("Сотрудник","934");

Графики_=v8.РегистрыСведений.ГрафикиСотрудников.СрезПоследних(ДатТек,Фильтр);
//Для ??? каждого ???? ТекущаяСтрока из Графики_ ?????


TohaMonster
Гм... Интересно. Не на чем попробовать. А что-то вроде этого не прокатит - основная функция для работы - Получить()? (для первого примера)

v8тбРезультат = Результат.Выгрузить();     // OLE-таблица значений
Для Сч=1 По v8тбРезультат.Количество() Цикл

  v8СтрокаРезультат = v8тбРезультат.Получить(Сч-1);        // OLE-строка таблицы значений
  v8График = v8СтрокаРезультат.График;         // OLE-Справочник

  v8ТабличнаяЧастьГрафика = v8График.ИмяТабличнойЧасти;  // OLE-табличная часть

  Для СчСтрок=1 По v8ТабличнаяЧастьГрафика.Количество() Цикл

    v8СтрокаГрафика = v8ТабличнаяЧастьГрафика.Получить(СчСтрок-1);  //  OLE-строка таб. части
    // и делай с ней что хошь

  КонецЦикла;

КонецЦикла;
andrew76
TohaMonster @ Сегодня, 17:47 необходимо зарегистрироваться для просмотра ссылки ,

Значит попробовать выгрузить результат запроса в таблицу значений ?
Но почему то у меня на методе Выгрузить вываливается ошибка:

Результат =Запрос.Выполнить().Выгрузить();
Может запрос пустой ? Или с передачей даты в параметр запроса проблема ?
Как из 1c 7.7 через COM -соединение дату передать корректно в 1с.8.1 ?
Верен ли такой код ?

Запрос.УстановитьПараметр("ДатаСреза", ТекущаяДата());
Vofka
andrew76, а в чем проблема? Что в этом случае происходит?
Цитата(andrew76 @ 31.01.22, 12:27) необходимо зарегистрироваться для просмотра ссылки
Результат =Запрос.Выполнить();


Если там ошибка не возникает, то дальше попробуйте:
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() = 0 Цикл
...
КонецЦикла;


Но! Сам запрос у вас отработает скорее всего некорректно и вернет ничего.
Запрос.УстановитьПараметр("ТабНом", "934");

Вряд-ли Сотрудник это строка.

Если вам что-то вернется в результате и вы попадете в цикл выборки, то все ваши текущие свойства будут в виде COMОбъект. Выбирайте в запросе простые типы, например Сотрудник.Наименованиею
andrew76
Цитата(Vofka @ 31.01.22, 20:15) необходимо зарегистрироваться для просмотра ссылки
Вряд-ли Сотрудник это строка.


Дело в том,что запрос выдернут из рабочей конфигурации.Т.е. в той c которой идет соединение COM.
Там этот запрос работает.

Запрос.Текст = 
"ВЫБРАТЬ
|    ГрафикиСотрудниковСрезПоследних.График,
|   Сотрудник КАК Сотрудник
|ИЗ
|    РегистрСведений.ГрафикиСотрудников.СрезПоследних(&ДатаСреза, Сотрудник = &ТабНом) КАК ГрафикиСотрудниковСрезПоследних";
            
Запрос.УстановитьПараметр("ДатаСреза", ТекущаяДата());
Запрос.УстановитьПараметр("ТабНом", "934");                      //Таб номер=934 - фильтр по 1 сотруднику


andrew76 @ Сегодня, 20:26 необходимо зарегистрироваться для просмотра ссылки ,

Все же наверное проблема в правильной передаче Даты из 1с 7.7 в 1с 8.1


andrew76 @ Сегодня, 20:45 необходимо зарегистрироваться для просмотра ссылки ,

вот здесь дату передают :
необходимо зарегистрироваться для просмотра ссылки
Док.Дата=connection.ЗначениеИзСтрокиВнутр("{""D"",20081231235959}");


и здесь тоже были проблемы:
необходимо зарегистрироваться для просмотра ссылки
TohaMonster
Семен Семеныч. Точно, там же дата по-другому передается
andrew76
Может через COM соединение из 7.7 результат запроса прочитать нельзя вообще ?
Запрос переделал под статический (вообще он работает ли в COM ?)

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

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


Если выполнить строку Результат.Количество(),то на выходе будет 1.
Т.е. запрос вроде работает.
А вот если попытаться выгрузить в таблицу результат запроса,то на выходе пустое значение

Res = Zapros.Execute();
tab = Res.Unload(); //пусто
TohaMonster
andrew76 @ Сегодня, 9:10 необходимо зарегистрироваться для просмотра ссылки ,

Гм... Странно. А совет Vofk-и выше?
Выборка = Результат.Выбрать(); 
Пока Выборка.Следующий() = 0 Цикл ...
andrew76
Цитата(TohaMonster @ 01.02.22, 13:01) необходимо зарегистрироваться для просмотра ссылки
andrew76 @ Сегодня, 9:10 необходимо зарегистрироваться для просмотра ссылки ,

Гм... Странно. А совет Vofk-и выше?
Выборка = Результат.Выбрать(); 
Пока Выборка.Следующий() = 0 Цикл ...


Пусто.
Vofka
Цитата(andrew76 @ 01.02.22, 9:10) необходимо зарегистрироваться для просмотра ссылки
Сотрудник =934

Может
Сотрудник =""934""
andrew76
в обеих вариантах не работает.
TohaMonster
andrew76 @ Сегодня, 10:40 необходимо зарегистрироваться для просмотра ссылки ,
Должно работать smile.gif хоть Семерку ставь.
А вот так?
Пока Выборка.Следующий() = 1 Цикл ...
andrew76
"В 7-ку передаются только примитивные типы" -(из подсказки.)
Поэтому ссылочный тип и не могу прочитать.

Есть вариант сделать функцию с запросом в модуле ВнешнегоСоединения в конфигурации 8.1.
А потом вызывать в COM как v8.ИмяФункции().Но опять же ,как из этой функции передать результат в 1c 7?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.