Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Запрос по документам (число прочтений - 4867 )
jeniazzz
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 21. Июля 2009
Запрос по документам
21. Июля 2009 :: 11:14
Печать  
Добрый день!
Нужна помощь! Делаю пробный первый запрос в 1с++.

Код
Выбрать все
   Запрос = СоздатьОбъект("ODBCRecordSet");
   Запрос.УстановитьТекстовыйПараметр("НачДата",НачДата);
   Запрос.УстановитьТекстовыйПараметр("КонДата",КонДата);
   Запрос.УложитьСписокОбъектов(ВыбКонтрагент,"#ВыбКонтрагент","Контрагенты");
 ТекстЗапроса = "
|SELECT
|	Жур.IDDoc as [Док $Документ],
|	Жур.IDDocDef as Док_вид,
|	Жур.$ОбщийРеквизит.Фирма as [Фирма $Справочник.Фирмы]
|FROM
|	_1SJourn Жур
|INNER JOIN
|	_1SCRDOC Отбор ON Отбор.ChildID = Жур.IDDoc AND
|				Отбор. MDID = $ГрафаОтбора.Контрагент AND
|			  Отбор.ParentVal = :ВыбКонтрагент AND
|			  Отбор.Child_Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
|WHERE
|	Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
|	Жур.IDDocDef = $ВидДокумента.Реализация or
|	Жур.IDDocDef = $ВидДокумента.ВозвратОтПокупателя AND

|	Жур.Closed & 1 = 1";

   ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
   ТЗ.ВыбратьСтроку();
 


выдает ошибку
Код
Выбрать все
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\ОБРАБОТКИ\SQL\ПРОДАЖИПОГРУППАНОМЕНКЛАТУРЫ.ERT(31)}: Meta name parser error: не указан параметр ":ВыбКонтрагент" 



В чем может быть дело?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Запрос по документам
Ответ #1 - 21. Июля 2009 :: 11:30
Печать  
Вместо
Код
Выбрать все
|  Отбор.ParentVal = :ВыбКонтрагент AND
 


используй
Код
Выбрать все
|  Отбор.ParentVal in  (SELECT Val FROM #ВыбКонтрагент) AND
 


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


1C++ rocks!

Сообщений: 8
Зарегистрирован: 21. Июля 2009
Re: Запрос по документам
Ответ #2 - 21. Июля 2009 :: 11:44
Печать  
Спасибо! Теперь запрос выполняется! Но информацию ни какую не выводит.....(пустая ТЗ)???

Вообще стоит задача сделать такой запрос
Код
Выбрать все
	Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса =
	"//{{ЗАПРОС(Запрос)
	|Период с НачДата по КонДата;
	|Обрабатывать НеПомеченныеНаУдаление;
	|Без итогов;
	|Реализация = ;
	|Контрагент = Документ.Реализация.Контрагент,Документ.ВозвратОтПокупателя.Контрагент;
	|Номенклатура = Документ.Реализация.Номенклатура,Документ.ВозвратОтПокупателя.Номенклатура;
	|Грузополучатель = Документ.Реализация.Грузополучатель;
	|Функция РеализацияСуммаСумма = Сумма(Реализация.Сумма);
	|Группировка Реализация;
	|"//}}ЗАПРОС
	;

	Если ВыбКонтрагент.Выбран() = 1 Тогда
		Если ВыбКонтрагент.ЭтоГруппа() = 1 Тогда
			ТекстЗапроса = ТекстЗапроса + "
			|Условие(Контрагент в ВыбКонтрагент);";
		Иначе
			ТекстЗапроса = ТекстЗапроса + "
			|Условие(Контрагент = ВыбКонтрагент);";
		КонецЕсли;
	КонецЕсли;

	Если ВыбНоменклатура.Выбран() = 1 Тогда
		Если ВыбНоменклатура.ЭтоГруппа() = 1 Тогда
			ТекстЗапроса = ТекстЗапроса + "
			|Условие(Номенклатура в ВыбНоменклатура);";
		Иначе
			ТекстЗапроса = ТекстЗапроса + "
			|Условие(Номенклатура = ВыбНоменклатура);";
		КонецЕсли;
	КонецЕсли;
 


Может кто поможет? СПАСИБО!
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Запрос по документам
Ответ #3 - 21. Июля 2009 :: 12:14
Печать  
Дело в том что ParentVal это char 23
а поле Val это char 9

поэтому вариант № 1 следующий
Код
Выбрать все
|  left(Отбор.ParentVal,4) = 'B1  '  AND   substring(Отбор.ParentVal,5,9) (SELECT Val FROM #ВыбКонтрагент) AND
 


  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Запрос по документам
Ответ #4 - 21. Июля 2009 :: 12:16
Печать  
Проверь условия по одному (если все в порядке вообще с логикой и данными)
Особое внимание or рядом с and, я так в скобочки беру в таких случаях
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Запрос по документам
Ответ #5 - 21. Июля 2009 :: 12:18
Печать  
но гораздо эффективнее импользовать вариант № 2
Создаем временную Таблицу #ВыбКонтрагент_2
с полем val char 23
копируем из таблицы #ВыбКонтрагент в #ВыбКонтрагент_2
все значения по шаблону
'B1  ' + #ВыбКонтрагент.val + '          '
и далее используем
Код
Выбрать все
|  Отбор.ParentVal in  (SELECT Val FROM #ВыбКонтрагент_2) AND
 


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


1C++ rocks!

Сообщений: 8
Зарегистрирован: 21. Июля 2009
Re: Запрос по документам
Ответ #6 - 21. Июля 2009 :: 12:21
Печать  
Z1 писал(а) 21. Июля 2009 :: 12:14:
Дело в том что ParentVal это char 23
а поле Val это char 9

поэтому вариант № 1 следующий
Код
Выбрать все
|  left(Отбор.ParentVal,4) = 'B1  '  AND   substring(Отбор.ParentVal,5,9) (SELECT Val FROM #ВыбКонтрагент) AND
 



Выдает ошибку
Код
Выбрать все
{D:\ОБРАБОТКИ\SQL\ПРОДАЖИПОГРУППАНОМЕНКЛАТУРЫ.ERT(27)}: State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 11: Incorrect syntax near '('. 


Все как то уж сильно заморочено....
  
Наверх
 
IP записан
 
jeniazzz
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 21. Июля 2009
Re: Запрос по документам
Ответ #7 - 21. Июля 2009 :: 12:24
Печать  
Z1 писал(а) 21. Июля 2009 :: 12:18:
но гораздо эффективнее импользовать вариант № 2
Создаем временную Таблицу #ВыбКонтрагент_2
с полем val char 23
копируем из таблицы #ВыбКонтрагент в #ВыбКонтрагент_2
все значения по шаблону
'B1  ' + #ВыбКонтрагент.val + '          '
и далее используем
Код
Выбрать все
|  Отбор.ParentVal in  (SELECT Val FROM #ВыбКонтрагент_2) AND
 



Можно написать как это происходит в коде? И в чем сама эффективность? Спасибо!
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Запрос по документам
Ответ #8 - 21. Июля 2009 :: 12:24
Печать  
jeniazzz писал(а) 21. Июля 2009 :: 12:21:
Z1 писал(а) 21. Июля 2009 :: 12:14:
Дело в том что ParentVal это char 23
а поле Val это char 9

поэтому вариант № 1 следующий
Код
Выбрать все
|  left(Отбор.ParentVal,4) = 'B1  '  AND   substring(Отбор.ParentVal,5,9) (SELECT Val FROM #ВыбКонтрагент) AND
 



Выдает ошибку
Код
Выбрать все
{D:\ОБРАБОТКИ\SQL\ПРОДАЖИПОГРУППАНОМЕНКЛАТУРЫ.ERT(27)}: State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 11: Incorrect syntax near '('. 


Все как то уж сильно заморочено....

я in забыл

Код
Выбрать все
|  left(Отбор.ParentVal,4) = 'B1  '  AND   substring(Отбор.ParentVal,5,9) in (SELECT Val FROM #ВыбКонтрагент) AND
 


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


1C++ rocks!

Сообщений: 8
Зарегистрирован: 21. Июля 2009
Re: Запрос по документам
Ответ #9 - 21. Июля 2009 :: 12:27
Печать  
Z1 писал(а) 21. Июля 2009 :: 12:24:
jeniazzz писал(а) 21. Июля 2009 :: 12:21:
Z1 писал(а) 21. Июля 2009 :: 12:14:
Дело в том что ParentVal это char 23
а поле Val это char 9

поэтому вариант № 1 следующий
Код
Выбрать все
|  left(Отбор.ParentVal,4) = 'B1  '  AND   substring(Отбор.ParentVal,5,9) (SELECT Val FROM #ВыбКонтрагент) AND
 



Выдает ошибку
Код
Выбрать все
{D:\ОБРАБОТКИ\SQL\ПРОДАЖИПОГРУППАНОМЕНКЛАТУРЫ.ERT(27)}: State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 11: Incorrect syntax near '('. 


Все как то уж сильно заморочено....

я in забыл

Код
Выбрать все
|  left(Отбор.ParentVal,4) = 'B1  '  AND   substring(Отбор.ParentVal,5,9) in (SELECT Val FROM #ВыбКонтрагент) AND
 




а я и не вижу... тож что in нет  Улыбка
Но результат все равно тот же пустая ТЗ....
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Запрос по документам
Ответ #10 - 21. Июля 2009 :: 12:29
Печать  
Тогда последуй совету Вадимко
убери все условия
получим непустой запрос и далее добавляем условия по одному.
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Запрос по документам
Ответ #11 - 21. Июля 2009 :: 12:35
Печать  
Дык ясен пень. Бред и будет. Or И and  в одну кучу не смешивают.
  
Наверх
 
IP записан
 
jeniazzz
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 21. Июля 2009
Re: Запрос по документам
Ответ #12 - 21. Июля 2009 :: 12:43
Печать  
Цитата:
Дык ясен пень. Бред и будет. Or И and  в одну кучу не смешивают.

ЕПМ   Злой да что вы привязалась к or
Код
Выбрать все
|SELECT
|	Жур.IDDoc as [Док $Документ],
|	Жур.IDDocDef as Док_вид,
|	Жур.$ОбщийРеквизит.Фирма as [Фирма $Справочник.Фирмы]
|FROM
|	_1SJourn Жур
|INNER JOIN
|	_1SCRDOC Отбор ON Отбор.ChildID = Жур.IDDoc AND
|				Отбор. MDID = $ГрафаОтбора.Контрагент AND
|				  left(Отбор.ParentVal,4) = 'B1  '  AND   substring(Отбор.ParentVal,5,9) in (SELECT Val FROM #ВыбКонтрагент) AND
|			    Отбор.Child_Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
|WHERE
|	Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
|	(Жур.IDDocDef = $ВидДокумента.Реализация) AND
|	Жур.Closed & 1 = 1";
 



Так тоже не работает! Печаль
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Запрос по документам
Ответ #13 - 21. Июля 2009 :: 12:48
Печать  
так работает ?
Код
Выбрать все
SELECT top 100
|	Жур.IDDoc as [Док $Документ],
|	Жур.IDDocDef as Док_вид,
|	Жур.$ОбщийРеквизит.Фирма as [Фирма $Справочник.Фирмы]
|FROM
|	_1SJourn Жур
|INNER JOIN
|	_1SCRDOC Отбор ON Отбор.ChildID = Жур.IDDoc ";
 

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


1C++ rocks!

Сообщений: 8
Зарегистрирован: 21. Июля 2009
Re: Запрос по документам
Ответ #14 - 21. Июля 2009 :: 12:51
Печать  
Z1 писал(а) 21. Июля 2009 :: 12:48:
так работает ?
Код
Выбрать все
SELECT top 100
|	Жур.IDDoc as [Док $Документ],
|	Жур.IDDocDef as Док_вид,
|	Жур.$ОбщийРеквизит.Фирма as [Фирма $Справочник.Фирмы]
|FROM
|	_1SJourn Жур
|INNER JOIN
|	_1SCRDOC Отбор ON Отбор.ChildID = Жур.IDDoc ";
 



Так и работало. И даже работает так.
Код
Выбрать все
|SELECT
|	Жур.IDDoc as [Док $Документ],
|	Жур.IDDocDef as Док_вид,
|	Жур.$ОбщийРеквизит.Фирма as [Фирма $Справочник.Фирмы]
|FROM
|	_1SJourn Жур
|WHERE
|	Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
|	Жур.IDDocDef = $ВидДокумента.ВозвратОтПокупателя or
|	Жур.IDDocDef = $ВидДокумента.Реализация AND
|	Жур.Closed & 1 = 1";

 


А с отбором по контрагенту не хочет.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать