Имя: Пароль:
1C
1C 7.7
v7: Что не так с запросом через ОЛЮ?
0 2S
 
07.10.17
17:03
ДатаНачалаОтпускаОЛЕ = Дата1;
    СпрСотрудникиОЛЕ = ОЛЕ.CreateObject("Справочник.Сотрудники");                    
    Если СпрСотрудникиОЛЕ.НайтиПоКоду(ТекСотрудник.Код, 0) = 1 Тогда
        ТекСотрудникОЛЕ = СпрСотрудникиОЛЕ.ТекущийЭлемент();
    КонецЕсли;      

    ЗапросОЛЕ = ОЛЕ.CreateObject("Запрос");    
    ТекстЗапросаОЛЕ = "Период с '" + ДатаНачалаОтпускаОЛЕ + "' по '" + ДатаОкончанияОтпускаОЛЕ + "';
    |ТекущийДокумент = ЖурналРасчетов.Зарплата.ТекущийДокумент;
    |ДатаНачала = ЖурналРасчетов.Зарплата.ДатаНачала;
    |ДатаОкончания = ЖурналРасчетов.Зарплата.ДатаОкончания;
    |Объект = ЖурналРасчетов.Зарплата.Объект;
    |ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч.Код;
    |Дни = ЖурналРасчетов.Зарплата.Дни;
    |Результат = ЖурналРасчетов.Зарплата.Результат;
    |Функция ДниСумма = Сумма(Дни);
    |Функция РезультатВсего = Сумма(Результат);
    |Группировка Объект;
    |Группировка ВидРасч;
    |Группировка ТекущийДокумент;
    |Группировка ДатаНачала;
    |Группировка ДатаОкончания;
    |Условие(Объект = ТекСотрудникОЛЕ);
    |Условие((ВидРасч = ""ОтпускОчередной"") ИЛИ (ВидРасч = ""ОтпускДополнительный"") ИЛИ (ВидРасч = ""КомпенсацияОтпускаСверх28дней"") ИЛИ (ВидРасч = ""КомпенсацияОтпуска""));
    |"//}}ЗАПРОС



Если ЗапросОЛЕ.Выполнить(ТекстЗапросаОЛЕ) = 1 Тогда
{C:\EXTFORMS\ОСТАТКИОТПУСКОВ.ERT(281)}: 1С:Предприятие: Условие(Объект = ТекСотрудникОЛЕ <<?>> );
Запрос[16] : Ошибка в выражении 'ТекСотрудникОЛЕ'

Условие по видам расчетов неверно описал?
1 Смотрящий
 
07.10.17
17:07
(0) Не находит по коду в ОЛЕ-базе, не инициализируется переменная
2 2S
 
07.10.17
17:27
переделал через массив
    ОЛЕ.ExecuteBatch("СписокСотрудников[1] =СоздатьОбъект(""СписокЗначений"")");
    СписокСотрудников = ОЛЕ.EvalExpr("СписокСотрудников[1]");
    СпрСотрудникиОЛЕ = ОЛЕ.CreateObject("Справочник.Сотрудники");                    
    Если СпрСотрудникиОЛЕ.НайтиПоКоду(ТекСотрудник.Код, 0) = 1 Тогда
        СписокСотрудников.ДобавитьЗначение(СпрСотрудникиОЛЕ.ТекущийЭлемент());
    КонецЕсли;

    ОЛЕ.ExecuteBatch("СписокВР[1] =СоздатьОбъект(""СписокЗначений"")");
    СписокВР = ОЛЕ.EvalExpr("СписокВР[1]");
    СписокВР.ДобавитьЗначение(ОЛЕ.ВидРасчета.ОтпускОчередной);
    СписокВР.ДобавитьЗначение(ОЛЕ.ВидРасчета.ОтпускДополнительный);
    СписокВР.ДобавитьЗначение(ОЛЕ.ВидРасчета.КомпенсацияОтпускаСверх28дней);
    СписокВР.ДобавитьЗначение(ОЛЕ.ВидРасчета.КомпенсацияОтпуска);


    ЗапросОЛЕ = ОЛЕ.CreateObject("Запрос");    
    ТекстЗапросаОЛЕ = "Период с '" + ДатаНачалаОтпускаОЛЕ + "' по '" + ДатаОкончанияОтпускаОЛЕ + "';
    |ТекущийДокумент = ЖурналРасчетов.Зарплата.ТекущийДокумент;
    |ДатаНачала = ЖурналРасчетов.Зарплата.ДатаНачала;
    |ДатаОкончания = ЖурналРасчетов.Зарплата.ДатаОкончания;
    |Объект = ЖурналРасчетов.Зарплата.Объект;
    |ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч;
    |Дни = ЖурналРасчетов.Зарплата.Дни;
    |Результат = ЖурналРасчетов.Зарплата.Результат;
    |Функция ДниСумма = Сумма(Дни);
    |Функция РезультатВсего = Сумма(Результат);
    |Группировка Объект;
    |Группировка ВидРасч;
    |Группировка ТекущийДокумент;
    |Группировка ДатаНачала;
    |Группировка ДатаОкончания;
    |Условие (Объект в СписокСотрудников[1]);
    |Условие (ВидРасч в СписокВР[1]);
    |"//}}ЗАПРОС
    ;

СписокСотрудников = ОЛЕ.EvalExpr("СписокСотрудников[1]");
{C:\ОСТАТКИОТПУСКОВ.ERT(257)}: 1С:Предприятие: 1    СписокСотрудников<<?>>[1]
Переменная не объявлена как массив (СписокСотрудников)
3 Злопчинский
 
07.10.17
17:28
Потому что тексотрудниколе будет иметь тип "ОЛЕ" и доступен в базе которая Инициирует подклцчение к ОЛЕ-базе, а в оле базе, где выполняется запрос - никакого ТеСотрудникОле нет, а должен иметь тип ссылка
надо сделать типа
Оле.глРасшифровка = ОлеСправочникСотрудник.ТекущийЭлемент();
|Условие(Объект = глРасшифровка);
4 Злопчинский
 
07.10.17
17:28
используй экспортные глоб.переменные оле-базы и все.
5 2S
 
07.10.17
17:31
(4) описал в оле базе
Перем СписокВР[1] Экспорт;
Перем СписокСотрудников[1] Экспорт;
6 Злопчинский
 
07.10.17
17:35
вот насчет массивов не знаю, надо проверить.. по идее д.б. ок
7 2S
 
07.10.17
17:37
(6) и я о том же
ладно, поковыряю, а то с этим в последний раз лет 5 назад сталкивался.