Переключение на Главную Страницу Страницы: 1 ... 10 11 [12] 13 14 ... 51 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" - обсуждения. Часть № 2. (число прочтений - 245624 )
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #165 - 12. Мая 2011 :: 12:13
Печать  
Если делаешь по периодам то необходимо соединение не только по измерениям но и по периодам. Тем более ты делаешь дополнение.

Я в подробности не вдавался, но почему нельзя сделать запросы без соединения а через объединение? Или я не в тему?
  

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



Сообщений: 37
Зарегистрирован: 22. Октября 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #166 - 12. Мая 2011 :: 16:10
Печать  
vandalsvq писал(а) 12. Мая 2011 :: 12:13:
но почему нельзя сделать запросы без соединения а через объединение?

Вот у меня тот же вопрос возник

ziflex писал(а) 12. Мая 2011 :: 03:15:
P.s. уточню еще раз - если делать запрос только по ОстаткиТМЦ, то результат правильный...

Это потому, что виртуальная таблица делает группировку по выбранным измерениям и правильно суммирует числовые показатели. Для добавления резервов нужно делать объединение запросов (UNION ALL или ОБЪЕДИНИТЬ) и группировку по всем нужным полям (Номенклатура, НачалоПериода и тд)
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #167 - 13. Мая 2011 :: 02:27
Печать  
Если использовать объединение, то как мне в запросе создать пустое поле для разделения поля КонечныйОстаток на Остаток и Резерв ? Насколько помню из запросов в 8ке, там подставлялся 0. Здесь чтото так не получается.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #168 - 13. Мая 2011 :: 02:37
Печать  
А так разве нельзя?
Код
Выбрать все
ВЫБРАТЬ
    ОстаткиТМЦ.СуммаКонечныйОстаток КАК СуммаКонОстатокОстаткиТМЦ,
    0 КАК СуммаКонОстатокРезервТМЦ
ИЗ ОстаткиТМЦ
ОБЪЕДИНИТЬ
ВЫБРАТЬ
    0,
    РезервТМЦ.СуммаКонечныйОстаток
ИЗ РезервТМЦ 

  

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


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #169 - 13. Мая 2011 :: 04:52
Печать  
с синтаксисом была трабла Улыбка
о. почти получилось. только все равно по количеству строк различается (до группировки) после группировки соответственно суммы не сходятся .

Вот такой запрос пытаюсь произвести:

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

	|Условие(Число(НоменклатураКод)<>0000);
	|Условие(Склад в ВыбСклад); 



Пока получилось вот так:
Код
Выбрать все
"
	|ВЫБРАТЬ
	|  Подзапрос.НачалоПериода КАК [День $Дата]
	|, Подзапрос.Номенклатура [Номенклатура $Справочник.Номенклатура]
	|, Подзапрос.Склад [Склад $Справочник.Склады]
	|, Подзапрос.Приход КАК Приход
	|, Подзапрос.Остаток КАК Остаток
	|, Подзапрос.Резерв КАК Резерв
	|, Номенклатура.КлассификаторТоваров [КлассификаторТоваров $Справочник.КлассификаторТоваров]
	|, Номенклатура.CODE КАК Код
	|, Артикулы.Контрагент [Артикул $Справочник.Контрагенты]
	|ИЗ
	|	(ВЫБРАТЬ ОстаткиТМЦОстаткиОбороты.НачалоПериода
	|	, ОстаткиТМЦОстаткиОбороты.Номенклатура
	|	, ОстаткиТМЦОстаткиОбороты.Склад
	|	, ОстаткиТМЦОстаткиОбороты.КоличествоПриход КАК Приход
	|	, ОстаткиТМЦОстаткиОбороты.КоличествоКонечныйОстаток КАК Остаток
	|	, 0 КАК Резерв
	|	ИЗ
	|		$РегистрОстаткиОбороты.ОстаткиТМЦ(:НачПериода,:КонПериода,День ДОПОЛНЕНИЕ,,((Номенклатура <> :Серт) и (Склад = :БазовыйСклад)),,,) КАК ОстаткиТМЦОстаткиОбороты
	|
	|ОБЪЕДИНИТЬ
	|
	|	ВЫБРАТЬ РезервыТМЦОстаткиОбороты.НачалоПериода
	|	, РезервыТМЦОстаткиОбороты.Номенклатура
	|	, РезервыТМЦОстаткиОбороты.Склад
	|	, 0
	|	, 0
	|	, РезервыТМЦОстаткиОбороты.КоличествоКонечныйОстаток
	|	ИЗ
	|		$РегистрОстаткиОбороты.РезервыТМЦ(:НачПериода,:КонПериода,День ДОПОЛНЕНИЕ,,((Номенклатура <> :Серт) и (Склад = :БазовыйСклад)),,,) КАК РезервыТМЦОстаткиОбороты) КАК Подзапрос
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	Справочник.Номенклатура AS Номенклатура ON Подзапрос.Номенклатура = Номенклатура.ID
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	Справочник.Артикулы AS Артикулы ON Номенклатура.Артикул = Артикулы.ID
	|УПОРЯДОЧИТЬ
	|	Артикулы.Контрагент УБЫВ
	|,	Подзапрос.Номенклатура УБЫВ
	|"; 


Группирую результат уже в индексированной таблице, чтобы можно было обходить по группировкам.


P.s. так что же получается, виртуальные таблицы нужно объединять а не соединять?

P.p.s. както странно работает "УПОРЯДОЧИТЬ" О_о
  
Наверх
 
IP записан
 
Uncle
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 93
Зарегистрирован: 26. Июля 2006
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #170 - 13. Мая 2011 :: 05:18
Печать  
А можно ли с помощью класса сделать что-то типа такого:
Код
Выбрать все
UPDATE Справочник.Номенклатура AS Ном SET $Ном.Артикул="" 

  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #171 - 13. Мая 2011 :: 09:53
Печать  
Упорядочивание работает не странно, а по внутреннему представлению Улыбка)))). Т.е. по id. Надо по наименованию делай еще одно соединение и указывай сортировку по наименованию.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #172 - 13. Мая 2011 :: 09:55
Печать  
Uncle писал(а) 13. Мая 2011 :: 05:18:
А можно ли с помощью класса сделать что-то типа такого:
Код
Выбрать все
UPDATE Справочник.Номенклатура AS Ном SET $Ном.Артикул="" 



В принципе можно. Другое дело что лучше использовать просто объект ODBCRecordset. А для DBF все равно через класс работать не будет. Да и вообще запись лучше делать средствами 1С Улыбка
  

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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #173 - 18. Мая 2011 :: 23:32
Печать  
Доброе утро. Чем (в случае DBF) можно заменить sql-тип данных binary?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #174 - 19. Мая 2011 :: 16:38
Печать  
В связи с тем что я наврядли уже допиши когда либо этот труд, как и мой тов. leshik  Подмигивание решил выложить его в том виде что счас...
И так "Использование языка запросов класса ПрямойЗапрос"
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #175 - 09. Июня 2011 :: 18:20
Печать  
Чего то тут реакция какая то никакая... Улыбка неужто все свалили в лоно "Прогресса" и 8-кописания? Улыбка))

Выпустил тут потенциально никому-не-нужное-кроме-меня обновление.
1.7.24 от 10.06.11 г.
- Добавлен новый метод «УстановитьАвтозамену». Метод предназначен для поиска и замены в конструкциях выражений вида «{ТекстПоиска}». Может быть использован для подстановки того или иного значения поля в зависимости от вида формата БД (SQL, DBF).
  

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


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #176 - 09. Июня 2011 :: 19:07
Печать  
vandalsvq писал(а) 19. Мая 2011 :: 16:38:
В связи с тем что я наврядли уже допиши когда либо этот труд, как и мой тов. leshik  Подмигивание решил выложить его в том виде что счас...
И так "Использование языка запросов класса ПрямойЗапрос"


лист 21 , 22

Цитата:
Следующий запрос выполнится без ошибки:
ВЫБРАТЬ
     $ДокСтроки.Товар КАК [Товар $Справочник.Номенклатура]
     ,СУММА($ДокСтроки.Количество) КАК [Количество $Число]
ИЗ
     ДокументСтроки.ПриходнаяНакладная КАК ДокСтроки $nolock
СГРУППИРОВАТЬ
     $ДокСтроки.Товар
А попытка выполнить данный запрос приведет к ошибке:
ВЫБРАТЬ
     $ДокСтроки.Товар КАК [Товар $Справочник.Номенклатура]
     ,$ДокСтроки.ЕдиницаИзмерения КАК [ЕдИзм $Справочник.ЕдиницыИзмерений]
     ,СУММА($ДокСтроки.Количество) КАК [Количество $Число]
ИЗ
     ДокументСтроки.ПриходнаяНакладная КАК ДокСтроки $nolock
СГРУППИРОВАТЬ
     $ДокСтроки.Товар
При указании группировки псевдоним поля указывать нельзя.


имхается мне что либо последня фраза не к этому примеру запроса или пример не к последней фразе
  
Наверх
wwwICQ  
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #177 - 10. Июня 2011 :: 03:20
Печать  
Доброго времени суток, уважаемые коллеги!

Снова столкнулся с небольшой проблемой в формировании запроса, прошу помочь Улыбка

Суть такова: необходимо запросом получить документы ПКО и СтрокаВыпискаПриход у которых одинаковое основание.
Одним запросом, к сожалению, не получилось добиться желаемого результата. Пришлось делать два запроса и результат закидывать в ИТЗ.
Попытка была такая:


Код
Выбрать все
	"
	|ВЫБРАТЬ
	|	Журнал.IDDOC КАК [Документ $Документ]
	|,	Журнал.IDDOCDEF КАК [Документ_вид $ВидДокумента]
	|,  Журнал.$ОбщийРеквизит.Агент КАК [Аген$Справочник.Агенты]
	|ИЗ
	|	ЖурналДокументов КАК Журнал $nolock
	|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|	Документ.ПКО КАК ПКО $nolock
	|ПО
	|	Журнал.IDDOC = ПКО.IDDOC
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	Документ.СтрокаВыпискиПриход КАК СтрокаВыпискиПриход $nolock
	|ПО
	|	Журнал.IDDOC = СтрокаВыпискиПриход.IDDOC
	|И
	|	ПКО.ДокОснование = СтрокаВыпискиПриход.ДокОснование
	|ГДЕ
	|	(Журнал.DATE МЕЖДУ :НачДата И :КонДата)
	|	И ((Журнал.CLOSED & 1) = 1)
	|	И (Журнал.$ОбщийРеквизит.Агент В (ВЫБРАТЬ val ИЗ #сзАгенты))
	|";
	 



Заранее благодарен.
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #178 - 14. Июня 2011 :: 12:32
Печать  
А почему бы не сделать 2 подзапроса? В одном выбираем ПКО и его документ-основание, во втором - СтрокаВыпискаПриход и его документ-основание. А условие соединения 2-х подзапросов и будет одинаковость документа-основания!
Типа такого:
Код
Выбрать все
|ВЫБРАТЬ
|	Ордер.Документ
|,	Банк.Документ
|ИЗ
|(
|ВЫБРАТЬ
|	$Ж.ТекущийДокумент КАК [Документ $Документ]
|,	$Ж.ВидДокумента КАК [Документ_вид $ВидДокумента]
|,	ПКО.ДокОснование КАК ДокументОснование
|,          Ж.$ОбщийРеквизит.Агент КАК [Аген$Справочник.Агенты]
|ИЗ
|	ЖурналДокументов КАК Ж $NOLOCK
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|	Документ.ПКО КАК ПКО $NOLOCK ПО $Ж.ТекущийДокумент = $ПКО.ТекущийДокумент
|ГДЕ
|	$Ж.ДатаДокумента BETWEEN :НачДата И :КонДата~ AND $Ж.Проведен = 1 AND Ж.$ОбщийРеквизит.Агент В (ВЫБРАТЬ val ИЗ #сзАгенты)
|) КАК Ордер
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|(
|ВЫБРАТЬ
|	$Ж.ТекущийДокумент КАК [Документ $Документ]
|,	$Ж.ВидДокумента КАК [Документ_вид $ВидДокумента]
|,	Банк.ДокОснование КАК ДокументОснование
|,          Ж.$ОбщийРеквизит.Агент КАК [Аген$Справочник.Агенты]
|ИЗ
|	ЖурналДокументов КАК Ж $NOLOCK
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|	Документ.СтрокаВыпискиПриход КАК Банк $NOLOCK ПО $Ж.ТекущийДокумент = $Банк.ТекущийДокумент
|ГДЕ
|	$Ж.ДатаДокумента BETWEEN :НачДата И :КонДата~ AND $Ж.Проведен = 1 AND Ж.$ОбщийРеквизит.Агент В (ВЫБРАТЬ val ИЗ #сзАгенты)
|) КАК Банк ПО Ордер.ДокументОснование = Банк.ДокументОснование
|";
 


Ну примерно так. Работоспособность текущего примера не проверял. Просто нацарапал мысль...  Улыбка
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #179 - 20. Июня 2011 :: 08:34
Печать  
Вопрос: в регистре занесена сумма 135.170
Запрос:
Код
Выбрать все
|SELECT
|	$Ж.ТекущийДокумент as [ТекДок $Документ.РКО]
|,	Подотчет.Контрагент as [Контрагент $Справочник.Контрагенты]
|,	Подотчет.Статья as [Статья $Справочник.Статьи]
|,	Подотчет.КредДокумент as [КредДокумент $Документ]
|,	Подотчет.СуммаПриход as СуммаПриход
|,	Подотчет.СуммаРасход as СуммаРасход
|FROM
|	,(Контрагент,Статья,КредДокумент),(Сумма)) AS Подотчет
|INNER JOIN
|	ЖурналДокументов as Ж $NOLOCK ON Ж.IDDOC = Подотчет.ТекущийДокумент
 


возвращает: 135.169999999999999....
Почему?
  

Bug.png ( 66 KB | Загрузки )
Bug.png
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 10 11 [12] 13 14 ... 51
ОтправитьПечать