|
v7: Помогите с прямым запросом. Не могу в параметры момент времени установить | ☑ | ||
---|---|---|---|---|
0
GalanEvgeny
30.01.13
✎
10:27
|
Пишу запрос где нужны остатки товаров на момент поведения документа, но никак не могу передать его в $РегистрОстатки.ОстаткиТоваров
"SELECT |$стрПереоценка.Товар as [Товар $Справочник.Номенклатура], |$стрПереоценка.Партия as [Партия $Справочник.Партии], |COALESCE($стрПереоценка.СтараяЦена,0) as СтараяЦена, |COALESCE($стрПереоценка.НоваяЦена,0) as НоваяЦена, |COALESCE($Рег.Стоимость,0) as Разница, |COALESCE(ОстаткиТоваровОстатки.ОстатокОстаток,0) as регКоличество, |COALESCE(ОстаткиТоваровОстатки.СтоимостьОстаток,0) as регСтоимость |FROM $ДокументСтроки.Переоценка as стрПереоценка |LEFT JOIN $Регистр.ОстаткиТоваров as Рег WITH (NOLOCK) ON Рег.IDDoc=стрПереоценка.IDDoc AND $Рег.Партия=$стрПереоценка.Партия |LEFT JOIN $РегистрОстатки.ОстаткиТоваров(:ДатаДок,, | (Партия IN (SELECT Val FROM #Партии)), | (Отдел, Партия),(Остаток,Стоимость)) AS ОстаткиТоваровОстатки | ON ОстаткиТоваровОстатки.Отдел=$Рег.Отдел AND ОстаткиТоваровОстатки.Партия=$Рег.Партия |WHERE стрПереоценка.IDDOC=:Докум |ORDER BY стрПереоценка.LINENO_ |
|||
1
GalanEvgeny
30.01.13
✎
10:28
|
Весь запрос:
//ПозДок = СформироватьПозициюДокумента(Докум.ТекущийДокумент()); ТекстЗапроса = "SELECT |$стрПереоценка.Товар as [Товар $Справочник.Номенклатура], |$стрПереоценка.Партия as [Партия $Справочник.Партии], |COALESCE($стрПереоценка.СтараяЦена,0) as СтараяЦена, |COALESCE($стрПереоценка.НоваяЦена,0) as НоваяЦена, |COALESCE($Рег.Стоимость,0) as Разница, |COALESCE(ОстаткиТоваровОстатки.ОстатокОстаток,0) as регКоличество, |COALESCE(ОстаткиТоваровОстатки.СтоимостьОстаток,0) as регСтоимость |FROM $ДокументСтроки.Переоценка as стрПереоценка |LEFT JOIN $Регистр.ОстаткиТоваров as Рег WITH (NOLOCK) ON Рег.IDDoc=стрПереоценка.IDDoc AND $Рег.Партия=$стрПереоценка.Партия |LEFT JOIN $РегистрОстатки.ОстаткиТоваров(:ДатаДок,, | (Партия IN (SELECT Val FROM #Партии)), | (Отдел, Партия),(Остаток,Стоимость)) AS ОстаткиТоваровОстатки | ON ОстаткиТоваровОстатки.Отдел=$Рег.Отдел AND ОстаткиТоваровОстатки.Партия=$Рег.Партия |WHERE стрПереоценка.IDDOC=:Докум |ORDER BY стрПереоценка.LINENO_ |"; БД.УстановитьТекстовыйПараметр ("Докум", Докум.ТекущийДокумент()); БД.УстановитьТекстовыйПараметр ("ДатаДок", Докум.ТекущийДокумент().ДатаДок); //БД.УстановитьТекстовыйПараметр ("ДатаДок", ПозДок); БД.УложитьСписокОбъектов(Партии, "#Партии"); ТЗ = БД.ВыполнитьИнструкцию(ТекстЗапроса); |
|||
2
Ёпрст
30.01.13
✎
10:29
|
какой-то бредовый запрос
|
|||
3
Ёпрст
30.01.13
✎
10:30
|
в части соединения таблички движений регистра по партии..
|
|||
4
Ёпрст
30.01.13
✎
10:30
|
ну и с останками, так же..
|
|||
5
Ёпрст
30.01.13
✎
10:31
|
Чего от этого запроса то хотел ?
Оно тебе точно надо ? |
|||
6
GalanEvgeny
30.01.13
✎
11:39
|
(5) Это для формирования акта переоценки.
Акт переоценки содержит остатки начальные(количество,сумма), обороты(переоценка), остатки конечные Работа запроса: берется документ переоценки(табл. часть), по каждой строке документа смотрится движение $Регистр.ОстаткиТоваров, и ищутся остатки после(до) проведения документа |
|||
7
Ёпрст
30.01.13
✎
11:42
|
(6) А вот и нет.
Твой запрос берет движения (с партиями) из регистра, которые ты ограничил фильтром и документом, а не только движения самого дока. |
|||
8
Ёпрст
30.01.13
✎
11:42
|
в общем, всё бы в топку.
|
|||
9
GalanEvgeny
30.01.13
✎
11:42
|
(3) соединить табл часть с движением можно по
LINENO_ + Отдел или Партия + Отдел. Это связано с тем, что 1 строка в табл части может образовать 2 движения по разным отделам. В документе стоит признак переоценивать всю партию(для всей организации) или для конкретной аптеки. |
|||
10
Ёпрст
30.01.13
✎
11:44
|
(9) у тябя вообще каша, а не запрос.
|
|||
11
Ёпрст
30.01.13
✎
11:45
|
ты берешь все движения с таблички движения регистра и фильтруешь их по партии.
Оно тебе надо ? Твои партии есть и в приходах и в реализациях и в перемещениях/списаниях и в возврате.. Ты их всех берешь, фирштейн ? |
|||
12
Ёпрст
30.01.13
✎
11:46
|
про табличку с останками, я промолчу - там аналогично..
|
|||
13
GalanEvgeny
30.01.13
✎
11:47
|
(7) Ограничение документом
WHERE стрПереоценка.IDDOC=:Докум и LEFT JOIN Рег.IDDoc=стрПереоценка.IDDoc дает ограничение по документу З.Ы, Да, можно явно указать ограничение документом А $Рег.Партия=$стрПереоценка.Партия позволяет взять все движения по строке(т.к. может быть 2, можно заменить на LINENO_) З.Ы, наверное так даже лучше будет |
|||
14
Mikeware
30.01.13
✎
11:47
|
зачем coalesce(), если есть isnull() ?
момент времени - см. доку, Если передан период времени (дата или позиция документа), остатки рассчитываются на начало периода. Для того чтобы рассчитать остатки на конец периода необходимо передавать момент времени. Для этого можно воспользоваться вторым модификатором типа Дата, что соответствует моменту времени конца этой даты. Для формирования моментов времени также можно воспользоваться позицией документа: процедурой СформироватьПозициюДокумента() синтаксис 1, указывая не нулевой ФлагСмещения; или СформироватьПозициюДокумента() синтаксис 2 |
|||
15
GalanEvgeny
30.01.13
✎
11:49
|
(11) Сам запрос составлен "корректно" за исключением замены связки табл чати документа с движением вместо партии можно заменить на LINENO_
Вопрос в том, что передать параметру ДатаДок, чтобы остатки формировались на момент времени документа |
|||
16
GalanEvgeny
30.01.13
✎
11:49
|
(14) привычка
|
|||
17
Ёпрст
30.01.13
✎
11:49
|
(13) :))))))))0
Еёпт.. еще раз, ты берешь все движения регистра с партиями = партии в тво1м документе. |
|||
18
Ёпрст
30.01.13
✎
11:50
|
Короче, бред в (0) написан
|
|||
19
GalanEvgeny
30.01.13
✎
11:52
|
(17) движения ограничены 1м документом так как написано условие
WHERE стрПереоценка.IDDOC=:Докум SQL сам в плане запроса подставит вместо Рег.IDDoc=стрПереоценка.IDDoc будет Рег.IDDoc=[Документ] |
|||
20
Ёпрст
30.01.13
✎
11:53
|
(19)Рег.IDDoc=стрПереоценка.IDDoc
да вот этого не увидел, но всё равно, в топку |
|||
21
GalanEvgeny
30.01.13
✎
11:55
|
(14) Правилбно ли понял что остатки можно сфлормировать только либо на начало дня либо на конец?
|
|||
22
Mikeware
30.01.13
✎
11:55
|
(21) СП украли?
|
|||
23
GalanEvgeny
30.01.13
✎
11:56
|
(14) Позицию документа получаетсмя достать, этот код закомментирован (см. выше), но его нельзя передавать так как выходит ошибка несоответствия типа даты и строки
|
|||
24
GalanEvgeny
30.01.13
✎
11:57
|
(22) НЕ понял?
|
|||
25
DCKiller
30.01.13
✎
11:59
|
||||
26
Ёпрст
30.01.13
✎
12:01
|
(22) через сформироватьПозицию пихай в текст запроса, только надо предыдущую пихать, если не хочешь учитывать движения самого дока.
|
|||
27
GalanEvgeny
30.01.13
✎
12:08
|
Работает.
З.Ы.: не понятно почему этот вариант раньше не работал, решение было в за комментированных строках кода. ???? ПозДок = СформироватьПозициюДокумента(Докум.ТекущийДокумент()); ТекстЗапроса = "SELECT |$Рег.Отдел as [Отдел $Справочник.МестаХранения], |$стрПереоценка.Товар as [Товар $Справочник.Номенклатура], |$стрПереоценка.Партия as [Партия $Справочник.Партии], |COALESCE($стрПереоценка.СтараяЦена,0) as СтараяЦена, |COALESCE($стрПереоценка.НоваяЦена,0) as НоваяЦена, |COALESCE($Рег.Стоимость,0) as Разница, |COALESCE(ОстаткиТоваровОстатки.ОстатокОстаток,0) as регКоличество, |COALESCE(ОстаткиТоваровОстатки.СтоимостьОстаток,0) as регСтоимость |FROM $ДокументСтроки.Переоценка as стрПереоценка |LEFT JOIN $Регистр.ОстаткиТоваров as Рег WITH (NOLOCK) ON Рег.IDDoc=стрПереоценка.IDDoc AND Рег.LINENO_=стрПереоценка.LINENO_ |LEFT JOIN $РегистрОстатки.ОстаткиТоваров(:ДатаДок~,, | (Партия IN (SELECT Val FROM #Партии)), | (Отдел, Партия),(Остаток,Стоимость)) AS ОстаткиТоваровОстатки | ON ОстаткиТоваровОстатки.Отдел=$Рег.Отдел AND ОстаткиТоваровОстатки.Партия=$Рег.Партия |WHERE стрПереоценка.IDDOC=:Докум |ORDER BY $Рег.Отдел,стрПереоценка.LINENO_ |"; БД.УстановитьТекстовыйПараметр ("Докум", Докум.ТекущийДокумент()); //БД.УстановитьТекстовыйПараметр ("ДатаДок", Докум.ТекущийДокумент().ДатаДок); БД.УстановитьТекстовыйПараметр ("ДатаДок", ПозДок); БД.УложитьСписокОбъектов(Партии, "#Партии"); ТЗ = БД.ВыполнитьИнструкцию(ТекстЗапроса); |
|||
28
GalanEvgeny
30.01.13
✎
12:08
|
Всем спасибо :)
|
|||
29
GalanEvgeny
30.01.13
✎
12:12
|
НЕ РАБОТАЕТ если заменить :ДатаДок~ на :ДатаДок~
|
|||
30
GalanEvgeny
30.01.13
✎
12:12
|
НЕ РАБОТАЕТ если заменить :ДатаДок~ на :ДатаДок
|
|||
31
Ёпрст
30.01.13
✎
12:12
|
(29) а оттличие то в чем между
:ДатаДок~ на :ДатаДок~ |
|||
32
Ёпрст
30.01.13
✎
12:13
|
(30) дык ,
http://www.1cpp.ru/docum/html/ODBC.html#id42 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |