Имя: Пароль:
1C
1С v8
1с 8.2 Подключаюсь по Com к 7.7. Есть трудности.
0 bard666
 
26.06.14
12:13
Всем привет! Пытаюсь разобраться как через Com заставить 7.7 выполнить запрос. Получается ошибка
Ошибка при вызове метода контекста (Выполнить): Произошла исключительная ситуация (1С:Предприятие): С  <<?>> НачалоГода по КонецПериодаОсмотра;
Запрос[2] : Ошибка в выражении 'НачалоГода'

Код такой:


ЖрнЗарплата = База77.CreateObject("ЖурналРасчетов.Зарплата");
    
    ПервыйМесяц = 1;
    ПоследнийМесяц = Месяц;
    НачалоГода = СтрЗаменить(Формат(ЖрнЗарплата.НачалоПериодаПоДате(НачалоГода(ДатаАктуальности)+15*(60*60*24)), "ДФ=yyyy-MM-dd"), "-", "");
    КонецПериодаОсмотра = СтрЗаменить(Формат(ДатаАктуальности, "ДФ=yyyy-MM-dd"), "-", "");
    Январь=СтрЗаменить(Строка(Год*100+1),Символы.НПП,"");
    Декабрь=СтрЗаменить(Строка(Год*100 + Месяц),Символы.НПП,"");
    
    // запрос к ж.р. по страховым взносам - собираем суммы уже начисленных страховых взносов
    Состояние("Подготовка данных по суммам уже начисленных страховых взносов");
    ЗапросПоВзносам=База77.CreateObject("Запрос");
    
    ТекстЗапроса="//{{ЗАПРОС(ЗапросПоВзносам)
    |С НачалоГода по КонецПериодаОсмотра;
    |Объект = ЖурналРасчетов.СтраховыеВзносы.Объект;
    |ВР = ЖурналРасчетов.СтраховыеВзносы.ВидРасч;
    |Результат = ЖурналРасчетов.СтраховыеВзносы.Результат;
    |Регистрация = ЖурналРасчетов.СтраховыеВзносы.ДатаОкончания;
    |Функция РезультатВР = Сумма(Результат);
    |Группировка Объект Без Групп Без Упорядочивания;
    |Группировка Регистрация;
    |Группировка ВР;";
    Если ВсегоСотров = 0 Тогда
    ИначеЕсли ВсегоСотров = 1 Тогда
        СотрудникВЗапрос = Сотрудники.ПолучитьЗначение(1);
        ТекстЗапроса=ТекстЗапроса+"
        |Условие(Объект = СотрудникВЗапрос);";
    Иначе
        ТекстЗапроса=ТекстЗапроса+"
        |Условие(Объект в Сотрудники);";
    КонецЕсли;
    ТекстЗапроса=ТекстЗапроса+"
    |Условие(Результат <> 0);
    |"//}}ЗАПРОС
    ;
    
    Если ЗапросПоВзносам.Выполнить(ТекстЗапроса)=0 Тогда
        Возврат 0;
    КонецЕсли;



Как бы так передать даты, чтобы все отработало?
1 Масянька
 
26.06.14
12:17
НачалоГода что возвращает?
2 Рэйв
 
26.06.14
12:20
(0)Подключайся наоборот из 77 к 8. Это намного удобнее и проще.
3 bard666
 
26.06.14
12:23
(1) Дату. А именно 01.01.2010 0:00:00.
4 Масянька
 
26.06.14
12:24
(3) Уверен?
5 Михаил Козлов
 
26.06.14
12:25
При получении бухитогов сработал формат даты:
ДатаКонV7 = ФОРМАТ(тд, "ДФ=dd.MM.yy").
6 НеБорис Нуралиев
 
26.06.14
12:27
Попробуй так:

"С "+ Формат(НачалоГода,"ДФ=dd.MM.yyyy") + "по " + Формат(КонецПериодаОсмотра,"ДФ=dd.MM.yyyy") + ";"
7 bard666
 
26.06.14
12:30
(4) проверял. Потому и засунул в формат.
(5) Моя не понимать
(6) Пробовал такой формат. Такая же хрень.
8 Масянька
 
26.06.14
12:31
(7) Проверял уже в 7.7?
9 bard666
 
26.06.14
12:34
(8)
В смысле? Я из 8.2 подключаюсь к 7.7.
10 НеБорис Нуралиев
 
26.06.14
12:38
(7) Попробуй еще в одинарные кавычки ' ' даты оборачивать в запросе.

"С '"+ Формат(НачалоГода,"ДФ=dd.MM.yyyy") + "' по '" + Формат(КонецПериодаОсмотра,"ДФ=dd.MM.yyyy") + "' ;"
11 silent person
 
26.06.14
12:39
|Период с '01.01.1980' по '"+Формат(РабочаяДата,"ДФ=dd.MM.yyyy")+"';
все работает
12 Масянька
 
26.06.14
12:40
(9) Перед строкой Состояние.... добавь строку - Сообщить(Дата - " + НачалоГода); - что выведет?
13 НеБорис Нуралиев
 
26.06.14
12:43
Проблема в том, что ты пытаешься работать с запросом так, будто бы ты находишься в 7.7, а не подключаешься через ОЛЕ.

7.7 не понимает откуда брать переменные в тексте запроса, т.к. они не существуют в контексте OLE-сервера. Вместо передачи переменных нужно задавать даты явно в тексте запроса.

В принципе ты не сможешь передать в запрос 7.7 никаких переменных. Поэтому твой запрос скорее всего работать не будет даже так.
14 bard666
 
26.06.14
13:43
Спасибо. Буду пробовать
15 bard666
 
26.06.14
16:55
Теперь новая ошибка:

Ошибка при вызове метода контекста (Выполнить): Произошла исключительная ситуация (1С:Предприятие): Условие(Объект в Сотрудники <<?>> );
Запрос[11] : Ошибка в выражении 'Сотрудники'

Код такой:

Попытка
        Всего = ОбобщенныйСотрудник.РазмерСписка(); //проверяю переменную ОбобщенныйСотрудник на предмет является ли она списком значений.
        Сотрудники = ОбобщенныйСотрудник;
    Исключение
        Сотрудники=База77.CreateObject("СписокЗначений");
        Сотрудники.ДобавитьЗначение(ОбобщенныйСотрудник);
    КонецПопытки;    
    ВсегоСотров = Сотрудники.РазмерСписка();  
    
    // подготовим к сбору данных запросами: начало и окончание периодов
    // осмотра ж.р. по страховым взносам и ручных корректировок в справочнике
    ЖрнЗарплата = База77.CreateObject("ЖурналРасчетов.Зарплата");
    
    ПервыйМесяц = 1;
    ПоследнийМесяц = Месяц;
    НачалоГода = Формат(ЖрнЗарплата.НачалоПериодаПоДате(НачалоГода(ДатаАктуальности)+15*(60*60*24)), "ДФ=dd.MM.yyyy");
    КонецПериодаОсмотра = Формат(ДатаАктуальности, "ДФ=dd.MM.yyyy");
    Январь=СтрЗаменить(Строка(Год*100+1),Символы.НПП,"");
    Декабрь=СтрЗаменить(Строка(Год*100 + Месяц),Символы.НПП,"");
    
    // запрос к ж.р. по страховым взносам - собираем суммы уже начисленных страховых взносов
    Состояние("Подготовка данных по суммам уже начисленных страховых взносов");
    ЗапросПоВзносам=База77.CreateObject("Запрос");
    
    ТекстЗапроса="//{{ЗАПРОС(ЗапросПоВзносам)
    |С '" + НачалоГода + "' по '" + КонецПериодаОсмотра + "';
    |Объект = ЖурналРасчетов.СтраховыеВзносы.Объект;
    |ВР = ЖурналРасчетов.СтраховыеВзносы.ВидРасч;
    |Результат = ЖурналРасчетов.СтраховыеВзносы.Результат;
    |Регистрация = ЖурналРасчетов.СтраховыеВзносы.ДатаОкончания;
    |Функция РезультатВР = Сумма(Результат);
    |Группировка Объект Без Групп Без Упорядочивания;
    |Группировка Регистрация;
    |Группировка ВР;";
    Если ВсегоСотров = 0 Тогда
    ИначеЕсли ВсегоСотров = 1 Тогда
        СотрудникВЗапрос = Сотрудники.ПолучитьЗначение(1);
        ТекстЗапроса=ТекстЗапроса+"
        |Условие(Объект = СотрудникВЗапрос);";
    Иначе
        ТекстЗапроса=ТекстЗапроса+"
        |Условие(Объект в Сотрудники);";
    КонецЕсли;
    ТекстЗапроса=ТекстЗапроса+"
    |Условие(Результат <> 0);
    |"//}}ЗАПРОС
    ;
    
    Если ЗапросПоВзносам.Выполнить(ТекстЗапроса)=0 Тогда
        Возврат 0;
    КонецЕсли;



Как победить?
16 Serginio1
 
26.06.14
17:58
17 bard666
 
27.06.14
10:22
(16) Не помогло. Есть ещё варианты?
18 Serginio1
 
27.06.14
10:51
(17) Ты неправильно читал.v8: ИспользоватьСубконто() в СОМ-объекте

Делай через внешнюю обработку. Первоначально отладив её в 7.7. А затем ужу используй ком и вызов формы передавая например список значений во втором параметре.
19 Serginio1
 
27.06.14
10:53
А ОбобщенныйСотрудник откуда берется?
20 Михаил Козлов
 
27.06.14
11:02
(15) Можно попробовать получить данные без фильтра и отфильтровать уже потом.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший