Переключение на Главную Страницу Страницы: 1 ... 6 7 [8] 9 10 11 ОтправитьПечать
Очень популярная тема (более 25 ответов) Помогите, пожалуйста, в составлении запроса (число прочтений - 34835 )
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #105 - 19. Сентября 2014 :: 12:21
Печать  
maxy3d писал(а) 19. Сентября 2014 :: 11:16:
В другом регистре нет измерения "Склад"..

как должно работать условие Склад = :Склад
  

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #106 - 19. Сентября 2014 :: 12:31
Печать  
В обоих запросах в юнионе должно быть равное количество полей в выборке и в одинаковом порядке.
Это же простое объединение двух таблиц.

Если чего-то нет, ставь туда null или пустое значение нужного типа.
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #107 - 19. Сентября 2014 :: 12:41
Печать  
Eprst писал(а) 19. Сентября 2014 :: 12:31:
В обоих запросах в юнионе должно быть равное количество полей в выборке и в одинаковом порядке.
Это же простое объединение двух таблиц.

Если чего-то нет, ставь туда null или пустое значение нужного типа.

тойсть сей запрос:
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|	Товар		[Товар $Справочник.Номенклатура],
	|	Заказ		[Заказ $Справочник.Партии],
	|       Склад 	[Склад $Справочник.Подразделения],
	|	$Номен.Тип  [Тип $Справочник.Тип],
	|FROM(
	|	Select
	|   	Рег.Товар as Товар,
	|	Рег.Партия as Заказ,
	|   	Рег.Склад as Склад,
	|   	Рег.КоличествоОстаток as ККО,
	|   	Рег.МассаОстаток as МКО,
	|   	Рег.МассаКОстаток as МК
	|	FROM
	|   	$РегистрОстатки.ПартииТоваров(,,,,) as Рег

	|	UNION All
	|	Select
	|   	Рег2.Товар as Товар,
	|	Рег2.Заказ as Заказ,
	  |	 0 as Склад,
	|   	Рег2.КоличествоОстаток as ККО,
	|   	Рег2.МассаОстаток as МКО,
	|   	Рег2.МассаКОстаток as МК
	|	FROM
	|   	$РегистрОстатки.Камни(,,,,) as Рег2
	|) as Выборка  
	|left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Товар
	|where
	|	Выборка.Склад = :Склад
	|	Выборка.Тип = :ТипТ
	|group by Товар,Заказ  
	|";
 


Правильный, но в него нужно добавить выборку из втрого регистра типа:
Код
Выбрать все
null as Склад 


и перечислить ресурсы?
Или я туплю?
Я просто не уверен что правильно понимаю правила написания с условием "Unian all" (объединением)...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #108 - 19. Сентября 2014 :: 13:20
Печать  
типа того.

Но своим условием Выборка.Склад = :Склад - ты потеряешь все записи из $РегистрОстатки.Камни
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #109 - 23. Сентября 2014 :: 08:13
Печать  
Добрый день, подскажите пож с запросом:
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|   Рег.Товар 	[Товар $Справочник.Номенклатура],
	|   Рег.Партия	[Партия $Справочник.Партии],
	|   Рег.Склад	[Склад $Справочник.Склады],
	|   $Номен.Тип	[ПробаМ $Справочник.Тип],
	|   Рег.ОстатокШтукОстаток as Кол,
	|   Рег.ОстатокМассаОстаток as Масса,
	|   Рег.МассаКОстаток as МассаК
	|FROM
	|   $РегистрОстатки.ПартииТоваров(,,Склад = :ВыбСклад,,) as Рег
	|left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар
	|left join $РегистрОстатки.Камни as РегК (nolock) on РегК.Заказ = Рег.Партия
	|where
	|	Рег.ОстатокШтукОстаток>0
	|	AND $Номен.Тип=:ВыбТип
	|";

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

	//Запрос.Отладка(1);
	ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
	Сообщить("* "+ТЗ.КоличествоСтрок()); 


Мне нужно вытащить из регистра "Камни" только "МассаК". В итоге я получаю ошибку:
State 42000, native 8158, message [Microsoft][ODBC SQL Server Driver][SQL Server]РегК содержит больше столбцов, чем указано в списке столбцов.
Я понимаю ее суть, но как обойти не совсем. Нуждаюсь в помощи! Хелп!
Спасибо!
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #110 - 23. Сентября 2014 :: 09:09
Печать  
Проблема в этой строке:
maxy3d писал(а) 23. Сентября 2014 :: 08:13:
left join $РегистрОстатки.Камни as РегК (nolock) on РегК.Заказ = Рег.Партия

"Заказ" - измерение регистра, хранится в каком-то поле таблицы БД. Т.к. это не виртуальная таблица, название измерения должно быть обработано метапарсером, т.е. надо писать так:
left join $РегистрОстатки.Камни as РегК (nolock) on $РегК.Заказ = Рег.Партия
Рег оставляем как есть т.к. этот алиас относится к виртуальной таблице, внутри которой названия столбов приводятся к тем, которые заданы в конфигураторы.
Ошибка по невнимательности

Ну и не понятно зачем вообще нужна таблица РегК - она только в левом соединении участвует и всё
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #111 - 23. Сентября 2014 :: 09:47
Печать  
pavel_tr писал(а) 23. Сентября 2014 :: 09:09:
Проблема в этой строке:
maxy3d писал(а) 23. Сентября 2014 :: 08:13:
left join $РегистрОстатки.Камни as РегК (nolock) on РегК.Заказ = Рег.Партия

"Заказ" - измерение регистра, хранится в каком-то поле таблицы БД. Т.к. это не виртуальная таблица, название измерения должно быть обработано метапарсером, т.е. надо писать так:
left join $РегистрОстатки.Камни as РегК (nolock) on $РегК.Заказ = Рег.Партия
Рег оставляем как есть т.к. этот алиас относится к виртуальной таблице, внутри которой названия столбов приводятся к тем, которые заданы в конфигураторы.
Ошибка по невнимательности

Ну и не понятно зачем вообще нужна таблица РегК - она только в левом соединении участвует и всё


Допустил ошибку в запросе написал:
Код
Выбрать все
|   Рег.МассаКОстаток as МассаК 


а должно быть
Код
Выбрать все
|   РегК.МассаКОстаток as МассаК 


Из регистра "Камни" мне нужно вытащить массу камня
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #112 - 24. Сентября 2014 :: 13:35
Печать  
Помогите, пожалуйста, создать аналог через прямой запрос:
Код
Выбрать все
	Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбКонПериода по ВыбКонПериода;
|Клиент	   = Регистр.Взаиморасщеты.Партия.Поставщик,Регистр.ПартииТоваров.Партия.Поставщик;
|Склад	    = Регистр.Взаиморасщеты.Магазин,Регистр.ПартииТоваров.Склад;
|Товар	    = Регистр.Взаиморасщеты.Товар,Регистр.ПартииТоваров.Товар;
|Вид		= Регистр.Взаиморасщеты.Товар.ВидИзделия,Регистр.ПартииТоваров.Товар.ВидИзделия;
|Акция			=
|Масса	    = Регистр.Взаиморасщеты.Масса,Регистр.ПартииТоваров.Масса;
|МассаБК	  = Регистр.Взаиморасщеты.МассаБК,Регистр.ПартииТоваров.МассаБК;
|Сумма	    = Регистр.Взаиморасщеты.Сумма,Регистр.ПартииТоваров.Сумма;
|Функция МБКОст    = КонОст(МассаБК);
|Функция МОст	= КонОст(Масса);
|Функция КОст	= КонОст(Сумма);
|Группировка Клиент без групп;
|Группировка Товар Упорядочить по Товар.Наименование без групп;
|"//}}ЗАПРОС
;

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

Если Акц.Выбран() = 1 Тогда
	ТекстЗапроса = ТекстЗапроса + "Условие(Акция = Акц);";
КонецЕсли;
Если Размер > 0 Тогда
	ТекстЗапроса = ТекстЗапроса + "Условие(число(сокрлп(Партия.Размер)) = число(сокрлп(Размер)));";
КонецЕсли;
Если БрилКол = 1 Тогда
	ТекстЗапроса = ТекстЗапроса + "Условие((число(сокрлп(Партия.БрилКол)) > 0)
|И (число(сокрлп(Партия.ЦвДрКол)) = 0));";
КонецЕсли;

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
	Возврат;
КонецЕсли; 


У меня возникает проблемма с Union all  двух таблиц регистров. Точнее я не знаю синтаксиса и не получается найти в гугле Печаль. Прошу помощи, натолкните на правильное написание. Меня интересует выборка с 2-х регистров с условиями... ну вообщем аналог приведенного выше запроса. Спасибо!
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #113 - 24. Сентября 2014 :: 14:15
Печать  
С union all всё просто - это перечисление обычных select-запросов через ключевое слово. Главное условие - соблюсти порядок и количество полей в выборке
Пример:
Код
Выбрать все
select
зап.id as [Элемент $Справочник],
зап.descr as Наименование
From (
Select
$ВидСправочника36.Такой-то + id as id,
descr as descr
From $Справочник.Такой-то

union all

Select
$ВидСправочника36.Такой-то2 + id as id,
descr as descr
From $Справочник.Такой-то2
) зап
Order by зап.descr 


В подзапросах порядок полей (id, descr) и тип значений в полях должны совпадать
Группировку данных, сортировку лучше делать уже в верхнем запросе (зап)
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #114 - 24. Сентября 2014 :: 14:26
Печать  
pavel_tr писал(а) 24. Сентября 2014 :: 14:15:
С union all всё просто - это перечисление обычных select-запросов через ключевое слово. Главное условие - соблюсти порядок и количество полей в выборке
Пример:
Код
Выбрать все
select
зап.id as [Элемент $Справочник],
зап.descr as Наименование
From (
Select
$ВидСправочника36.Такой-то + id as id,
descr as descr
From $Справочник.Такой-то

union all

Select
$ВидСправочника36.Такой-то2 + id as id,
descr as descr
From $Справочник.Такой-то2
) зап
Order by зап.descr 


В подзапросах порядок полей (id, descr) и тип значений в полях должны совпадать
Группировку данных, сортировку лучше делать уже в верхнем запросе (зап)


Так понимаю с регистрами аналогичная ситуация?
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #115 - 24. Сентября 2014 :: 14:33
Печать  
Да, это просто пример по синтаксису
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #116 - 25. Сентября 2014 :: 13:46
Печать  
Помогите, пожалуйста, в очередной раз.
Есть запрос:
Код
Выбрать все
	ТипЗ = Константа.Изделие;
					ТекстЗапроса = "		    
					|	Select
					|   	Рег.Магазин 	as Склад,
					|   	Рег.Товар 		as Товар,
					|   	$Номен.ВидИзделия as Вид,
					|   	$Номен.Тип		as Тип,
					|   	$Номен.ТипПФ	as ТипПФ,
					|   	Рег.Партия		as Партия,
					|   	$ПартЗ.Распродажа	as Акция,
					|   	$ПартЗ.ВидУчета	as Вуду,
					|   	$ПартЗ.Поставщик as	Клиент,
					|   	$ПартЗ.Фирма	as Фирмочка,
					|   	$ПартЗ.ВладелецТовара as ВладелецТовара,
					|   	$ПартЗ.Цвет	as Цвет,
					|   	$ПартЗ.Размер	as Размер,
					|   	$ПартЗ.БрилКол	as БрилКол,
					|   	$ПартЗ.ЦвДрКол	as ЦвДрКол,
					|   	$ПартЗ.ЖемчугКол as ЖемчугКол,
					|   	Рег.КоличествоОстаток as ШтОст,
					|   	Рег.МассаОстаток as МОст,
					|   	Рег.МассаБКОстаток as МБКОст,
					|   	Рег.СуммаПродажиОстаток as КПОст,
					|   	Рег.СуммаОстаток as КОст
					|	FROM
					|   	$РегистрОстатки.Взаиморасщеты(,,,,) as Рег
					|		left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар
					|		left join $Справочник.Партии as ПартЗ (nolock) on ПартЗ.id = Рег.Партия
					|Where
					|	Рег.КоличествоОстаток > 0
					|	AND $Номен.Тип = :ТипЗ
					|	/*УсловияСклад*/
					|	/*УсловияАкц*/
					|   /*УсловиеТипПФ*/
					|   /*УсловиеФирма*/
					|   /*УсловиеВыбКод*/
					|   /*УсловиеПоставщик*/
					|   /*УсловиеВид*/
					|   /*УсловиеКлиент*/
					|   /*УсловиеУчет*/
					|   /*УсловиеРазмер*/
					|   /*УсловиеБрилКол*/
					|   /*УсловиеЦвДрЦ*/
					|   /*УсловиеБриллДраг*/
					|   /*УсловиеЖемчуг*/
					|   /*УсловиеЦиркон*/
					|   /*УсловиеЦвет*/
					|group by
					|	  Рег.Магазин,$Номен.ВидИзделия,Рег.Товар,Рег.Партия
					|";

					Запрос = СоздатьОбъект("ODBCRecordSet"); 



В результате выдает по отладке:

Select
       Рег.Магазин      as Склад,
       Рег.Товар            as Товар,
       Номен.sp2188 as Вид,
       Номен.sp647            as Тип,
       Номен.sp221      as ТипПФ,
       Рег.Партия            as Партия,
       ПартЗ.sp10635      as Акция,
       ПартЗ.sp2914      as Вуду,
       ПартЗ.sp79 as      Клиент,
       ПартЗ.sp4000      as Фирмочка,
       ПартЗ.sp9604 as ВладелецТовара,
       ПартЗ.sp2702      as Цвет,
       ПартЗ.sp2555      as Размер,
       ПартЗ.sp2171      as БрилКол,
       ПартЗ.sp2168      as ЦвДрКол,
       ПартЗ.sp2174 as ЖемчугКол,
       Рег.КоличествоОстаток as ШтОст,
       Рег.МассаОстаток as МОст,
       Рег.МассаБКОстаток as МБКОст,
       Рег.СуммаПродажиОстаток as КПОст,
       Рег.СуммаОстаток as КОст
     FROM
       (
select
rg478_vt.sp2508 as ВидОперации,
rg478_vt.sp479 as Магазин,
rg478_vt.sp2104 as Товар,
rg478_vt.sp2105 as Партия,
rg478_vt.sp3998 as Клиент,
rg478_vt.sp9274 as ТипОплаты,
rg478_vt.sp2107 as КоличествоОстаток,
rg478_vt.sp894 as МассаОстаток,
rg478_vt.sp2106 as МассаБКОстаток,
rg478_vt.sp3996 as СуммаВходОстаток,
rg478_vt.sp482 as СуммаОстаток,
rg478_vt.sp2913 as СуммаПродажиОстаток
from rg478 as rg478_vt (nolock)
where rg478_vt.period={d '2014-09-01'}
and (
rg478_vt.sp2107 <> 0 or
rg478_vt.sp894 <> 0 or
rg478_vt.sp2106 <> 0 or
rg478_vt.sp3996 <> 0 or
rg478_vt.sp482 <> 0 or
rg478_vt.sp2913 <> 0
)
) as Рег
           left join sc58 as Номен (nolock) on Номен.id = Рег.Товар
           left join sc77 as ПартЗ (nolock) on ПартЗ.id = Рег.Партия
Where
     Рег.КоличествоОстаток > 0
     AND Номен.sp647 = '     1   '
     AND Рег.Магазин = '     2   '
     /*УсловияАкц*/
  AND Номен.sp221 = '     2   '
  /*УсловиеФирма*/
  /*УсловиеВыбКод*/
  /*УсловиеПоставщик*/
  /*УсловиеВид*/
  /*УсловиеКлиент*/
  /*УсловиеУчет*/
  /*УсловиеРазмер*/
  /*УсловиеБрилКол*/
  /*УсловиеЦвДрЦ*/
  /*УсловиеБриллДраг*/
  /*УсловиеЖемчуг*/
  /*УсловиеЦиркон*/
  /*УсловиеЦвет*/
group by
       Рег.Магазин,Номен.sp2188,Рег.Товар,Рег.Партия

ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\#TEST\SQL\РЕАЛИЗАЦИЯДОХОД07.ERT(3044)}: State 42000, native 8120, message [Microsoft][ODBC SQL Server Driver][SQL Server]Столбец "sc58.SP647" недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.
Так понимаю, что оно ругается на какое-то поле, которое есть в выборке, но нет в группировке... Печаль
Как понять чего он хочет. Подскажите, Пожалуйста.
« Последняя редакция: 25. Сентября 2014 :: 14:50 - maxy3d »  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #117 - 25. Сентября 2014 :: 13:52
Печать  
Проблема заключается в группировках, если убрать группировки, тогда запрос работает, но как мне тогда дальше сделать выборку по группировкам типа:
Клиент -> Склад -> Документ -> Товар -> Партия
И это все крсиво вывести в печ. форму...? с итогами по каждой группировке.
Спасибо за помощь!
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #118 - 25. Сентября 2014 :: 14:32
Печать  
Прошу помощи в розшифровки синтаксиса "Gruop by"
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #119 - 25. Сентября 2014 :: 18:39
Печать  
Пожалуйста просвещайся: http://msdn.microsoft.com/ru-ru/library/ms177673%28v=sql.90%29.aspx
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 6 7 [8] 9 10 11
ОтправитьПечать