Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Не работает запрос к оборотному регистру в базе dbf.... (число прочтений - 3270 )
seakuban
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 09. Сентября 2015
Не работает запрос к оборотному регистру в базе dbf....
09. Сентября 2015 :: 09:32
Печать  
ТекстЗапроса = "
|SELECT
|Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],
|Рег.КоличествоОборот as Количество
|FROM
|$РегистрОбороты.Продажи(:НачДата,:КонДата, Период,,, (Номенклатура),(Количество)) as Рег";

Выходит ошибка: FAILED! ICommandText::Execute(): Syntax error.

Документацию читал... вроде все правильно делаю. Коллеги что я все таки делаю не так.
Версия 1С++ 2.5.0.8. Установлен драйвер фокспро 9 версии.
  

---www.legion-service.org - продажа, внедрение и сопровождение программ 1С. С Уважением к вашей работе.
Наверх
www  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Не работает запрос к оборотному регистру в базе dbf....
Ответ #1 - 09. Сентября 2015 :: 15:51
Печать  
В DBF нет виртуальных регистров (это те, которые $РегистрОбороты или Остатки)
Так что читать это: http://www.1cpp.ru/docum/1cpp.chm.zip
раздел: Учебник - Эффективное использование MSSQL в 1С при помощи ВК 1С++ - Виртуальные таблицы
Например:
Цитата:
Аналогично работает ВТ Обороты, только поля называются <ИмяИзмерения>Оборот

Для ДБФ версии придется немного потрудится.
Сначала сделаем простой запрос с группировкой день
  
Наверх
ICQ  
IP записан
 
seakuban
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 09. Сентября 2015
Re: Не работает запрос к оборотному регистру в базе dbf....
Ответ #2 - 10. Сентября 2015 :: 11:09
Печать  
Спасибо. Теперь у меня получился такой работающий запрос:
     ТекстЗапроса = "
           |SELECT
           |      Рег.Фирма as [Фирма $Справочник.Фирмы],
           |      SUM(Рег.ПродСтоимость) - SUM(Рег.Себестоимость) - SUM(Рег.ПродСтоимостьВ) + SUM(Рег.СебестоимостьВ) as Маржа
           |FROM
           |      (SELECT
           |            $Р.Фирма as Фирма,
           |            $Р.Себестоимость as Себестоимость,
           |            $Р.ПродСтоимость as ПродСтоимость,
           |            $Р.СебестоимостьВ as СебестоимостьВ,
           |            $Р.ПродСтоимостьВ as ПродСтоимостьВ,
           |            jr.date as Период
           |      FROM $Регистр.Продажи as Р
           |      INNER JOIN
           |            1sjourn jr ON (Р.iddoc = jr.iddoc)
           |                        And (jr.date BETWEEN :НачДата~~ AND :КонДата~~) AND jr.IDDocDef = $ВидДокумента.РеализацияРозница
           |      WHERE
           |            ($ФлагРегистра.Продажи = 1)
           |      ) as Рег
           |GROUP BY
           |      Рег.Фирма";
Но мне еще необходимо добавить в запрос условие AND jr.iddoc IN (SELECT Val FROM :ВременнаяТаблица). Как заполнить и передать список объектов типа Документ в таблицу ВременнаяТаблица? Метод УложитьСписокОбъектов не работает
  

---www.legion-service.org - продажа, внедрение и сопровождение программ 1С. С Уважением к вашей работе.
Наверх
www  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Не работает запрос к оборотному регистру в базе dbf....
Ответ #3 - 10. Сентября 2015 :: 17:53
Печать  
Почему не работает? Вроде в документации в Разделе: OLEDBCommand :: УложитьСписокОбъектов есть:
Цитата:
Синтаксис: УложитьСписокОбъектов(Объект, ИмяТабл, ВидСпр)

Параметры:
Объект - тип: Справочник/Документ/СписокЗначений (содержащий элементы типа Справочник, Документ). Объект, который необходимо уложить во временную таблицу.
ИмяТабл - тип: Строка. Возвращаемое значение. Имя временной таблицы, которое будет сгенерировано методом и возвращено через этот параметр.
ВидСпр - тип: Строка. Вид справочника для иерархического включения элементов.
Описание: сохраняет Объект (или список объектов, если передан список значений) во временную таблицу. Имя временной таблицы генерируется методом и возвращается через второй параметр (именем является GUID). Временная таблица имеет поле VAL CHAR(9) и служебное поле ISFOLDER NUMERIC(1,0).

Если указан параметр ВидСпр (вид многоуровневого справочника), то таблица будет содержать элементы (без групп), иерархически принадлежащие группам (Подобно оператору "в" встроенного языка запросов 1С).

Уничтожать временные таблицы явным образом не обязательно ( прим: DROP TABLE MyTmpTbl ) - все временные таблицы будут уничтожены в момент закрытия команды ( Закрыть() ) или при уничтожении объекта OLEDBCommand.

Пример:

ВрТабл = "";
cmd.УложитьСписокОбъектов(ТекГруппа, ВрТабл, "Номенклатура");
Сообщить("Что тут: " + ВрТабл); // Например, "Что тут: 858573b1-5a6f-459e-9c75-ec63e2a1d858"

  
Наверх
ICQ  
IP записан
 
seakuban
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 09. Сентября 2015
Re: Не работает запрос к оборотному регистру в базе dbf....
Ответ #4 - 10. Сентября 2015 :: 18:24
Печать  
Salimbek писал(а) 10. Сентября 2015 :: 17:53:
Почему не работает? Вроде в документации в Разделе: OLEDBCommand :: УложитьСписокОбъектов есть:
Цитата:
Синтаксис: УложитьСписокОбъектов(Объект, ИмяТабл, ВидСпр)

Параметры:
Объект - тип: Справочник/Документ/СписокЗначений (содержащий элементы типа Справочник, Документ). Объект, который необходимо уложить во временную таблицу.
ИмяТабл - тип: Строка. Возвращаемое значение. Имя временной таблицы, которое будет сгенерировано методом и возвращено через этот параметр.
ВидСпр - тип: Строка. Вид справочника для иерархического включения элементов.
Описание: сохраняет Объект (или список объектов, если передан список значений) во временную таблицу. Имя временной таблицы генерируется методом и возвращается через второй параметр (именем является GUID). Временная таблица имеет поле VAL CHAR(9) и служебное поле ISFOLDER NUMERIC(1,0).

Если указан параметр ВидСпр (вид многоуровневого справочника), то таблица будет содержать элементы (без групп), иерархически принадлежащие группам (Подобно оператору "в" встроенного языка запросов 1С).

Уничтожать временные таблицы явным образом не обязательно ( прим: DROP TABLE MyTmpTbl ) - все временные таблицы будут уничтожены в момент закрытия команды ( Закрыть() ) или при уничтожении объекта OLEDBCommand.

Пример:

ВрТабл = "";
cmd.УложитьСписокОбъектов(ТекГруппа, ВрТабл, "Номенклатура");
Сообщить("Что тут: " + ВрТабл); // Например, "Что тут: 858573b1-5a6f-459e-9c75-ec63e2a1d858"


Конкретно не работает конструкция cmd.УложитьСписокОбъектов(СписокДоков, ВрТабл, "Документ.РеализацияРозница");
конструкция cmd.УложитьСписокОбъектов(СписокДоков, ВрТабл, "РеализацияРозница"); тоже не работает. В обоих случаях ругается на неверность третьего параметра
  

---www.legion-service.org - продажа, внедрение и сопровождение программ 1С. С Уважением к вашей работе.
Наверх
www  
IP записан
 
seakuban
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 09. Сентября 2015
Re: Не работает запрос к оборотному регистру в базе dbf....
Ответ #5 - 10. Сентября 2015 :: 18:33
Печать  
Третий параметр в УложитьСписокОбъектов ВидСпр - вид справочника..... А мне нужно уложить список объектов типа документ. Есть ли конструкция аналогичная УложитьСписокОбъектов для dbf? (и чтобы укладывала объекты типа документ)
  

---www.legion-service.org - продажа, внедрение и сопровождение программ 1С. С Уважением к вашей работе.
Наверх
www  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Не работает запрос к оборотному регистру в базе dbf....
Ответ #6 - 11. Сентября 2015 :: 18:52
Печать  
seakuban писал(а) 10. Сентября 2015 :: 18:33:
Третий параметр в УложитьСписокОбъектов ВидСпр - вид справочника..... А мне нужно уложить список объектов типа документ. Есть ли конструкция аналогичная УложитьСписокОбъектов для dbf? (и чтобы укладывала объекты типа документ)

Не указывай третий параметр и все у тебя получится. Смысл его в том, что если укажешь, то группы этого справочника развернутся до элементов, что позволяет строить отчет по группе. Для документов такой задачи нет.
  
Наверх
ICQ  
IP записан
 
seakuban
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 09. Сентября 2015
Re: Не работает запрос к оборотному регистру в базе dbf....
Ответ #7 - 12. Сентября 2015 :: 10:08
Печать  
Блин, то ли я тупой, то ли лыжи не едут. Не работает!
Текст кода:
ИмяТаблицы="#Группа";
           RS_DBF.УложитьСписокОбъектов(СписокДоков,ИмяТаблицы);
           
           
           ТекстЗапроса = "
           |SELECT
           |      Рег.Фирма as [Фирма $Справочник.Фирмы],
           |      SUM(Рег.ПродСтоимость) - SUM(Рег.Себестоимость) - SUM(Рег.ПродСтоимостьВ) + SUM(Рег.СебестоимостьВ) as Маржа
           |FROM
           |      (SELECT
           |            $Р.Фирма as Фирма,
           |            $Р.Себестоимость as Себестоимость,
           |            $Р.ПродСтоимость as ПродСтоимость,
           |            $Р.СебестоимостьВ as СебестоимостьВ,
           |            $Р.ПродСтоимостьВ as ПродСтоимостьВ,
           |            jr.date as Период
           |      FROM $Регистр.Продажи as Р
           |      INNER JOIN
           |            1sjourn jr ON (Р.iddoc = jr.iddoc)
           |                        And (jr.date BETWEEN :НачДата~~ AND :КонДата~~) AND jr.IDDocDef = $ВидДокумента.РеализацияРозница
           |                                    AND jr.iddoc IN (SELECT Val FROM " +ИмяТаблицы+")
           |      WHERE
           |            ($ФлагРегистра.Продажи = 1)
           |      ) as Рег
           |GROUP BY
           |      Рег.Фирма";
           
           
         RS_DBF.УстановитьТекстовыйПараметр("НачДата", НачДата);
           RS_DBF.УстановитьТекстовыйПараметр("КонДата", КонДата);      
                       
           ТЗ = RS_DBF.ВыполнитьИнструкцию(ТекстЗапроса);
           ТЗ.ВыбратьСтроку();
Выдает ошибку: FAILED! ICommandText::Execute(): SQL: Queries of this type are not supported.
  

---www.legion-service.org - продажа, внедрение и сопровождение программ 1С. С Уважением к вашей работе.
Наверх
www  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Не работает запрос к оборотному регистру в базе dbf....
Ответ #8 - 13. Сентября 2015 :: 09:27
Печать  
Что-то я не припомню в DBF временных таблиц..., хотя я с DBF давно не работал.
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Не работает запрос к оборотному регистру в базе dbf....
Ответ #9 - 13. Сентября 2015 :: 19:34
Печать  
seakuban писал(а) 12. Сентября 2015 :: 10:08:
Блин, то ли я тупой, то ли лыжи не едут. Не работает!
...
Выдает ошибку: FAILED! ICommandText::Execute(): SQL: Queries of this type are not supported.

Забил ошибку в поиск, нашел на этом форуме подходящее: http://www.1cpp.ru/forum/YaBB.pl?num=1170397063
Доку на метод УложитьСписокОбъектов() я выше процитировал. Выделю оттуда главное:
Цитата:
ИмяТабл - тип: Строка. Возвращаемое значение. Имя временной таблицы, которое будет сгенерировано методом и возвращено через этот параметр.
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Не работает запрос к оборотному регистру в базе dbf....
Ответ #10 - 14. Сентября 2015 :: 05:03
Печать  
Код
Выбрать все
//     RS_DBF.УложитьСписокОбъектов(СписокДоков,ИмяТаблицы);
........
//     |						AND jr.iddoc IN (SELECT Val FROM "
+ИмяТаблицы+")


|						AND jr.iddoc IN (SELECT Val FROM :СписокДоков)

врСписок="";
Запрос.УложитьСписокОбъектов(СписокДоков, врСписок);
Запрос.УстановитьТекстовыйПараметр("СписокДоков", врСписок); 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать