Версия для печати темы (https://pro1c.org.ua/index.php?s=0a856083102208f932b168d1555a8474&showtopic=30923)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ При OLE запросе ошибка - Плохой тип переменной

Автор: shkoda 19.07.16, 16:16

Всем приветы!

Делаю отчёт, и пытаюсь при помощи ОЛЕ в него добавить данные из другой базы. Обе базы самописные но на основе ЗиКа.
Я хочу взять данные по Начислениям ЗП и вот как это выглядит:

БазаОле=СоздатьОбъект("V77S.Application");
...
    ЖурналЗП = БазаОле.CreateObject("ЖурналРасчетов.Зарплата");
    СпрСот = БазаОле.CreateObject("Справочник.Сотрудники");
...
Если СпрСот.НайтиПоКоду(СокрЛП(Сред(ЗначениеГр2.КОД,3))) = 1 Тогда
Сотр = СпрСот.ТекущийЭлемент();
Сообщить(Сотр.Наименование);
ЖурналЗП.ВыбратьЗаписиПоОбъекту(Сотр,НачДата,КонДата);
    Пока ЖурналЗП.ПолучитьЗапись() = 1 Цикл
        Если ЖурналЗП.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)=1 Тогда
            ВсегоНачислено = ВсегоНачислено + ЖурналЗП.Результат;
        КонецЕсли;
        Сообщить(ЖурналЗП.Результат);
    КонецЦикла;
КонецЕсли;

ЗПФ1 = ВсегоНачислено;



При выполнении этого "кода"
получается вот такая ошибка

Если ЖурналЗП.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)=1 Тогда
....ERT(195)}: Плохой тип переменной

уже по всякому пробовал, и так и эдак, уже неделю парюсь не могу сделать, но начальство уже очень живо интересуется почему отчет всё ещё не готов(((

очень подозреваю, что проблема кроется в
ГруппаРасчетов.ВсеНачисления
судя по всему Оле не видит что там написано, либо не может с этим работать

может кто сталкивался с подобным? как обойти эту проблему или решить другим способом

и ещё - думаю попробовать сделать прямым запросом SQL'ным


п.с. если сделать
ЖурналЗП.ВыбратьЗаписиПоОбъекту(Сотр,НачДата,КонДата);
    Пока ЖурналЗП.ПолучитьЗапись() = 1 Цикл
        Сообщить(ЖурналЗП.Результат);
    КонецЦикла;


то данные за нужный период выводятся, но там помимо начислений есть и другие записи, как их отфильтровать?


Всем спасибо!

Автор: miha74 20.07.16, 8:51

Здравствуйте. Я с журналами расчетов никогда дела не имел, но судя по всему у Вас не определена (не найдена или не спозиционирована) "ГруппаРасчетов.ВсеНачисления". Это как если бы Вы перебирали элементы какого-нибудь справочника базы ОЛЕ и фильтровали по группе справочника, а в коде эта группа не спозиционирована.

Автор: korol1091 20.07.16, 9:52

Проверьте типы всех переменных. Возможно там где-то COMОбъект, вместо объекта 1С стоит.

Автор: igmig65 21.07.16, 12:13

Смотрите: ЖурналЗП - это у вас ОЛЕ объект, тоесть объект другой базы, а в дальше вы проверяете вхождение в группу ГруппаРасчетов.ВсеНачисления, а это уже группа из базы из которой подключаетесь.
Попробуйте так

Если ЖурналЗП.ВидРасч.ВходитВГруппу(БазаОле.ГруппаРасчетов.ВсеНачисления)=1 Тогда

может лучше задать переменную перед этим
грВсеНач = БазаОле.ГруппаРасчетов.ВсеНачисления;

а потом уже
сли ЖурналЗП.ВидРасч.ВходитВГруппу(грВсеНач)=1 Тогда

Автор: shkoda 22.07.16, 14:54

igmig65 @ Вчера, 13:13 *,

фухх..
намаялся, конечно, и решение очень странное, но тем не менее рабтает 100%

ЖурналЗП.ВыбратьЗаписиПоОбъекту(Сотр,НачДата,КонДата);
                        Пока ЖурналЗП.ПолучитьЗапись() = 1 Цикл
                            
                            для й=1 по БазаОле.Метаданные.ВидРасчета(ЖурналЗП.ВидРасч.Код).ГруппаРасчетов.Количество() цикл
                                  Если БазаОле.Метаданные.ВидРасчета(ЖурналЗП.ВидРасч.Код).ГруппаРасчетов.Получить(й).Идентификатор="ВсеНачисления" тогда
                                ВсегоНачислено = ВсегоНачислено + ЖурналЗП.Результат;
                                Сообщить("" + ЖурналЗП.Результат + " " + ЖурналЗП.ВидРасч.Код);
                                //прервать;
                                 КонецЕсли;
                            КонецЦикла;

                        КонецЦикла;


Тему можно закрвыать.

Всем спасибо!

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua