Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Ошибка преобразования позиции док-та в запросе (число прочтений - 5937 )
SMAch
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 22
Зарегистрирован: 20. Марта 2007
Ошибка преобразования позиции док-та в запросе
26. Марта 2007 :: 13:13
Печать  
Имеется следующий запрос:

ТекстЗапроса = "
|SELECT
|      ПартииВсего.Номенклатура            as [Номенклатура $Справочник.Номенклатура],
|      ПартииВсего.Партия            as [Партия $Документ],
|      ПартииВсего.СерияНоменклатуры      as [СерияНоменклатуры $Справочник.СерииНоменклатуры],
|      ПартииВсего.Склад                              as [Склад $Справочник.Склады],
|      ПартииВсего.КоличествоОстаток            as Количество,
|      ПартииВсего.СуммаОстаток                  as Сумма,
|      ПартииВсего.СуммаСНДСОстаток            as СуммаСНДС
|
|FROM
|      $РегистрОстатки.ПартииТМЦ(
//ПЕРИОД
|                        :Позиция" +?(НаИлиПо=0,"","~") +","
//СОЕДИНЕНИЕ   
|                        ","
//УСЛОВИЯ
|                        +ТекстУсловия+
//ИЗМЕРЕНИЯ
|                        ",(Номенклатура,Партия,СерияНоменклатуры,Склад),
//РЕСУРСЫ
|                        (Количество,Сумма,СуммаСНДС)) as ПартииВсего";


та,1));

_______________________________________________________________________________

Проблема состоит в следующем: если в качестве "ТочкаРасчета" передавать документ, то появляется следующая ошибка:
Ошибка выполнения запроса РегистрПартии: State 22007, native 241, message [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting datetime from character string.

Участок реального sql-запроса по преобразованию позиции документа:
where ra281_vt.date_time_iddoc > '00000000' and ra281_vt.date_time_iddoc < '#20070315 433000000    307036   '

Пожалуйста, помогите разобраться.
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Ошибка преобразования позиции док-та в запросе
Ответ #1 - 26. Марта 2007 :: 13:55
Печать  
Не нужно ~ ставить при передаче позиции.
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибка преобразования позиции док-та в запросе
Ответ #2 - 26. Марта 2007 :: 14:13
Печать  
Какраз таки нужно ставить модификатор, иначе откуда парсер узнает, что это не просто строка, а позиция документа и ее нужно преобразовать.
  
Наверх
ICQ  
IP записан
 
U_zer
Экс-Участник


Re: Ошибка преобразования позиции док-та в запросе
Ответ #3 - 28. Марта 2007 :: 14:17
Печать  
Странно, все время делаю:

ьПозициюДокумента(ТекущийДокумент())));

А в запросе -  :ДатаН и все нормально. Если же  :ДатаН~ то вылазит вышеописанная ошибка.
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибка преобразования позиции док-та в запросе
Ответ #4 - 28. Марта 2007 :: 14:33
Печать  
А если доку почитать, то окажется что всегда можно было делать вот так:
Запрос.УстановитьТекстовыйПараметр("ДатаН", СформироватьПозициюДокумента( ТекущийДокумент()));
при этом в запросе писать вот так:
:ДатаН~
  
Наверх
ICQ  
IP записан
 
U_zer
Экс-Участник


Re: Ошибка преобразования позиции док-та в запросе
Ответ #5 - 28. Марта 2007 :: 14:39
Печать  
Тогда вылазит ошибка - Недопустимый формат даты.
  
Наверх
 
IP записан
 
SMAch
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 22
Зарегистрирован: 20. Марта 2007
Re: Ошибка преобразования позиции док-та в запросе
Ответ #6 - 29. Марта 2007 :: 06:02
Печать  
Цитата:
Странно, все время делаю:

ьПозициюДокумента(ТекущийДокумент())));

А в запросе -  :ДатаН и все нормально. Если же  :ДатаН~ то вылазит вышеописанная ошибка.


Согласен с тобой, U_zer, в даной ситуации помогает только ПолучитьДатуВремяИдДок
а доки, по моему мнению, требуют некоторой доработки

Кстати эту же тему обсуждали и здесь: http://www.1cpp.ru/forum/YaBB.pl?num=1174979532
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Ошибка преобразования позиции док-та в запросе
Ответ #7 - 29. Марта 2007 :: 07:01
Печать  
Да и с DO я эту тему в аське мусолил, тоже пришли к выводу, что нужно без ~, поэтому я и удивился, что теперь концепция якобы поменялась.
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибка преобразования позиции док-та в запросе
Ответ #8 - 29. Марта 2007 :: 09:27
Печать  
Цитата:
Тогда вылазит ошибка - Недопустимый формат даты.

Проверил, нет такой ошибки, все работает нормально. Версия 2.0.2.0 или более ранняя.

Цитата:
Да и с DO я эту тему в аське мусолил, тоже пришли к выводу, что нужно без ~, поэтому я и удивился, что теперь концепция якобы поменялась.

Непомню разговора на эту тему. Я не мог такого сказать, по крайней мере мной ни чего в этом вопросе никогда не менялось все было сделано так изначально.
  
Наверх
ICQ  
IP записан
 
U_zer
Экс-Участник


Re: Ошибка преобразования позиции док-та в запросе
Ответ #9 - 29. Марта 2007 :: 09:55
Печать  
Было - было. Давно правда ..

Наверное проблема в collation name базы.
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибка преобразования позиции док-та в запросе
Ответ #10 - 29. Марта 2007 :: 10:21
Печать  
Еще раз.
Цитата:
Тогда вылазит ошибка - Недопустимый формат даты.

Где вылазит? Кто это говорит (парсер, ODBC драйвер, сервер), кто? И оригинальное сообщение об ошибке не мешало бы увидеть.
  
Наверх
ICQ  
IP записан
 
SMAch
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 22
Зарегистрирован: 20. Марта 2007
Re: Ошибка преобразования позиции док-та в запросе
Ответ #11 - 29. Марта 2007 :: 10:55
Печать  
DmitrO писал(а) 29. Марта 2007 :: 10:21:
Еще раз.
Цитата:
Тогда вылазит ошибка - Недопустимый формат даты.

Где вылазит? Кто это говорит (парсер, ODBC драйвер, сервер), кто? И оригинальное сообщение об ошибке не мешало бы увидеть.


версия 2.0.3.3
Единственный работающий вариант это :
тьПозициюДокумента(ТочкаРасчета.ТекущийДокумент())));

А в запросе:
:Позиция

Остальные: если не использовать ПолучитьДатуВремяИдДок и/или ставить модификатор выдают ошибку:

Ошибка выполнения запроса РегистрРезервы: State 22007, native 241, message [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting datetime from character string.

так что я с "U_zer" полностью солидарен
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибка преобразования позиции док-та в запросе
Ответ #12 - 29. Марта 2007 :: 11:03
Печать  
to SMAch
а запрос покажи, не пропарсеный, а тот который передается в ODBCRecordset.
  
Наверх
ICQ  
IP записан
 
SMAch
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 22
Зарегистрирован: 20. Марта 2007
Re: Ошибка преобразования позиции док-та в запросе
Ответ #13 - 29. Марта 2007 :: 11:27
Печать  
DmitrO писал(а) 29. Марта 2007 :: 11:03:
to SMAch
а запрос покажи, не пропарсеный, а тот который передается в ODBCRecordset.


Запрос такой:

ТекстЗапроса = "
|SELECT
|      ПартииВсего.Номенклатура            as [Номенклатура $Справочник.Номенклатура],
|      ПартииВсего.Партия            as [Партия $Документ],
|      ПартииВсего.СерияНоменклатуры      as [СерияНоменклатуры $Справочник.СерииНоменклатуры],
|      ПартииВсего.Склад                              as [Склад $Справочник.Склады],
|      ПартииВсего.КоличествоОстаток            as Количество,
|      ПартииВсего.СуммаОстаток                  as Сумма,
|      ПартииВсего.СуммаСНДСОстаток            as СуммаСНДС
|
|FROM
|      $РегистрОстатки.ПартииТМЦ(
//ПЕРИОД
|                        :Позиция" +?(НаИлиПо=0,"","~") +","
//СОЕДИНЕНИЕ   
|                        ","
//УСЛОВИЯ
|                        +ТекстУсловия+
//ИЗМЕРЕНИЯ
|                        ",(Номенклатура,Партия,СерияНоменклатуры,Склад), 
//РЕСУРСЫ
|                        (Количество,Сумма,СуммаСНДС)) as ПартииВсего";



тьПозициюДокумента(ТочкаРасчета.ТекущийДокумент())));

____________________
Если НаИлиПо =0 то все нормально, а вот в случае НаИлиПо =1 вылезает ранее указанная ошибка
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибка преобразования позиции док-та в запросе
Ответ #14 - 29. Марта 2007 :: 12:24
Печать  
А почему ты решил, что с помощью модификатора можно управлять границей расчета (включается/исключается)? Это не так. Для такого управления границей расчета необходимо получать специальные значения позиции документа методом СформироватьПозициюДокумента(), передавая первым параметром документ, а вторым флаг смещения.

Модификатор служит для преобразования значения 1С в литерал языка SQL. Для разных типов 1С строго определены разные модификаторы.
Позиция документа в 1С представлена значением типа Строка, для типа Строка определен модификатор с номером 1. Который преобразует строковое значение позиции документа 1С в строковый литерал языка SQL со значением позиции в формате базы данных.

По твоему запросу:
Когда НаИлиПо =1 модификатора в тексте запроса нет, и парсер не делает преобразование значения позиции в формат БД. Считается что это просто строка, и она подставляется в запрос в виде строкового литерала с тем же значением без какого-либо изменения. Парсеру ведь никто не сказал что это не просто строка а именно позиция документа.
В этом случае парсер не может сформировать правильный запрос.

В первую очередь надо Документацию читать, блин, а не форумы да статейки!
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать