Переключение на Главную Страницу Страницы: 1 ... 46 47 [48] 49 50 51 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" - обсуждения. Часть № 2. (число прочтений - 244652 )
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #705 - 12. Октября 2015 :: 15:59
Печать  
rom35 писал(а) 12. Октября 2015 :: 10:36:
база sql.
попробовал - ругается: State 22018, native 245, message [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ' 2B0 1CI82   ' to a column of data type int.
если сделать чтото типа такого
Код
Выбрать все
ЖурналДокументов КАК Жур $nolock ПО (str($СсылкиДок.Д) = $Жур.ВидДокумента+$Жур.ТекущийДокумент) 


то отругивается: Error converting data type varchar to float.


Ну если SQL то тогда так, если видов много в СсылкиДок.Д, проверь если у тебя там точно 13 иначе справа 9 нужно.
Код
Выбрать все
ЖурналДокументов КАК Жур $nolock ПО СРЕД($СсылкиДок.Д,5,9) = $Жур.ТекущийДокумент 


если честно не очень понимаю зачем именно этим классом пользоваться для SQL Подмигивание

А в ВЫБРАТЬ
Код
Выбрать все
$Жур.ТекущийДокумент КАК [Дока $Документ],
$Жур.ВидДокумента КАК Дока_вид
 

  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #706 - 12. Октября 2015 :: 19:04
Печать  
rom35 писал(а) 12. Октября 2015 :: 10:36:
база sql.
попробовал - ругается: State 22018, native 245, message [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ' 2B0 1CI82   ' to a column of data type int.
если сделать чтото типа такого
Код
Выбрать все
ЖурналДокументов КАК Жур $nolock ПО (str($СсылкиДок.Д) = $Жур.ВидДокумента+$Жур.ТекущийДокумент) 


то отругивается: Error converting data type varchar to float.


Правильно ругается. Соединение/сложение/контактация строк не через +, а через ||
Т.е. не $Жур.ВидДокумента+$Жур.ТекущийДокумент, а $Жур.ВидДокумента || $Жур.ТекущийДокумент
  
Наверх
www  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #707 - 13. Октября 2015 :: 06:02
Печать  
Djelf писал(а) 12. Октября 2015 :: 19:04:
rom35 писал(а) 12. Октября 2015 :: 10:36:
база sql.
попробовал - ругается: State 22018, native 245, message [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ' 2B0 1CI82   ' to a column of data type int.

Правильно ругается. Соединение/сложение/контактация строк не через +, а через ||
Т.е. не $Жур.ВидДокумента+$Жур.ТекущийДокумент, а $Жур.ВидДокумента || $Жур.ТекущийДокумент

1. Особо выделил, какая у него база
2. В SQL базе поле IDDOCDEF - тип INT, поэтому и не складывает строки и ругается на невозможность сконвертировать (и правильно делает)
3. В классе "Прямой запрос" есть специальный метод: СоздатьФункциюIdToStr, после которого в базе появится SQL-функция
Цитата:
Описание: осуществляет создание функции «IDToStr». Функция преобразует 10-тичное число в 36-ричную строку.

4. После вызова этого метода можно будет написать
Код
Выбрать все
ЖурналДокументов КАК Жур $nolock ПО ($СсылкиДок.Д = IDToStr($Жур.ВидДокумента)+$Жур.ТекущийДокумент) 


  
Наверх
ICQ  
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #708 - 16. Октября 2015 :: 08:22
Печать  
Djelf писал(а) 12. Октября 2015 :: 19:04:
Правильно ругается. Соединение/сложение/контактация строк не через +, а через ||
Т.е. не $Жур.ВидДокумента+$Жур.ТекущийДокумент, а $Жур.ВидДокумента || $Жур.ТекущийДокумент


невыходит:  Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ' 2B0 1CI82   ' to a column of data type int.


  
Наверх
 
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #709 - 16. Октября 2015 :: 09:09
Печать  
Salimbek писал(а) 13. Октября 2015 :: 06:02:
4. После вызова этого метода можно будет написать
Код
Выбрать все
ЖурналДокументов КАК Жур $nolock ПО ($СсылкиДок.Д = IDToStr($Жур.ВидДокумента)+$Жур.ТекущийДокумент) 




добавил в запрос:
Запрос.СоздатьФункциюIdToStr(0,0);
както всеодно не помогает:
отругивается [ODBC SQL Server Driver][SQL Server]'IDToStr' is not a recognized function name.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #710 - 19. Октября 2015 :: 07:45
Печать  
У меня уже нет ни 7-ки, ни Прямой запрос я не использовал, так что все чисто из документации. Но могу посоветовать - посмотреть через Enterprise manager или Management studio проверить - есть ли такая функция в SQL-базе. Если есть, то проверить - как она вызывается, потом потестить разные варианты запросов и таким образом полностью разобраться в ситуации.
И я бы вызывал через: Запрос.СоздатьФункциюIdToStr(1,0); иначе как-то странно.
  
Наверх
ICQ  
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #711 - 20. Октября 2015 :: 09:58
Печать  
Всем откликнувшимся спасибо. но интузиазм пропал, както всеже но работает. вопрос закрыт.
  
Наверх
 
IP записан
 
Zhenya
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 18. Октября 2010
Пол: Женский
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #712 - 22. Октября 2015 :: 17:01
Печать  
Здравствуйте
Вопрос к создателю класса:
У вас есть такой же класс в ПоставщикДанных.ПрямойЗапрос - но не смотря на то что файлы сохранены в одну дату и имеют одну и в конструкторе Версия =  "1.8.6 22.05.2013" - они все же немного отличаются.

Так какой из них более правильный?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #713 - 27. Октября 2015 :: 07:05
Печать  
Zhenya, насколько я помню, действительно есть незначительные отличия, но они в основном связаны с работой поставщика. По-моему проще сравнение текстов сделать и понять в чем суть.
На память, я всегда вносил изменения, но уже не помню точно причины )))) давно было
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Zhenya
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 18. Октября 2010
Пол: Женский
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #714 - 27. Октября 2015 :: 14:43
Печать  
vandalsvq
Спасибо что ответили Улыбка
Тогда еще вопрос:
Пытаюсь объединить два запроса по разным видам документов.
Каждый запрос в отдельности - работает, но стоит только объединить из через "ОБЪЕДИНИТЬ" - вываливается ошибка "Неверное значение ключа!"

Но могу понять что я делаю не так


     Если флБрак = 1 Тогда
           
           //{ПоступленияБрака
           ТекстЗапроса = ТекстЗапроса + ?(ПустоеЗначение(ТекстЗапроса) = 1, "", "
           |ОБЪЕДИНИТЬ
           |") + "
           |ВЫБРАТЬ
           |      $Журнал.ТекущийДокумент КАК [Документ $Документ],
           |      $Журнал.ВидДокумента КАК Документ_вид,
           |      $Журнал.Фирма КАК [Фирма $Справочник.Фирмы],
           |      $Документ.МестоХранения КАК [Склад $Справочник.МестаХранения],
           |      $Документ.Контрагент КАК [Плательщик $Справочник.Контрагенты],
           |      $ДокументСтроки.Товар КАК [Товар $Справочник.Номенклатура],
           |      IFNULL($ПартияГТД.ГТД, :ПустойИД) КАК [ГТД $Справочник.ГТД],
           |      СУММА($ДокументСтроки.Количество) КАК [БракКоличество $Число.10.0],
           |      СУММА(ВЫБОР КОГДА $Документ.ВалютаДокумента = :ПустойИД ИЛИ $Документ.ВалютаДокумента = :ОсновнаяВалюта
           |                        ТОГДА $ДокументСтроки.Всего
           |                        ИНАЧЕ $ДокументСтроки.Всего * $Документ.Курс
           |              КОНЕЦ) КАК [БракСумма $Число.17.2],
           |      0 КАК [ПродКоличество $Число.10.0],
           |      0 КАК [ПродСумма $Число.17.2]
           |ИЗ
           |      ЖурналДокументов КАК Журнал $nolock
           |      ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеБрака КАК Документ $nolock ПО $Документ.ТекущийДокумент = $Журнал.ТекущийДокумент
           |      ЛЕВОЕ СОЕДИНЕНИЕ ДокументСтроки.ПоступлениеБрака КАК ДокументСтроки $nolock ПО $ДокументСтроки.ТекущийДокумент = $Журнал.ТекущийДокумент
           |      СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары $nolock ПО $Товары.ТекущийЭлемент = $ДокументСтроки.Товар
           |      СОЕДИНЕНИЕ Справочник.Модели КАК Модели $nolock ПО $Модели.ТекущийЭлемент = $Товары.Модель
           |      ЛЕВОЕ СОЕДИНЕНИЕ Документ.Поступление КАК ПартияГТД $nolock ПО $ДокументСтроки.ПартияГТД = $ПартияГТД.ТекущийДокумент
           |ГДЕ
           |      $Журнал.ДатаДокумента МЕЖДУ :НачДата И :КонДата~
           |      И $Журнал.Проведен = 1
           |      И $Журнал.ВидДокумента = :ВидДокумента.ПоступлениеБрака
           |      {ДополнительныеУсловия}
           |СГРУППИРОВАТЬ
           |      $ПартияГТД.ГТД,
           |      $ДокументСтроки.Товар
           |УПОРЯДОЧИТЬ
           |      $Журнал.ПозицияДокумента
           |";
           //}
     КонецЕсли;
     
     Если флОтгрузка = 1 Тогда
           //{ РасходныеНакладные
           ТекстЗапроса = ТекстЗапроса + ?(ПустоеЗначение(ТекстЗапроса) = 1, "", "
           |ОБЪЕДИНИТЬ
           |") + "
           |ВЫБРАТЬ
           |      $Журнал.ТекущийДокумент КАК [Документ $Документ],
           |      $Журнал.ВидДокумента КАК Документ_Вид,
           |      $Журнал.Фирма КАК [Фирма $Справочник.Фирмы],
           |      $Документ.МестоХранения КАК [Склад $Справочник.МестаХранения],
           |      $Документ.Контрагент КАК [Плательщик $Справочник.Контрагенты],
           |      $ДокументСтроки.Товар КАК [Товар $Справочник.Номенклатура],
           |      IFNULL($ДокументСтроки.ГТД, :ПустойИД) КАК [ГТД $Справочник.ГТД],
           |      СУММА($ДокументСтроки.Количество) КАК [ПродКоличество $Число.10.0],
           |      СУММА(ВЫБОР
           |                  КОГДА $Договоры.ОплатаДоговора = 2 ТОГДА $ДокументСтроки.Всего * $Документ.Курс
           |                  ИНАЧЕ $ДокументСтроки.Всего
           |              КОНЕЦ) КАК [ПродСумма $Число.17.2],
           |      0 КАК [БракКоличество $Число.10.0],
           |      0 КАК [БракСумма $Число.17.2]
           |ИЗ
           |      ЖурналДокументов КАК Журнал $nolock
           |      ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК Документ $nolock ПО $Документ.ТекущийДокумент = $Журнал.ТекущийДокумент
           |      ЛЕВОЕ СОЕДИНЕНИЕ ДокументСтроки.РасходнаяНакладная КАК ДокументСтроки $nolock ПО $ДокументСтроки.ТекущийДокумент = $Журнал.ТекущийДокумент
           |      СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары $nolock ПО $Товары.ТекущийЭлемент = $ДокументСтроки.Товар
           |      СОЕДИНЕНИЕ Справочник.Модели КАК Модели $nolock ПО $Модели.ТекущийЭлемент = $Товары.Модель
           |      СОЕДИНЕНИЕ Справочник.Договоры КАК Договоры $nolock ПО $Договоры.ТекущийЭлемент = $Документ.Договор
           |ГДЕ
           |      $Журнал.ДатаДокумента МЕЖДУ :НачДата И :КонДата~
           |      И $Журнал.Проведен = 1
           |      И $Журнал.ВидДокумента = :ВидДокумента.РасходнаяНакладная
           |      {ДополнительныеУсловия}
           |СГРУППИРОВАТЬ
           |      $ДокументСтроки.ГТД,
           |      $ДокументСтроки.Товар
           |УПОРЯДОЧИТЬ
           |      $Журнал.ПозицияДокумента
           |";
           //}
     КонецЕсли;


Пояснения:
Использую ПоставщикДанных.ИндексированнаяТаблица
Надо заполнить таблицу разными документами. Пока запрос простой без объекдинения - все работает, как только начинаю добавлять еще запросы по другим видам документов - вылетает на этапе заполнения табличного поля, судя по всему - на добавлении колонок:

рос ПрямойЗапрос=) : Неверное значение ключа!
КолонкиЗапроса.Добавить(ТипизацияКолонки,ИдентификаторКолонки);
  
Наверх
 
IP записан
 
Zhenya
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 18. Октября 2010
Пол: Женский
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #715 - 27. Октября 2015 :: 16:25
Печать  
Ай, сама смогла разобраться
Изменила в ПоставщикДанных.ИндексированнаяТаблица в Процедура ЗаполнитьИзОбъектаПрямойЗапрос(ПрямойЗапрос) код:
[code]
ИдентификаторКолонки = СокрЛП(Лев(ЗначениеВектора,ПозицияРазделителя - 1));
КолонкиЗапроса.Добавить(ТипизацияКолонки,ИдентификаторКолонки);
[/code]
на
[code]
ИдентификаторКолонки = СокрЛП(Лев(ЗначениеВектора,ПозицияРазделителя - 1));
Если КолонкиЗапроса.НайтиКлюч(ИдентификаторКолонки) = -1 Тогда
     ТипизацияКолонки = СокрЛП(Сред(ЗначениеВектора,ПозицияРазделителя + 1));
     КолонкиЗапроса.Добавить(ТипизацияКолонки,ИдентификаторКолонки);
КонецЕсли;
[/code]
  
Наверх
 
IP записан
 
Zhenya
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 18. Октября 2010
Пол: Женский
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #716 - 30. Октября 2015 :: 10:41
Печать  
Не могу понять в чем дело, использую класс "ПрямойЗапрос"
Делаю запрос в котором в качестве источника используется вложенный:


Код
Выбрать все
ВЫБРАТЬ
	$ЖурналРеализации.Документ КАК [Документ $Документ],
	$ЖурналРеализации.Документ_Вид КАК [Документ_Вид $ВидДокумента],
	$ЖурналРеализации.ПозицияДокумента КАК ПозицияДокумента,
	$ЖурналРеализации.Плательщик КАК [Плательщик $Справочник.Контрагенты],
	$ЖурналРеализации.Модель КАК [Модель $Справочник.Модели],
	$ЖурналРеализации.Направление КАК [Направление $Справочник.ВидыМоделей],
	$ЖурналРеализации.ГТД КАК [ГТД $Справочник.ГТД],
	$ЖурналРеализации.Всего КАК [Всего $Число],
	$ЖурналРеализации.Количество КАК [ПродКоличество $Число],
	$ЖурналРеализации.ПродСумма КАК [ПродСумма $Число],
	ВЫБОР
		КОГДА $ПоследнееЗначение.Модели.Менеджер($ЖурналРеализации.Модель, $ЖурналГТД.ДатаДокумента) = :ПустойИД ТОГДА $ПоследнееЗначение.ВидыМоделей.Менеджер($ЖурналРеализации.Направление, $ЖурналГТД.ДатаДокумента)
		ИНАЧЕ ISNULL($ПоследнееЗначение.Модели.Менеджер($ЖурналРеализации.Модель, $ЖурналГТД.ДатаДокумента), $ПоследнееЗначение.ВидыМоделей.Менеджер($ЖурналРеализации.Направление, $ЖурналГТД.ДатаДокумента))
	КОНЕЦ КАК [Менеджер $Справочник.Сотрудники]
ИЗ
	(
	ВЫБРАТЬ
		$Журнал.ТекущийДокумент КАК [Документ $Документ],
		$Журнал.ВидДокумента КАК [Документ_Вид $ВидДокумента],
		$Журнал.ПозицияДокумента КАК ПозицияДокумента,
		$Документ.Контрагент КАК [Плательщик $Справочник.Контрагенты],
		$Товары.Модель КАК [Модель $Справочник.Модели],
		$Модели.ВидМодели КАК [Направление $Справочник.ВидыМоделей],
		IFNULL($ДокументСтроки.ГТД, :ПустойИД) КАК [ГТД $Справочник.ГТД],
		СУММА($ДокументСтроки.Всего) КАК [Всего $Число],
		СУММА($ДокументСтроки.Количество) КАК [ПродКоличество $Число],
		СУММА(ВЫБОР КОГДА $Договоры.ОплатаДоговора = 2 ТОГДА $ДокументСтроки.Всего * $Документ.Курс ИНАЧЕ $ДокументСтроки.Всего КОНЕЦ) КАК [ПродСумма $Число]
	ИЗ
		ЖурналДокументов КАК Журнал $nolock
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК Документ $nolock ПО $Документ.ТекущийДокумент = $Журнал.ТекущийДокумент
		СОЕДИНЕНИЕ Справочник.Договоры КАК Договоры $nolock ПО $Договоры.ТекущийЭлемент = $Документ.Договор
		ЛЕВОЕ СОЕДИНЕНИЕ ДокументСтроки.РасходнаяНакладная КАК ДокументСтроки $nolock ПО $ДокументСтроки.ТекущийДокумент = $Журнал.ТекущийДокумент
		СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары $nolock ПО $Товары.ТекущийЭлемент = $ДокументСтроки.Товар
		СОЕДИНЕНИЕ Справочник.КатегорииНоменклатуры КАК Категории $nolock ПО $Категории.ТекущийЭлемент = $Товары.Категория
		СОЕДИНЕНИЕ Справочник.Модели КАК Модели $nolock ПО $Модели.ТекущийЭлемент = $Товары.Модель
	ГДЕ
		$Журнал.ДатаДокумента МЕЖДУ :НачДата И :КонДата~
		И $Журнал.Проведен = 1
		И $Журнал.ВидДокумента = :ВидДокумента.РасходнаяНакладная
		{УсловиеКонтрагенты}
		{УсловиеКатегории}
		{УсловиеМодели}
		{УсловиеНаправления}
	СГРУППИРОВАТЬ
		$ДокументСтроки.ГТД,
		$ДокументСтроки.Товар
	) КАК ЖурналРеализации
	СОЕДИНЕНИЕ Документ.Поступление КАК ПартияГТД ПО $ПартияГТД.ГТД = $ЖурналРеализации.ГТД
	СОЕДИНЕНИЕ ЖурналДокументов КАК ЖурналГТД ПО $ЖурналГТД.ТекущийДокумент = $ПартияГТД.ТекущийДокумент
ГДЕ
	1 = 1
	{УсловиеМенеджеры}
УПОРЯДОЧИТЬ
	$ЖурналРеализации.ПозицияДокумента
 


И почему то вываливается ошибка:
ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : no such column: $ЖурналРеализации.Документ
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);


Уже все мозги сломала не могу понять что я делаю то не так?
« Последняя редакция: 30. Октября 2015 :: 12:19 - Zhenya »  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #717 - 30. Октября 2015 :: 14:36
Печать  
Нет такой колонки в $ЖурналРеализации
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #718 - 30. Октября 2015 :: 14:37
Печать  
Это я прогнал, у тебя будет так ЖурналРеализации.Документ
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #719 - 30. Октября 2015 :: 14:38
Печать  
И в подзапросе нафиг типизацию выкинь всю
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 46 47 [48] 49 50 51
ОтправитьПечать