Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 6 ... 11 ОтправитьПечать
Очень популярная тема (более 25 ответов) Помогите, пожалуйста, в составлении запроса (число прочтений - 34557 )
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #45 - 15. Сентября 2014 :: 10:40
Печать  
А есть смысл его переделывать то ?
Он же не рабочий.
Точнее, показывает не то, что вы думаете на самом деле.
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #46 - 15. Сентября 2014 :: 11:25
Печать  
Eprst писал(а) 15. Сентября 2014 :: 10:40:
А есть смысл его переделывать то ?
Он же не рабочий.
Точнее, показывает не то, что вы думаете на самом деле.


А что Вы имеете ввиду, говоря что он не то показывает?
Честно говоря писал отчет не я, и в этой базе Ооочень много "интересного", но смысл в том чтоб возмжно не переделать, а просто на основании него (по его фильтрам) написать прямой.. я вот пытаюсь (но пока не очень, так как только начал знакомится с прямыми запросами и мне тяжеловато пока понять как и где вставлять фильтра и т.д.):
Код
Выбрать все
Процедура Сформировать()

ВыбТип = Константа.Изделие;
Акц = Перечисление.Булево.Да;
//выбКод - СписокЗначений

ТекстЗапроса = "
	|Select
	|   Взаим.Товар 	[Товар $Справочник.Номенклатура],
	|   Взаим.Партия	[Партия $Справочник.Партии],
	|   Взаим.Склад 	[Склад $Справочник.Подразделения],
	|   Вид	 			[Вид $Перечисление.ВидИзделия],
	|   ТипПФ		 	[ТипПФ $Справочник.ТипПФ],
	|   Тип			 	[Тип $Справочник.Тип],
	|   Акция		 	[Акция $Перечисление.Булево],
	|   Вуду		 	[Вуду $Перечисление.ВидУчета],
	|   Клиент		 	[Клиент $Справочник.Контрагенты],
	|   Фирмочка		[Фирмочка $Справочник.Фирмы],
	|   ВладелецТовара	[ВладелецТовара $Справочник.Контрагенты],
	|   Взаим.КоличествоОстаток as Кво,
	|   Взаим.МассаОстаток as Масса,
	|   Взаим.МассаБКОстаток as МассаБК,
	|   Взаим.СуммаОстаток as Сумма,
	|   Взаим.СуммаПродажиОстаток as СуммаП
	|FROM
	|   $РегистрОстатки.Взаиморасщеты(,,Фирмочка = :Фирма
	|	AND Склад = :Складик,,) as Взаим
	|where
	|	(period={d '2014-09-14'}) AND
	|	(Взаим.ШтукОстаток<>0) AND
	|   (Тип = ВыбТип) AND
	|   (Акция = ВыбТип) AND
	|   (Клиент = Поставщик) AND
	|   (Вид = ВыбВидИзделия) AND
	|   (ВладелецТовара = Клиентик) AND
	|   (Вуду = Учет) AND
	|GROUP BY Клиент,
	|	   Вид,
	|		  Взаим.Товар,
	|		  Взаим.Партия
	|";

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

	Если ВыбКод.РазмерСписка() = 0 Тогда
	Иначе
		Запрос.УложитьСписокОбъектов(выбКод,"#выбКод", "Номенклатура");
	КонецЕсли;


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

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #47 - 15. Сентября 2014 :: 11:37
Печать  
Итог таков, мне нужно из регистра остатков "Взаиморсчеты" выбрать информацию по куче фильтров. При чем переменные в фильтрах могут быть как группой, спискомзначений так и просто элементом.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #48 - 15. Сентября 2014 :: 12:08
Печать  
Интересно, зачем во ВзаиморасЩетах партия ?
И зачем в Регистре партии Клиентос ?...
Кто автор этого чуда?


Имхо, автоматизируя бардак, получите автоматизированный бардак.
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #49 - 15. Сентября 2014 :: 12:11
Печать  
Eprst писал(а) 15. Сентября 2014 :: 12:08:
Интересно, зачем во ВзаиморасЩетах партия ?
И зачем в Регистре партии Клиентос ?...
Кто автор этого чуда?


Имхо, автоматизируя бардак, получите автоматизированный бардак.


Сложно ответить, так было написано до меня... Нужно сделать выборку из этих двух регистров. (кстати есть и регистр "взаиморсчеты" Подмигивание). Партия - это в принцыпи уникальный товар (эдиница), так как именно партия различает изделия по весу, камням, времени создания и т.д.
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #50 - 15. Сентября 2014 :: 12:14
Печать  
В регистрах нет "Клиентос", Клиент - это реквизит спр.номенклатура.
По сути из регистра берутся только партия, товар и склад + остатки по весу, сумме и кол. Все остальное - это реквизиты спр.Партии и спр.Номенклатура (просто эти реквизиты учавствуют в фильтрах)
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #51 - 15. Сентября 2014 :: 12:23
Печать  
После прошлого Вашего "урока" я уже написал пару "прямых", но на данный момент я путаюсь, а точнее не знаю как вставить в условие запроса переменную, которая может быть группой, элементом или вообще не выбрана.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #52 - 15. Сентября 2014 :: 12:56
Печать  
maxy3d писал(а) 15. Сентября 2014 :: 07:38:
trad писал(а) 11. Сентября 2014 :: 10:33:
регистр складского/партионного учета в котором на остатке в штуках 0, а в других ресурсах не 0 - должен настораживать

Фирма занимается изготовление ювелирки - каждое изделие - это уникальная партия (в связи с весом и камнями), хотя может быть одинаковый артикул товара.

я намекаю на то, что если у тебя изделие ушло, т.е. на остатке штук = 0, то и массы как бы тоже не должно остаться
  

1&&2&&3
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #53 - 15. Сентября 2014 :: 14:56
Печать  
Может кто подскажет хорошую литературу по прямым запросам для 1С 7.7?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #54 - 16. Сентября 2014 :: 07:55
Печать  
maxy3d писал(а) 15. Сентября 2014 :: 14:56:
Может кто подскажет хорошую литературу по прямым запросам для 1С 7.7?



http://rutracker.org/forum/viewtopic.php?t=4255699
http://www.script-coding.com/v77tables.html
http://www.1cpp.ru/forum/YaBB.pl?num=1148038411
http://www.1cpp.ru/forum/YaBB.pl?num=1148874473

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #55 - 16. Сентября 2014 :: 08:49
Печать  
Помогите, пожалуйста.
Есть запрос :
Код
Выбрать все
Перем Запрос, ТекстЗапроса;
	Если ТЗ.КоличествоСтрок()>0 Тогда
		ТЗ.УдалитьСтроки();
	КонецЕсли;
	ДатаЗапрос = СтрЗаменить(Строка(ДатаДок),".","-");

	ТекстЗапроса = "
	|Select
	|   Рег.Товар 	[Товар $Справочник.Номенклатура],
	|   Рег.Партия	[Партия $Справочник.Партии],
	|   Рег.Магазин [Магазин $Справочник.Подразделения],
	|   Рег.КоличествоОстаток as Кол,
	|   Рег.МассаОстаток as Масса,
	|   Рег.МассаБКОстаток as МассаБК,
	|   Рег.СуммаОстаток as Сумма
	|FROM
	|   $РегистрОстатки.Взаиморасщеты(,,period = {d '2014-09-01'} AND Магазин = :Склад,,) as Рег
	|where
	|	Рег.КоличествоОстаток>0
	|";

    Запрос = СоздатьОбъект("ODBCRecordSet");
	Запрос.УстановитьТекстовыйПараметр("Склад", Склад);
	Запрос.Отладка(1);		    
	ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); 



Попытался заменить прямым:
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|   Рег.Товар 	[Товар $Справочник.Номенклатура],
	|   Рег.Партия	[Партия $Справочник.Партии],
	|   Рег.Магазин [Магазин $Справочник.Подразделения],
	|   Рег.КоличествоОстаток as Кол,
	|   Рег.МассаОстаток as Масса,
	|   Рег.МассаБКОстаток as МассаБК,
	|   Рег.СуммаОстаток as Сумма
	|FROM
	|   $РегистрОстатки.Взаиморасщеты(,,period = {d '2014-09-01'} AND Магазин = :Склад,,) as Рег
	|where
	|	Рег.КоличествоОстаток>0
	|";

    Запрос = СоздатьОбъект("ODBCRecordSet");
	Запрос.УстановитьТекстовыйПараметр("Склад", Склад);
	Запрос.Отладка(1);		    
	ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); 


Старый запрос выдает 1500 строк, а прямой выдает 12000. Просматривал ТЗ, он выдает много строк. И если я пытаюсь поставить так как в оригинале период = датадок - выдает пустоту.. Печаль
Что я не правильно написал, чтоб результат был одинаковым?
Оргомное спасибо!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #56 - 16. Сентября 2014 :: 09:06
Печать  
Чем первый отличается от второго ?
Ничем!

И в обоих неверно указан первый параметр.
Смотри описание виртуальной таблицы Остатки
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #57 - 16. Сентября 2014 :: 09:29
Печать  
Eprst писал(а) 16. Сентября 2014 :: 09:06:
Чем первый отличается от второго ?
Ничем!

И в обоих неверно указан первый параметр.
Смотри описание виртуальной таблицы Остатки


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

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #58 - 16. Сентября 2014 :: 09:52
Печать  
Смотри первый параметр, читай статьи по ссылкам выше

http://www.1cpp.ru/docum/html/ODBC.html#id34
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #59 - 16. Сентября 2014 :: 10:47
Печать  
Eprst писал(а) 16. Сентября 2014 :: 09:52:
Смотри первый параметр, читай статьи по ссылкам выше

http://www.1cpp.ru/docum/html/ODBC.html#id34


Скорее всего я конкретно туплю, но по приведенному Вами примеру (Огромное спасибо, наконец я понял зачем там столько запятых...), я написал:
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|   Рег.Товар 	[Товар $Справочник.Номенклатура],
	|   Рег.Партия	[Партия $Справочник.Партии],
	|   Рег.Магазин [Магазин $Справочник.Подразделения],
	|   Рег.КоличествоОстаток as Кол,
	|   Рег.МассаОстаток as Масса,
	|   Рег.МассаБКОстаток as МассаБК,
	|   Рег.СуммаОстаток as Сумма
	|FROM
	|   $РегистрОстатки.Взаиморасщеты(,inner join $Справочник.Подразделения as СпрСклад (nolock) on СпрСклад.id = :Склад,Магазин = :Склад,,) as Рег
	//|   $РегистрОстатки.Взаиморасщеты(,,Магазин = :Склад,,) as Рег
	|where
	|	Рег.КоличествоОстаток>0 AND
	|	Рег.МассаОстаток>0
	|";

    Запрос = СоздатьОбъект("ODBCRecordSet");
	Запрос.УстановитьТекстовыйПараметр("Склад", Склад);
	Запрос.Отладка(1);
	ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); 


Но какой именно параметр (первый) у меня не верно задан... я так и не понял... Помогите пож.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 6 ... 11
ОтправитьПечать