Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Из 1с 7.7 получить данные из регистра 1с 8.1 по COM-соединению.          
andrew76 Подменю пользователя
сообщение 31.01.22, 12:27
Сообщение #1

Оратор
*****
Группа: Пользователи
Сообщений: 443
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Добрый день !

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

Пишу :

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

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



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

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

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



TohaMonster Подменю пользователя
сообщение 31.01.22, 14:47
Сообщение #2

Говорящий
***
Группа: Пользователи
Сообщений: 70
Спасибо сказали: 29 раз
Рейтинг: 29

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

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

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

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

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

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

  КонецЦикла;

КонецЦикла;

andrew76 Подменю пользователя
сообщение 31.01.22, 16:51
Сообщение #3

Оратор
*****
Группа: Пользователи
Сообщений: 443
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

TohaMonster @ Сегодня, 17:47 * ,

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

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

Запрос.УстановитьПараметр("ДатаСреза", ТекущаяДата());

Vofka Подменю пользователя
сообщение 31.01.22, 17:15
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

andrew76, а в чем проблема? Что в этом случае происходит?
Цитата(andrew76 @ 31.01.22, 12:27) *
Результат =Запрос.Выполнить();


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


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

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

Если вам что-то вернется в результате и вы попадете в цикл выборки, то все ваши текущие свойства будут в виде COMОбъект. Выбирайте в запросе простые типы, например Сотрудник.Наименованиею

andrew76 Подменю пользователя
сообщение 31.01.22, 18:02
Сообщение #5

Оратор
*****
Группа: Пользователи
Сообщений: 443
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Цитата(Vofka @ 31.01.22, 20:15) *
Вряд-ли Сотрудник это строка.


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

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


andrew76 @ Сегодня, 20:26 * ,

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


andrew76 @ Сегодня, 20:45 * ,

вот здесь дату передают :
https://pro1c.org.ua/index.php?showtopic=3440
Док.Дата=connection.ЗначениеИзСтрокиВнутр("{""D"",20081231235959}");


и здесь тоже были проблемы:
[необходимо зарегистрироваться для просмотра ссылки]

Сообщение отредактировал andrew76 - 31.01.22, 18:05

TohaMonster Подменю пользователя
сообщение 01.02.22, 8:42
Сообщение #6

Говорящий
***
Группа: Пользователи
Сообщений: 70
Спасибо сказали: 29 раз
Рейтинг: 29

Семен Семеныч. Точно, там же дата по-другому передается

andrew76 Подменю пользователя
сообщение 01.02.22, 9:10
Сообщение #7

Оратор
*****
Группа: Пользователи
Сообщений: 443
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Может через COM соединение из 7.7 результат запроса прочитать нельзя вообще ?
Запрос переделал под статический (вообще он работает ли в COM ?)

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

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


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

Res = Zapros.Execute();
tab = Res.Unload(); //пусто

TohaMonster Подменю пользователя
сообщение 01.02.22, 10:01
Сообщение #8

Говорящий
***
Группа: Пользователи
Сообщений: 70
Спасибо сказали: 29 раз
Рейтинг: 29

andrew76 @ Сегодня, 9:10 * ,

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

andrew76 Подменю пользователя
сообщение 01.02.22, 10:33
Сообщение #9

Оратор
*****
Группа: Пользователи
Сообщений: 443
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Цитата(TohaMonster @ 01.02.22, 13:01) *
andrew76 @ Сегодня, 9:10 * ,

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


Пусто.

Vofka Подменю пользователя
сообщение 01.02.22, 10:39
Сообщение #10

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Цитата(andrew76 @ 01.02.22, 9:10) *
Сотрудник =934

Может
Сотрудник =""934""

andrew76 Подменю пользователя
сообщение 01.02.22, 10:40
Сообщение #11

Оратор
*****
Группа: Пользователи
Сообщений: 443
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

в обеих вариантах не работает.

TohaMonster Подменю пользователя
сообщение 01.02.22, 11:23
Сообщение #12

Говорящий
***
Группа: Пользователи
Сообщений: 70
Спасибо сказали: 29 раз
Рейтинг: 29

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

andrew76 Подменю пользователя
сообщение 01.02.22, 16:32
Сообщение #13

Оратор
*****
Группа: Пользователи
Сообщений: 443
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

"В 7-ку передаются только примитивные типы" -(из подсказки.)
Поэтому ссылочный тип и не могу прочитать.

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

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.04.24, 5:06
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!