Имя: Пароль:
1C
1C 7.7
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)спасибо, не знал