Переключение на Главную Страницу Страницы: 1 ... 34 35 [36] 37 38 ... 51 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" - обсуждения. Часть № 2. (число прочтений - 245558 )
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #525 - 16. Апреля 2013 :: 14:09
Печать  
замени case на isnull или coalesce
+ воткни в соединение с журналом and iddocdef in ($ВидДокумента.НужныйВид1,$ВидДокумента.НужныйВид2)

+ выкини Контрагент из строки с измерениями ВТ - ты его нигде не используешь потом.
  
Наверх
 
IP записан
 
undo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #526 - 16. Апреля 2013 :: 17:26
Печать  
Спасибо за помощь в результате получилось вот так
[code]            "ВЫБРАТЬ
           |      Доходы.ДокументОтгрузки      КАК [ДокументОтгрузки $Документ]
           |,      Доходы.СуммаОстаток [Доходы.СуммаОстаток :Число.15.2]
           |,      $Жур.ДатаДокумента            КАК [ДокДата $Дата]
           |,      COALESCE($ДокРеал.ТТочка,$ДокКорр.ТТочка) КАК [ТТочка $Справочник.ТорговыеTочки]
           |,      COALESCE($ДокРеал.Агент,$ДокКорр.Агент) КАК [Агент $Справочник.Сотрудники]
           | ИЗ $РегистрОстатки.Взаиморасчеты(:КонПериода,
           |                  (
           |                  Контрагент = :Покупатель и
           |                  ВидДолга = :ВидДолга
           |                  ),
           |                  (ДокументОтгрузки),(Сумма)) КАК Доходы
           |Внутреннее соединение ЖурналДокументов КАК Жур
           | ПО Жур.IDDOC = Сред(Доходы.ДокументОтгрузки,5,9) "+?(СпПараметры.Получить("Клиент").РасчетКредиторки=0," и Жур.Направление = :Направление","")+" и $Жур.ВидДокумента в (:ВидДокумента.РасходнаяНакладная,:ВидДокумента.ВводДолжников)
           |ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК ДокРеал
           |      ПО ДокРеал.IDDOC = Жур.IDDOC
           |ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВводДолжников КАК ДокКорр
           |      ПО ДокКорр.IDDOC = Жур.IDDOC
           |ГДЕ
           |      Доходы.СуммаОстаток<>0
           |Упорядочить
           |      $Жур.ДатаДокумента
           |";
[/code] Изменений в скорости сильно не заметил, но универсальность выросла в разы.
  
Наверх
ICQ  
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #527 - 17. Апреля 2013 :: 06:15
Печать  
Есть запрос

     |ВЫБРАТЬ
     |   РегДолги.КредДокумент Докум
     |      ,РегДолги.СуммаУпрОстаток Просрочка
     |      ,$Журнал.Договор Договор
     |      ,$Журнал.ТекущийДокумент ТекДок
     |      ,$Журнал.ДатаДокумента ДатаЛок
     |      ,$Журнал.НомерДокумента Номер
     |      ИЗ
     |      $РегистрОстатки.Покупатели(:ДатаОстатков,(ТП = :ТП),(КредДокумент),,) КАК РегДолги
     |      ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Журнал
     |      ПО Журнал.IDDOC = Право(РегДолги.КредДокумент,9)

КредДокумент = это может быть и реализация, и выписка, и ПКО и многое другое, но всегда есть реквизит Договор. ТиС 9.2 вобщем.

1.Как в этом запросе получить дополнительно значение реквизита "договор" из "кредДокумент"?
2.      |      ПО Журнал.IDDOC = Право(РегДолги.КредДокумент,9) - вот это условие сам наваял, почему-то РегДолги.КредДокумент возвращает ID документа но слева добавляет 13 с пробелом? 



  
Наверх
 
IP записан
 
undo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #528 - 17. Апреля 2013 :: 07:59
Печать  
В примере выше я как раз и присоединяю через Левое соединение документы что бы оттуда получить значение реквизита торговая точка и агент, но все равно придется туда описывать все типы документов которые у тебя там могут быть., а разве с Тис в регистре покупатели нет реквизита договор?
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #529 - 17. Апреля 2013 :: 09:17
Печать  
undo писал(а) 17. Апреля 2013 :: 07:59:
В примере выше я как раз и присоединяю через Левое соединение документы что бы оттуда получить значение реквизита торговая точка и агент, но все равно придется туда описывать все типы документов которые у тебя там могут быть., а разве с Тис в регистре покупатели нет реквизита договор?

В стандартной ТиС нет регистра "Долги", так что, видимо, это "что-то свое"
  
Наверх
ICQ  
IP записан
 
undo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #530 - 17. Апреля 2013 :: 11:36
Печать  
Salimbek писал(а) 17. Апреля 2013 :: 09:17:
undo писал(а) 17. Апреля 2013 :: 07:59:
В примере выше я как раз и присоединяю через Левое соединение документы что бы оттуда получить значение реквизита торговая точка и агент, но все равно придется туда описывать все типы документов которые у тебя там могут быть., а разве с Тис в регистре покупатели нет реквизита договор?

В стандартной ТиС нет регистра "Долги", так что, видимо, это "что-то свое"

Так я не про регистр Долги, а про схему получения данных.
  
Наверх
ICQ  
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #531 - 17. Апреля 2013 :: 12:14
Печать  
Ребята! Вы чего! Какой регистр Долги? Там же запрос к регистру "Покупатели".
На счет договора в регистре это ты верно подметил, но это пример я привел, контрагента нет в регистре, хочу контрагента вытянуть из документа. Сам принцип интересует!
  
Наверх
 
IP записан
 
undo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #532 - 17. Апреля 2013 :: 12:41
Печать  
[code]      СпВидов = СоздатьОбъект("СписокЗначений");
     СпВидов.ДобавитьЗначение("Вид1");
     СпВидов.ДобавитьЗначение("Вид2");
     СпВидов.ДобавитьЗначение("Вид3");
     СпВидов.ДобавитьЗначение("Вид4");
     
     СтрДоговора = "";
     СтрСоединения = "";
     
     Для сч из СпВидов.РазмерСписка() цикл
           СтрДоговора = СтрДоговора+?(СтрДоговора="","",",")+"$Док"+Сч+".Договор";
           
           СтрСоединения = СтрСоединения+"
           |ЛЕВОЕ СОЕДИНЕНИЕ Документ."+СпВидов.ПолучитьЗначение(сч)+" КАК Док"+СЧ+"
           |      ПО Док"+СЧ+".IDDOC = Жур.IDDOC";
     КонецЦикла;
     
     
     |ВЫБРАТЬ
     |   РегДолги.КредДокумент Докум
     |      ,РегДолги.СуммаУпрОстаток Просрочка
     |      ,$Журнал.Договор Договор
     |      ,$Журнал.ТекущийДокумент ТекДок
     |      ,$Журнал.ДатаДокумента ДатаЛок
     |      ,$Журнал.НомерДокумента Номер
     |,      COALESCE("+СтрДоговора+") КАК [Договор $Справочник.Договора]
     |      ИЗ
     |      $РегистрОстатки.Покупатели(:ДатаОстатков,(ТП = :ТП),(КредДокумент),,) КАК РегДолги
     |      ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Журнал
     |      ПО Журнал.IDDOC = Сред(Доходы.ДокументОтгрузки,5,9)
     |"+СтрСоединения+"
     |;
     
[/code]

Конечно не проверял но примерно выглядит вот так.
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #533 - 17. Апреля 2013 :: 13:23
Печать  
temrmal писал(а) 17. Апреля 2013 :: 12:14:
Ребята! Вы чего! Какой регистр Долги? Там же запрос к регистру "Покупатели".
На счет договора в регистре это ты верно подметил, но это пример я привел, контрагента нет в регистре, хочу контрагента вытянуть из документа. Сам принцип интересует!


Договор откуда ? С КредДока ?
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #534 - 17. Апреля 2013 :: 18:12
Печать  
Ну да! Вообщем кредДок = это измерение регистра типа "Документ". Как получить доступ к реквизитам документа. Хотя бы общим для всех документов данного регистра (Контрагент, договор и тд.)
  
Наверх
 
IP записан
 
undo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #535 - 17. Апреля 2013 :: 18:20
Печать  
[quote author=undo link=1285352210/525#532 date=1366202495][code]      СпВидов = СоздатьОбъект("СписокЗначений");
     СпВидов.ДобавитьЗначение("Вид1");
     СпВидов.ДобавитьЗначение("Вид2");
     СпВидов.ДобавитьЗначение("Вид3");
     СпВидов.ДобавитьЗначение("Вид4");
     
     СтрДоговора = "";
     СтрСоединения = "";
     
     Для сч из СпВидов.РазмерСписка() цикл
           СтрДоговора = СтрДоговора+?(СтрДоговора="","",",")+"$Док"+Сч+".Договор";
           
           СтрСоединения = СтрСоединения+"
           |ЛЕВОЕ СОЕДИНЕНИЕ Документ."+СпВидов.ПолучитьЗначение(сч)+" КАК Док"+СЧ+"
           |      ПО Док"+СЧ+".IDDOC = Жур.IDDOC";
     КонецЦикла;
     
     
     |ВЫБРАТЬ
     |   РегДолги.КредДокумент Докум
     |      ,РегДолги.СуммаУпрОстаток Просрочка
     |      ,$Журнал.Договор Договор
     |      ,$Журнал.ТекущийДокумент ТекДок
     |      ,$Журнал.ДатаДокумента ДатаЛок
     |      ,$Журнал.НомерДокумента Номер
     |,      COALESCE("+СтрДоговора+") КАК [Договор $Справочник.Договора]
     |      ИЗ
     |      $РегистрОстатки.Покупатели(:ДатаОстатков,(ТП = :ТП),(КредДокумент),,) КАК РегДолги
     |      ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Журнал
     |      ПО Журнал.IDDOC = Сред(Доходы.ДокументОтгрузки,5,9)
     |"+СтрСоединения+"
     |;
     
[/code]

Конечно не проверял но примерно выглядит вот так.[/quote]
Специально для тебя повторяю. Это для тебя написано!!!!!!!!!!!!!
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #536 - 17. Апреля 2013 :: 18:20
Печать  
temrmal писал(а) 17. Апреля 2013 :: 12:14:
Ребята! Вы чего! Какой регистр Долги? Там же запрос к регистру "Покупатели".
На счет договора в регистре это ты верно подметил, но это пример я привел, контрагента нет в регистре, хочу контрагента вытянуть из документа. Сам принцип интересует!


Угу, сорри, не очень тщательно посмотрел.

Сам принцип можно разделить на 2 части:
1. Прицип "Вообще" - надо понимать, что у тебя есть где-то поле, хранящее ссылку куда-то в другое место. Соотвественно, если хочется полуить поле из этого "другого" места, надо эти две таблички соединить.
2. Теперь "в частности", если хочется получить Контрагента, то более эффективный способ - это из таблицы оборотов Регистра получить Договора, а по ним уже получить Владельца (это и будет искомый Контрагент). Это много проще, чем строить кучу соединений с документами разных видов, и получать затем оттуда Контрагентов.
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #537 - 17. Апреля 2013 :: 18:53
Печать  
temrmal писал(а) 17. Апреля 2013 :: 06:15:
, почему-то РегДолги.КредДокумент возвращает ID документа но слева добавляет 13 с пробелом?  


КредДокумент - измерение стипом <Документ> без вида, хранится как строка 13: вид документа(iddocdef) 4 символа + iddoc (9 символов)


  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #538 - 23. Апреля 2013 :: 05:12
Печать  
Подскажите, а как из ВТ по оборотам получить реквизиты регистра? Мне нужно по ним условие поставить.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #539 - 23. Апреля 2013 :: 05:15
Печать  
Asakra писал(а) 23. Апреля 2013 :: 05:12:
Подскажите, а как из ВТ по оборотам получить реквизиты регистра? Мне нужно по ним условие поставить.

Никак.
Только соединением с самой табличкой движения регистра, либо писать запрос руктями к табличке движений регистра, без ВТ
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 34 35 [36] 37 38 ... 51
ОтправитьПечать