|
v7: Прямой запрос. Сравнение позиций документа. | ☑ | ||
---|---|---|---|---|
0
art_id
06.05.13
✎
14:29
|
Добрый день. Хочу вот такой код добавить в прямой запрос
Если ПустоеЗначение(ДокументОснование) = 0 Тогда Если ДокументОснование.ПолучитьПозицию() > ТаблицаЗадолженностиПоВозвратам.РасчДокумент.ПолучитьПозицию() Тогда Продолжить; КонецЕсли; КонецЕсли; вот сам запрос ТекстЗапроса = " |SELECT РасчетыСПокупателямиОстатки.Контрагент [Контрагент $Справочник.Контрагенты] | , РасчетыСПокупателямиОстатки.Договор [Договор $Справочник.Договоры] | , РасчетыСПокупателямиОстатки.РасчДокумент [РасчДокумент $Документ] | , РасчетыСПокупателямиОстатки.ВидРасчетов [ВидРасчетов $Перечисление.ВидыРасчетовСПокупателями] | , РасчетыСПокупателямиОстатки.СтавкаНДС [СтавкаНДС $Справочник.СтавкиНДС] | , РасчетыСПокупателямиОстатки.СтавкаНП [СтавкаНП $Справочник.СтавкиНП] | , РасчетыСПокупателямиОстатки.ДолгОстаток Долг | , РасчетыСПокупателямиОстатки.ДолгВалОстаток ДолгВал | , РасчетыСПокупателямиОстатки.НПОстаток НП | , РасчетыСПокупателямиОстатки.СебестоимостьОстаток Себестоимость |FROM $РегистрОстатки.РасчетыСПокупателями( | , | INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON РасчДокумент = Журнал.IDDOC, | (Контрагент = :Контрагент) AND (Договор = :Договор) | " + ?(ПустоеЗначение(ДокОснование) = 0, " AND (Журнал.DATE_TIME_IDDOC >= :ДокОснование)","") + ", | , | ) AS РасчетыСПокупателямиОстатки |WHERE | (РасчетыСПокупателямиОстатки.ДолгОстаток < 0) |ORDER BY | РасчетыСПокупателямиОстатки.РасчДокумент |"; Запрос.УстановитьТекстовыйПараметр("Контрагент", Контрагент); Запрос.УстановитьТекстовыйПараметр("Договор", Договор); Запрос.УстановитьТекстовыйПараметр("ДокОснование", ДокОснование.ПолучитьПозицию()); но результат выдается пустой, можно ли и как добавить условие по позиции документа? |
|||
1
ЧеловекДуши
06.05.13
✎
14:41
|
Да можно, вот так это делается...
Мета=СоздатьОбъект("MetaDataWork"); ЗапросSQL = глУстановитьНаборЗаписей(); //ЗапросSQL.Отладка(1); //После закоментировать! НачДата = ВыбНачПериода; КонДата = ВыбКонПериода; Если ПустоеЗначение(НачДок)=0 Тогда НачДата=Мета.ПолучитьДатуВремяИдДок(СформироватьПозициюДокумента(НачДок,0)); //Иначе // НачДата=СформироватьПозициюДокумента(НачДата,0,0,0,0); КонецЕсли; Если ПустоеЗначение(КонДок)=0 Тогда КонДата=СформироватьПозициюДокумента(КонДок,1) //Мета.ПолучитьДатуВремяИдДок( //Иначе // КонДата=СформироватьПозициюДокумента(КонДата,0,0,0,0); КонецЕсли; ЗапросSQL.УстановитьТекстовыйПараметр("ВыбДатаОтгрузкиН",НачДата); ЗапросSQL.УстановитьТекстовыйПараметр("ВыбДатаОтгрузкиК",КонДата); А вот сам запрос ТекстЗапроса=" |SELECT "+ДопРекв+" | "+?(ПустоеЗначение(ДопРекв)=1,"",",")+"Sum(ОстТМЦ.КоличествоПриход) [ПрихНетто $Число] | ,Sum(ОстТМЦ.КоличествоБруттоПриход) [ПрихБрутто $Число] | ,Sum(ОстТМЦ.КоличествоРасход) [РасхНетто $Число] | ,Sum(ОстТМЦ.КоличествоБруттоРасход) [РасхБрутто $Число] |FROM $РегистрОбороты.ОстаткиТМЦ(:ВыбДатаОтгрузкиН,:ВыбДатаОтгрузкиК~,Документ,,"; ТекстЗапроса=ТекстЗапроса+ДопУсловия+" | ,(Фирма,Склад,Номенклатура,ТипУпаковки,НомерУпаковки),(Количество,КоличествоБрутто)) AS ОстТМЦ"; Если ПустоеЗначение(ДопГрупп)=0 Тогда ТекстЗапроса=ТекстЗапроса+" |Group By "+ДопГрупп+" |HAVING (Sum(ОстТМЦ.КоличествоПриход)<>0) or (Sum(ОстТМЦ.КоличествоБруттоПриход)<>0) or | (Sum(ОстТМЦ.КоличествоРасход)<>0) or (Sum(ОстТМЦ.КоличествоБруттоРасход)<>0) "; КонецЕсли; |
|||
2
ЧеловекДуши
06.05.13
✎
14:42
|
+ По остаткам...
Начало... ТекстЗапроса=" |SELECT "+ДопРекв+" | "+?(ПустоеЗначение(ДопРекв)=1,"",",")+"Sum(ОстТМЦ.КоличествоОстаток) [НачНетто $Число] | ,Sum(ОстТМЦ.КоличествоБруттоОстаток) [НачБрутто $Число] | ,Sum(0) [КонНетто $Число] | ,Sum(0) [КонБрутто $Число] |FROM $РегистрОстатки.ОстаткиТМЦ(:ВыбДатаОтгрузкиН,,"; ТекстЗапроса=ТекстЗапроса+ДопУсловия+" | ,(Фирма,Склад,Номенклатура,ТипУпаковки,НомерУпаковки),(Количество,КоличествоБрутто)) AS ОстТМЦ"; Если ПустоеЗначение(ДопГрупп)=0 Тогда ТекстЗапроса=ТекстЗапроса+" |Group By "+ДопГрупп+" |HAVING (Sum(ОстТМЦ.КоличествоОстаток)<>0) or (Sum(ОстТМЦ.КоличествоБруттоОстаток)<>0)"; КонецЕсли; Конец.... ТекстЗапроса=" |SELECT "+ДопРекв+" | "+?(ПустоеЗначение(ДопРекв)=1,"",",")+"Sum(0) [НачНетто $Число] | ,Sum(0) [НачБрутто $Число] | ,Sum(ОстТМЦ.КоличествоОстаток) [КонНетто $Число] | ,Sum(ОстТМЦ.КоличествоБруттоОстаток) [КонБрутто $Число] |FROM $РегистрОстатки.ОстаткиТМЦ(:ВыбДатаОтгрузкиК~,,"; ТекстЗапроса=ТекстЗапроса+ДопУсловия+" | ,(Фирма,Склад,Номенклатура,ТипУпаковки,НомерУпаковки),(Количество,КоличествоБрутто)) AS ОстТМЦ"; Если ПустоеЗначение(ДопГрупп)=0 Тогда ТекстЗапроса=ТекстЗапроса+" |Group By "+ДопГрупп+" |HAVING (Sum(ОстТМЦ.КоличествоОстаток)<>0) or (Sum(ОстТМЦ.КоличествоБруттоОстаток)<>0)"; КонецЕсли; |
|||
3
trad
06.05.13
✎
14:43
|
Два момента:
right(РасчДокумент,9) :ДокОснование~ и текст такой: ТекстЗапроса = " |SELECT РасчетыСПокупателямиОстатки.Контрагент [Контрагент $Справочник.Контрагенты] | , РасчетыСПокупателямиОстатки.Договор [Договор $Справочник.Договоры] | , РасчетыСПокупателямиОстатки.РасчДокумент [РасчДокумент $Документ] | , РасчетыСПокупателямиОстатки.ВидРасчетов [ВидРасчетов $Перечисление.ВидыРасчетовСПокупателями] | , РасчетыСПокупателямиОстатки.СтавкаНДС [СтавкаНДС $Справочник.СтавкиНДС] | , РасчетыСПокупателямиОстатки.СтавкаНП [СтавкаНП $Справочник.СтавкиНП] | , РасчетыСПокупателямиОстатки.ДолгОстаток Долг | , РасчетыСПокупателямиОстатки.ДолгВалОстаток ДолгВал | , РасчетыСПокупателямиОстатки.НПОстаток НП | , РасчетыСПокупателямиОстатки.СебестоимостьОстаток Себестоимость |FROM $РегистрОстатки.РасчетыСПокупателями( | , | INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON right(РасчДокумент,9) = Журнал.IDDOC, | (Контрагент = :Контрагент) AND (Договор = :Договор) | " + ?(ПустоеЗначение(ДокОснование) = 0, " AND (Журнал.DATE_TIME_IDDOC >= :ДокОснование~)","") + ", | , | ) AS РасчетыСПокупателямиОстатки |WHERE | (РасчетыСПокупателямиОстатки.ДолгОстаток < 0) |ORDER BY | РасчетыСПокупателямиОстатки.РасчДокумент |"; Запрос.УстановитьТекстовыйПараметр("Контрагент", Контрагент); Запрос.УстановитьТекстовыйПараметр("Договор", Договор); Запрос.УстановитьТекстовыйПараметр("ДокОснование", ДокОснование.ПолучитьПозицию()); |
|||
4
ЧеловекДуши
06.05.13
✎
14:43
|
+ НачДок и КонДок - это реквизиты типа документ :)
|
|||
5
ЧеловекДуши
06.05.13
✎
14:44
|
(3) 1С++ с начальной датой и конечной, работает по разному, если ты заметил :)
|
|||
6
ЧеловекДуши
06.05.13
✎
14:46
|
(3) Я надеюсь ты уловил разность получении позиции от твоего и моего :)
При этом начало не равно концу :) |
|||
7
ЧеловекДуши
06.05.13
✎
14:48
|
(5) (6) -> (0) :)
|
|||
8
art_id
06.05.13
✎
15:02
|
(3)спасибо, работает вроде, сейчас проверяю
(6)не понял почему по разному необходимо получать позиции на начало и конец |
|||
9
ЧеловекДуши
06.05.13
✎
15:08
|
(8) Сам не знаю, но методом тыка пришел к этому выводу :)
|
|||
10
trad
06.05.13
✎
15:09
|
(8) и еще, на всякий случай, такая связка:
:ДокОснование~ Запрос.УстановитьТекстовыйПараметр("ДокОснование", ДокОснование.ПолучитьПозицию()); равносильна такой: :ДокОснование~~~~ Запрос.УстановитьТекстовыйПараметр("ДокОснование", ДокОснование); |
|||
11
art_id
06.05.13
✎
15:12
|
(10)спасибо, не знал
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |