Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: При OLE запросе ошибка - Плохой тип переменной
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
shkoda
Всем приветы!

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

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

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



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

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

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

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

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

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


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


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


Всем спасибо!
miha74
Здравствуйте. Я с журналами расчетов никогда дела не имел, но судя по всему у Вас не определена (не найдена или не спозиционирована) "ГруппаРасчетов.ВсеНачисления". Это как если бы Вы перебирали элементы какого-нибудь справочника базы ОЛЕ и фильтровали по группе справочника, а в коде эта группа не спозиционирована.
korol1091
Проверьте типы всех переменных. Возможно там где-то COMОбъект, вместо объекта 1С стоит.
igmig65
Смотрите: ЖурналЗП - это у вас ОЛЕ объект, тоесть объект другой базы, а в дальше вы проверяете вхождение в группу ГруппаРасчетов.ВсеНачисления, а это уже группа из базы из которой подключаетесь.
Попробуйте так
Если ЖурналЗП.ВидРасч.ВходитВГруппу(БазаОле.ГруппаРасчетов.ВсеНачисления)=1 Тогда

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

а потом уже
сли ЖурналЗП.ВидРасч.ВходитВГруппу(грВсеНач)=1 Тогда
shkoda
igmig65 @ Вчера, 13:13 необходимо зарегистрироваться для просмотра ссылки,

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

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

                        КонецЦикла;


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

Всем спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.