Переключение на Главную Страницу Страницы: 1 [2] 3 4 5 ОтправитьПечать
Очень популярная тема (более 25 ответов) ТЗ = Запрос.ВыполнитьИнструкцию(тЗапроса): ЧТО ДАЛЬШЕ !? (число прочтений - 22061 )
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: ТЗ = Запрос.ВыполнитьИнструкцию(тЗапроса): ЧТО ДАЛЬШЕ !?
Ответ #15 - 28. Марта 2013 :: 10:17
Печать  
Вьюхи создаются без проблем - у нас в базе для всех таблиц метаданных созданы вьюхи с нормальными именами колонок

Типо так:
Код
Выбрать все
ИмяПредставления = "рег"+МетаРег.Идентификатор+"Итоги";
ИмяТаблицыИтогов = РадугаСервис.ИмяТаблицыИтогов(МетаРег.Идентификатор);
ТекстЗапроса = "
|CREATE VIEW "+ИмяПредставления+" AS
|SELECT
|	"+стрКолонки+",
|	Period Period,
|	Period ПериодИтогов
|FROM "+ИмяТаблицыИтогов+" (NoLock)
|"; 



Ну и потом, соответственно, можно писать:
Код
Выбрать все
SELECT
	рег.Партия,
	рег.Остаток
FROM
	регПартииИтоги рег
WHERE
	рег.ПериодИтогов = @ПериодИтоговТА 



Только вьюхи "облегчают" внешний вид запроса (какие-нить поля с жуткими CASE-ами красиво прячутся во вьюху, например), на сам план выполнения они никак не влияют.
Вот временные таблицы - они могут существенно помочь с точки зрения оптимизации запросов.
  
Наверх
 
IP записан
 
GandolF
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 06. Марта 2013
Re: ТЗ = Запрос.ВыполнитьИнструкцию(тЗапроса): ЧТО ДАЛЬШЕ !?
Ответ #16 - 28. Марта 2013 :: 13:48
Печать  
Ещё раз всем привет!
Как реализовать ф-цию Спр.ПринадлежитГруппе(грСпр) в запросе ???
  

Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: ТЗ = Запрос.ВыполнитьИнструкцию(тЗапроса): ЧТО ДАЛЬШЕ !?
Ответ #17 - 28. Марта 2013 :: 17:58
Печать  
GandolF писал(а) 28. Марта 2013 :: 13:48:
Ещё раз всем привет!
Как реализовать ф-цию Спр.ПринадлежитГруппе(грСпр) в запросе ???


примерно так:
ТекстЗапроса = "...
WHERE
$Док.Товар in (select Val from #tmp_1)";

потом делаешь:

спФильтр = Создать("СписокЗначений");
спФильтр.Добавить(грСпр.ТекущийЭлемент());
РС.УложитьСписок(спФильтр,"#tmp_1","Номенклатура");

и получаешь результат:

РС.ВыполнитьИнструкцию(ТекстЗапроса);
  
Наверх
ICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: ТЗ = Запрос.ВыполнитьИнструкцию(тЗапроса): ЧТО ДАЛЬШЕ !?
Ответ #18 - 28. Марта 2013 :: 18:23
Печать  
GandolF писал(а) 28. Марта 2013 :: 13:48:
Ещё раз всем привет!
Как реализовать ф-цию Спр.ПринадлежитГруппе(грСпр) в запросе ???

А еще можно через триггеры вести структуру вложенности справочника.
  
Наверх
IP записан
 
GandolF
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 06. Марта 2013
Re: ТЗ = Запрос.ВыполнитьИнструкцию(тЗапроса): ЧТО ДАЛЬШЕ !?
Ответ #19 - 29. Марта 2013 :: 05:55
Печать  
Salimbek писал(а) 28. Марта 2013 :: 17:58:
GandolF писал(а) 28. Марта 2013 :: 13:48:
Ещё раз всем привет!
Как реализовать ф-цию Спр.ПринадлежитГруппе(грСпр) в запросе ???


примерно так:
ТекстЗапроса = "...
WHERE
$Док.Товар in (select Val from #tmp_1)";

потом делаешь:

спФильтр = Создать("СписокЗначений");
спФильтр.Добавить(грСпр.ТекущийЭлемент());
РС.УложитьСписок(спФильтр,"#tmp_1","Номенклатура");

и получаешь результат:

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

Пишу:
Код
Выбрать все
	|AND	$Док.Клиент in (select Val from #tmp_1)";
		спФильтр = СоздатьОбъект("СписокЗначений");
		спФильтр.ДобавитьЗначение(ВыбКлиент);
		Запрос.УложитьСписокОбъектов(спФильтр,"#tmp_1","Клиент");
 


Выдает:
Запрос.УложитьСписокОбъектов(спФильтр,"#tmp_1","Клиент");
{..бла.бла...}: Недопустимое значение третьего аргумента метода!
Что не так?
  

Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
Наверх
 
IP записан
 
GandolF
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 06. Марта 2013
Re: ТЗ = Запрос.ВыполнитьИнструкцию(тЗапроса): ЧТО ДАЛЬШЕ !?
Ответ #20 - 29. Марта 2013 :: 06:43
Печать  
Ошибку устранил, но выборка всё равно идет не правильно:
Если выбрана группа 2-го уровня, то должны попасть все эл-ты подчиненные группам 3-го уровня, и т.д. А он хватает только 1ую подчиненную.
Помогите оптимизировать  ПОЖАЛУЙСТА !!!
  

Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: ТЗ = Запрос.ВыполнитьИнструкцию(тЗапроса): ЧТО ДАЛЬШЕ !?
Ответ #21 - 29. Марта 2013 :: 08:37
Печать  
Все зависит от того КАК ты устранил ошибку. Подробнее читай тут: http://www.1cpp.ru/docum/icpp/html/ODBC.html#putobjectlist
Цитата:
Если указан вид ВидЭлементов - идентификатор иерархического справочника, то таблица будет содержать элементы, иерархически принадлежащие группам переданным в списке. (Подобно оператору "в" стандартного языка запросов 1С.)
  
Наверх
ICQ  
IP записан
 
GandolF
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 06. Марта 2013
Re: ТЗ = Запрос.ВыполнитьИнструкцию(тЗапроса): ЧТО ДАЛЬШЕ !?
Ответ #22 - 29. Марта 2013 :: 09:38
Печать  
Salimbek писал(а) 29. Марта 2013 :: 08:37:
Все зависит от того КАК ты устранил ошибку. Подробнее читай тут: http://www.1cpp.ru/docum/icpp/html/ODBC.html#putobjectlist
Цитата:
Если указан вид ВидЭлементов - идентификатор иерархического справочника, то таблица будет содержать элементы, иерархически принадлежащие группам переданным в списке. (Подобно оператору "в" стандартного языка запросов 1С.)

Исправил идентификатор справочника
Код
Выбрать все
|AND  $Док.Клиент in (select Val from #tmp_1)";
		   спФильтр.ДобавитьЗначение(ВыбКлиент);
		   Запрос.УложитьСписокОбъектов(спФильтр,"#tmp_1","Клиенты") 



Цитата:
Синтаксис: УложитьСписокОбъектов(Список, ИмяТаблицы, [ВидЭлементов])

Параметры:

Список - тип: СписокЗначений, Справочник, Счет. Объект, содержание которого будет отправляться на сервер. Если передан список значений, во врем. таблицу попадает содержимое списка. Допустимо также передавать группу справочника, элемент справочника, группу счетов, счет - в этом случае во временную таблицу поступает переданное значение, однако если указан ВидЭлементов (вид справочника, или план счетов), то будет попытка включить в таблицу все подчененные элементы.
ИмяТаблицы - тип: Строка. Имя временной таблицы.
ВидЭлементов - тип: Строка. Вид справочника для иерархического включения элементов или вид плана счетов для иерархического включения счетов. Если параметр не указан, иерархического включения не происходит.
Описание: сохраняет список внутренних идентификаторов объектов во временной таблице MS SQL. Идентификаторы объектов из списка сохраняются во временной таблице в поле val char(9). Имя таблицы должно начинаться с символа "#".

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

Замечание: метод допустимо применять только для источника данных Microsoft SQL Server

Что будем выяснять кто больше учебников прочел ?!
По синтаксису же нет вопросов  Озадачен
  

Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: ТЗ = Запрос.ВыполнитьИнструкцию(тЗапроса): ЧТО ДАЛЬШЕ !?
Ответ #23 - 29. Марта 2013 :: 18:14
Печать  
Ты не серчай, исправить могжно же было и вообще убрав третий параметр Подмигивание

Что касается твоей проблемы, то следующий шаг, очень простой, формируешь выборку, для проверки, что у тебя уложилось во временную таблицу:

ТекстЗапроса = "SELECT Val as Id, Val [Клиент $Справочник.Клиенты] from #tmp_1";
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ = РС.ВыполнитьИнструкцию(ТекстЗапроса, ТЗ, 1);
ТЗ.ВыбратьСтроку();

Далее сравниваешь Id-шник, который во временной таблице, и в  твоем документе
  
Наверх
ICQ  
IP записан
 
GandolF
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 06. Марта 2013
Re: ТЗ = Запрос.ВыполнитьИнструкцию(тЗапроса): ЧТО ДАЛЬШЕ !?
Ответ #24 - 01. Апреля 2013 :: 06:31
Печать  
Спасибо, заработалооооо!  Очень довольный
  

Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
Наверх
 
IP записан
 
GandolF
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 06. Марта 2013
Re: ТЗ = Запрос.ВыполнитьИнструкцию(тЗапроса): ЧТО ДАЛЬШЕ !?
Ответ #25 - 01. Апреля 2013 :: 08:32
Печать  
Доброго дня всем!
Прошу помощи ещё по одному вопросу:  Плачущий
"рулю" тему с вирт. таблицами,т.к.  иного выхода сократить время формирования отчета не вижу. Результат: отчет или виснит, или выдает пустую тз.
Короче есть заполненная ТЗ, далее на основании её формируются ещё несколько ТЗ1, ТЗ2,...и т.д.
Как на скуле переписать вот этот маразм:
Код
Выбрать все
ТЗ1.ВыбратьСтроки();
Пока ТЗ1.ПолучитьСтроку()=1 Цикл

	ТЗ2.ВыбратьСтроки();
	Пока ТЗ2.ПолучитьСтроку()=1 Цикл
		Пока (ТЗ2.НачОтд = ТЗ1.НачОтд) и (ТЗ2.НомерСтроки<>0) Цикл    
			ТЗ3.ВыбратьСтроки();
			Пока ТЗ3.ПолучитьСтроку()=1 Цикл
				Пока  ЗначениеВСтроку(ТЗ3.НачОтд)+"@"+ЗначениеВСтроку(ТЗ3.Менеджер) = ЗначениеВСтроку(ТЗ2.НачОтд)+"@"+ЗначениеВСтроку(ТЗ2.Менеджер)) и (ТЗ3.НомерСтроки<>0) Цикл  
	............и так дальше в том же стиле...
	Таб.ВывестиСекцию("Клиент|Колонки1");
	Таб.ВывестиСекцию("Клиент|Колонки2");
	  ..........ещё много разных условий.......
КонецЦикла;
 


Я пытаюсь саму ТЗ тоже сделать временной:
Код
Выбрать все
лЗапрос.Выполнить("
|CREATE TABLE #TempTab (Период $Дата,Клиент  $Справочник.Клиенты,ПунктРазгрузки $Справочник.ПунктыРазгрузки,Агент $Справочник.Агенты,Менеджер $Справочник.Менеджеры,НачОтд $Справочник.НачРегОСб,Товар $Справочник.Товары,Кол $Число.10.2)");
лЗапрос.Подготовить("Insert into #TempTab (Период, Клиент, ПунктРазгрузки, Агент, Менеджер,НачОтд,Товар,Кол) Values (?, ?, ?, ?, ?, ?, ?, ?, ?)");
...
здесь заполняется ТЗ;
....
лЗапрос.ДобПараметр(1,8,0,0);
лЗапрос.ДобПараметр(1,14,100,0);
лЗапрос.ДобПараметр(1,14,100,0);
лЗапрос.ДобПараметр(1,14,50,0);
лЗапрос.ДобПараметр(1,14,50,0);
лЗапрос.ДобПараметр(1,14,50,0);
лЗапрос.ДобПараметр(1,14,50,0);
лЗапрос.ДобПараметр(1,11,10,2);
лРез = 0;
 Попытка
	лЗапрос.ВыполнитьSQL_ИзТЗ(ТЗ);
 	лРез = 1;
Исключение
КонецПопытки;

 Если лРез <> 1 Тогда
	Предупреждение("Ошибка при формировании отчета!" + РазделительСтрок + лЗапрос.ПолучитьОписаниеОшибки());
КонецЕсли;
ТЗ2 = лЗапрос.ВыполнитьИнструкцию("select * from TempTab",ТЗ,1);
ТЗ2.ВыбратьСтроку();
 


Виснит  Ужас
Вся надежда на ваш форум! HELP ME
« Последняя редакция: 01. Апреля 2013 :: 11:05 - GandolF »  

Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
Наверх
 
IP записан
 
GandolF
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 06. Марта 2013
Re: ТЗ = Запрос.ВыполнитьИнструкцию(тЗапроса): ЧТО ДАЛЬШЕ !?
Ответ #26 - 01. Апреля 2013 :: 08:48
Печать  
Вот ещё один вопрос:
Как на скуле переписать ТЗ.Выгрузить(ТЗНач,,,"НачОтд") ??
  

Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
Наверх
 
IP записан
 
GandolF
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 06. Марта 2013
Re: ТЗ = Запрос.ВыполнитьИнструкцию(тЗапроса): ЧТО ДАЛЬШЕ !?
Ответ #27 - 02. Апреля 2013 :: 07:10
Печать  
Ну, что, так никто ничего и не предложит ?!? или с посещаемостью тут плохо ?
А как всё начиналось...
Подайте хоть идею в какую сторону "курить"
  

Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ТЗ = Запрос.ВыполнитьИнструкцию(тЗапроса): ЧТО ДАЛЬШЕ !?
Ответ #28 - 02. Апреля 2013 :: 08:54
Печать  
Круто конечно, в создаваемой табличке в скуле пытаться столбцы типизировать
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: ТЗ = Запрос.ВыполнитьИнструкцию(тЗапроса): ЧТО ДАЛЬШЕ !?
Ответ #29 - 02. Апреля 2013 :: 08:56
Печать  
Я вот смотрю на автора и думаю - почему же отказался от предложения переписать отчет с 0?
Аудитория - есть варианты?
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 5
ОтправитьПечать