Имя: Пароль:
1C
1С v8
Как при подключении по com соединению передать в запрос дату
,
0 alex44ru
 
14.12.17
15:13
Доброго времени сутрок.
Есть код:

    ЗапросСОМ = БазаСОМ.newObject("Запрос");
    ЗапросСОМ.Текст = "ВЫБРАТЬ
    |    ХозрасчетныйОстатки.Субконто3.Код КАК Склад,
    |    ХозрасчетныйОстатки.Субконто2.Код КАК ВидТоплива,
    |    ХозрасчетныйОстатки.КоличествоОстаток КАК КоличествоОстаток
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОтчета, Счет=&Счет, , ) КАК ХозрасчетныйОстатки";
    Счет_004_01_5 = БазаСОМ.ПланыСчетов.Хозрасчетный.НайтиПоКоду("004.01.5");
    ЗапросСОМ.УстановитьПараметр("Счет", Счет_004_01_5);
    ЗапросСОМ.УстановитьПараметр("ДатаОтчета", ТекущаяДата());
    РезультатПоСОМ = ЗапросСОМ.Выполнить();

При выполнении выдает ошибку:
===================================
Ошибка исполнения отчета
по причине:
Ошибка при выполнении обработчика - 'ПриКомпоновкеРезультата'
по причине:
{Отчет.ОтчетПоОстаткамВБазеСОМ.МодульОбъекта(28)}: Ошибка при вызове метода контекста (Выполнить)
    РезультатПоСОМ = ЗапросСОМ.Выполнить();
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.3.10.2505): {(6, 2)}: Ошибка обработки представления "РегистрБухгалтерии.Хозрасчетный.Остатки:Несоответствие типов (Параметр номер ""1"")"
<<?>>РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОтчета, Счет=&Счет, , ) КАК ХозрасчетныйОстатки
===================================

куда копать?
1 Denshu
 
14.12.17
15:28
А в консоли запрос работает?
2 lodger
 
14.12.17
15:32
ЗапросСОМ.УстановитьПараметр("ДатаОтчета", БазаСОМ.Дата(ТекущаяДата()));
или что-то в этом духе.
или просто БазаСОМ.ТекущаяДата()...
3 alex44ru
 
14.12.17
15:34
(1) как в консоли можно запустить запрос через COM соединение
если запрос выполнять не через COM то конечно же он работает, проблема именно в передаче даты через COM

Можно конечно использовать костыль:
=================
БазаСОМ.ЗначениеИзСтрокиВнутр("{""D"",20081231235959}")
=================
для получения даты, но блин дата простой тип должна передаваться без танцев с бубнами
4 alex44ru
 
14.12.17
15:35
(2) БазаСОМ.Дата(ТекущаяДата()) {(1)}: Метод объекта не обнаружен (Дата)    

пробовал )))
5 Denshu
 
14.12.17
15:38
(3) ну дак отркрой в бухне консоль, запили туда этот запрос, поставь ручками параметры которые у тебя программно задаются, проверь работает ли, если работает значит програмно ты ставишь не те параметры которые руками
6 X Leshiy
 
14.12.17
15:42
Дата примитивный тип, должна без проблем.

Попробуй сперва ТекДата  = ТекущаяДата();
А потом передай в запрос

ЗапросСОМ.УстановитьПараметр("ДатаОтчета", ТекДата);
7 alex44ru
 
14.12.17
15:43
(5) Отвечу проще, если я делаю так:

=================
ЗапросСОМ.УстановитьПараметр("ДатаОтчета", БазаСОМ.ЗначениеИзСтрокиВнутр("{""D"",20171201235959}"));
=================

то все работает, проблема именно в передаче типа Дата через запрос
8 X Leshiy
 
14.12.17
15:47
У тебя выполняется команда глобального контекста при установки параметра запроса контекста COM соединения.
9 X Leshiy
 
14.12.17
15:47
Короч, сперва в переменную пихай :)
10 Сти
 
14.12.17
15:49
Странно, у меня прекрасно передавалась дата в такой ситуации. Правда в итоге поменял ее на границу, но по другой причине.

Вот прям сейчас проверил - и дата норм передается и работают все три варианта:
//Запрос.УстановитьПараметр("НаДату", НаДату);
//Запрос.УстановитьПараметр("НаДату", ТекущаяДата());
//Запрос.УстановитьПараметр("НаДату", ВнешняяБаза.newObject("Граница", КонецДня(НаДату), ВнешняяБаза.ВидГраницы.Включая));

Версия платформы какая, может быть в ней какой косяк?
11 alex44ru
 
14.12.17
15:49
(6) как это не парадоксально, но это сработало )))

вначале попробовал как Вы написали и все сработало:

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

потом адаптировал под свой код
поменял код:

ДатаОтчета = НастройкиКомпоновки.ПараметрыДанных.Элементы[0].Значение;
ЗапросСОМ.УстановитьПараметр("ДатаОтчета", ДатаОтчета);

на код:

ДатаОтчета = НастройкиКомпоновки.ПараметрыДанных.Элементы[0].Значение;
ДатаОтчета = Дата(ДатаОтчета);
ЗапросСОМ.УстановитьПараметр("ДатаОтчета", ДатаОтчета);

и все заработало, что за муть
12 alex44ru
 
14.12.17
15:50
(10) я тоже кстати на глюк платформы думаю, но сервак стоит и лень обновлять пока
13 X Leshiy
 
14.12.17
15:51
(11) Граждане, не жалейте переменных, берегите нервы! (с)
14 alex44ru
 
14.12.17
15:53
(13) да уж, это точно
15 Сти
 
14.12.17
15:54
16 alex44ru
 
14.12.17
15:56
(15) у меня 8.3.10.2505 похоже этот глюк гуляет по версиям платформы
17 X Leshiy
 
14.12.17
15:58
(14) Пр работе с СОМ лучше сто раз проверить и привести к нужному типу. Нежный и ранимый он, наш СОМ :)
18 alex44ru
 
14.12.17
16:06
Всем ОГРОМНОЕ спасибо от меня лично и от нашего бухгалтера )))
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс