Вход | Регистрация

1С:Предприятие ::

Метки: 

Как при подключении по com соединению передать в запрос дату

Я
   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"")"
<<?>>РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОтчета, Счет=&Счет, , ) КАК ХозрасчетныйОстатки
===================================

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

Можно конечно использовать костыль:
=================
БазаСОМ.ЗначениеИзСтрокиВнутр("{""D"",20081231235959}")
=================
для получения даты, но блин дата простой тип должна передаваться без танцев с бубнами
   alex44ru
 
4 - 14.12.17 - 15:35
(2) БазаСОМ.Дата(ТекущаяДата()) {(1)}: Метод объекта не обнаружен (Дата)    
пробовал )))
   Denshu
 
5 - 14.12.17 - 15:38
(3) ну дак отркрой в бухне консоль, запили туда этот запрос, поставь ручками параметры которые у тебя программно задаются, проверь работает ли, если работает значит програмно ты ставишь не те параметры которые руками
   X Leshiy
 
6 - 14.12.17 - 15:42
Дата примитивный тип, должна без проблем.
Попробуй сперва ТекДата  = ТекущаяДата();
А потом передай в запрос

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

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

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

Вот прям сейчас проверил - и дата норм передается и работают все три варианта:
//Запрос.УстановитьПараметр("НаДату", НаДату);

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


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

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

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

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

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

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

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


Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует