Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема поможите достать Контрагента для разных документов (число прочтений - 2772 )
geschaft
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 28
Зарегистрирован: 15. Ноября 2006
поможите достать Контрагента для разных документов
05. Октября 2007 :: 08:44
Печать  
помогите пжл новичку

есть запрос по движениям регистра:

     | SELECT
     |        $rdPart.Фирма                                                          AS Фирма,
     |        $rdPart.Номенклатура                                  AS Номенклатура,
     |        $rdPart.ДопПризнак                                        AS ДопПризнак,
     |        $rdPart.КодОперации                                        AS КодОперации,
     |        $rdPart.Количество    * ( 1 - rdPart.DEBKRED * 2 ) AS Количество,
     |        $rdPart.СуммаРуб      * ( 1 - rdPart.DEBKRED * 2 ) AS Стоимость,
     |        $rdPart.ПродСтоимость * ( 1 - rdPart.DEBKRED * 2 )      AS Выручка,
     |        rdPart.IDDOC                                       AS [Документ $Документ],
     |        rdPart.IDDOCDEF                                    AS Документ_вид
     |       
     | FROM $Регистр.ПартииНаличие AS rdPart (nolock)
     | WHERE ( rdPart.DATE_TIME_IDDOC BETWEEN :ДатаС AND :ДатаПо~ )
     | AND   ( $rdPart.КодОперации IN ( SELECT Val FROM #КО ) )

сюда надо приджойнить контрагента и договор, документы могут быть 6 видов (реализация,поступление,возврат и т.п.)
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: поможите достать Контрагента для разных докуме
Ответ #1 - 05. Октября 2007 :: 10:39
Печать  
Если есть отбор по контрагентам, их можно вытащить из _1scrdoc. Если нет - из документов.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
geschaft
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 28
Зарегистрирован: 15. Ноября 2006
Re: поможите достать Контрагента для разных докуме
Ответ #2 - 05. Октября 2007 :: 10:59
Печать  
Обошолся такой конструкцией:       
       | SELECT
     |        $rdPart.Фирма                                                          AS Фирма,
       .....
     |        $rdPart.ПродСтоимость * ( 1 - rdPart.DEBKRED * 2 )      AS Выручка,
     |        rdPart.IDDOC                                       AS [Документ $Документ],
     |        rdPart.IDDOCDEF                                    AS Документ_вид,
     |        CASE WHEN $docV.Контрагент<>$ПустойИд THEN $docV.Контрагент
     |             WHEN $docR.Контрагент<>$ПустойИд THEN $docR.Контрагент      
     |             ELSE $ПустойИд
     |             END                                           AS [Контрагент $Справочник.Контрагенты]
     |       
     | FROM $Регистр.ПартииНаличие AS rdPart (nolock)
     | LEFT JOIN $Документ.Реализация AS docR ON docR.IDDOC=rdPart.IDDOC
     | LEFT JOIN $Документ.ВозвратОтПокупателя AS docV ON docV.IDDOC=rdPart.IDDOC
но она для известных видов, а решима ли задача для общего случая? т.е. когда вид документа заранее не известен...

     |             WHEN $docR.Контрагент<>$ПустойИд THEN $docR.Контрагент      
     |             ELSE $ПустойИд
     |             END                                           AS [Контрагент $Справочник.Контрагенты]
     | FROM $Регистр.ПартииНаличие AS rdPart (nolock)
     
но она для известных видов, а решима ли задача для общего случая? т.е. когда вид документа заранее не известен...

хе можно сплясать от
| SELECT DISTINCT rdPart.IDDOCDEF
| FROM $Регистр.ПартииНаличие AS rdPart (nolock)
и для каждой строки вручную сфабриковать LEFT JOIN... подозреваю чт это не самый опитимальный вариант.... А как думают гуру...
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: поможите достать Контрагента для разных докуме
Ответ #3 - 05. Октября 2007 :: 11:41
Печать  
geschaft писал(а) 05. Октября 2007 :: 10:59:
а решима ли задача для общего случая? т.е. когда вид документа заранее не известен...
т.е. когда вид документа заранее не известен...

Храни в регистре реквизит Клиент_по_документу ( тип справочник.Контрагенты )
и даже отбор по этому реквизиту можно включить ( если нужно )
  
Наверх
 
IP записан
 
geschaft
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 28
Зарегистрирован: 15. Ноября 2006
Re: поможите достать Контрагента для разных докуме
Ответ #4 - 05. Октября 2007 :: 12:03
Печать  
[/quote]
Храни в регистре реквизит Клиент_по_документу ( тип справочник.Контрагенты )
и даже отбор по этому реквизиту можно включить ( если нужно )
[/quote]
дак таким макаром можно весь документ в конце концов в регистр перетащить) не это не выход
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: поможите достать Контрагента для разных докуме
Ответ #5 - 05. Октября 2007 :: 12:28
Печать  
сначала прочти свой же subj "помогите достать контрагента" ( весь документ не надо )
Из твоего subj следует что для тебя контагент Главная информация и доставать ее надо часто и быстро исходя из этого и приведено решение.
прицип выигрываем в скорости проигрываем в объеме данным и наоборот
выигрываем в объеме проигрываем в скорости никто еще не отменял.
т.к. дисковое пространство сейчас практически ничего не стоит
и был предложен реквизит  регистра в качестве решения, а как делать решать тебе.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: поможите достать Контрагента для разных докуме
Ответ #6 - 05. Октября 2007 :: 13:32
Печать  
Сделай контрагента общим с отбором Улыбка
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
geschaft
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 28
Зарегистрирован: 15. Ноября 2006
Re: поможите достать Контрагента для разных докуме
Ответ #7 - 07. Октября 2007 :: 17:53
Печать  
2-Z1 я вас умоляю, не стоит дуться, наверно я просто некорректно сформулировал вопрос.  Подмигивание
а вот корректная вроде бы формулировка:
необходимо доработать скл запрос так, чтобы приделать к результату колонку с реквизитом (не общим) документа, заранее неизвестного вида. Возможно ли это средствами исключительно т-скл?
Ведь например сама 1С может корректно отработать строки типа:
Док = СоздатьОбъект( "Документ" );
...
ТКонтрагент = Документ.Контрагент;
(будем считать что  у каждого вида документов есть реквизит Контрагент)


Пока же вижу выход только в динамической сборке запроса, используя подсказку Вадимко  Очень довольный
http://infostart.ru/articles/201/

решение получилось таким примерно:
РСет.УстановитьТекстовыйПараметр( "ДатаС", рДатаС );
     РСет.УстановитьТекстовыйПараметр( "ДатаПо", рДатаПо ); 
     РСет.УстановитьТекстовыйПараметр( "Фирма", рФирма ); 
     
     тзВиды = СоздатьОбъект( "ТаблицаЗначений" );
     Запрос = "
     | SELECT DISTINCT rdPart.IDDOCDEF AS Вид
     | FROM $Регистр.ПартииНаличие AS rdPart (nolock)
  |WHERE ( rdPart.DATE_TIME_IDDOC BETWEEN :ДатаС AND :ДатаПо~ )
     | AND   ( $rdPart.КодОперации IN ( SELECT Val FROM #КО ) )
     |";
     РСет.ВыполнитьИнструкцию( Запрос, тзВиды, 1 );
     тКейс = "CASE" + РазделительСтрок;
     тДжоин = "";
     тзВиды.ВыбратьСТроки();
     Пока тзВиды.ПолучитьСтроку()=1 Цикл   
           Стр = "{" +"""O"""+","+"""0"""+","+"""0"""+","+"""" + Строка( тзВиды.Вид ) + """"+","+"""0"""+","+"""0"""+","+"""         0   """+"}";
    Вид = ЗначениеИзСтрокиВнутр( Стр ).Вид();
           тКейс = тКейс + "WHEN $doc" + тзВиды.Вид + ".Контрагент<>$ПустойИд THEN $doc" + тзВиды.Вид + ".Контрагент" + РазделительСтрок;
       тДжоин = тДжоин + "LEFT JOIN $Документ."  + Вид + " AS doc" + тзВиды.Вид + " ON doc" + тзВиды.Вид + ".IDDOC=rdPart.IDDOC" + РазделительСтрок;
     КонецЦикла;
     тКейс = тКейс + "ELSE $ПустойИд END";
     
     РСет.УстановитьТекстовыйПараметр( "ДатаС", рДатаС );
     РСет.УстановитьТекстовыйПараметр( "ДатаПо", рДатаПо ); 
     РСет.УстановитьТекстовыйПараметр( "Фирма", рФирма ); 
     
     Запрос = "
     | SELECT
     |        $rdPart.Фирма                                                          AS Фирма,
     |        $rdPart.Номенклатура                                  AS Номенклатура,
     |        $rdPart.ДопПризнак                                        AS ДопПризнак,
     |        $rdPart.КодОперации                                        AS КодОперации,
     |        $rdPart.Количество    * ( 1 - rdPart.DEBKRED * 2 ) AS Количество,
     |        $rdPart.СуммаРуб      * ( 1 - rdPart.DEBKRED * 2 ) AS Стоимость,
     |        $rdPart.ПродСтоимость * ( 1 - rdPart.DEBKRED * 2 )      AS Выручка,
     |        rdPart.IDDOC                                       AS [Документ $Документ],
     |        rdPart.IDDOCDEF                                    AS Документ_вид,
     |        " + тКейс + "                                      AS [Контрагент $Справочник.Контрагенты]
     |       
     | FROM $Регистр.ПартииНаличие AS rdPart (nolock)
     | " + тДжоин + "
     | WHERE ( rdPart.DATE_TIME_IDDOC BETWEEN :ДатаС AND :ДатаПо~ )
     | AND   ( $rdPart.КодОперации IN ( SELECT Val FROM #КО ) )
     |" + ?( ЕстьФильтрФирма=0, "", "AND ( $rdPost.Фирма=:Фирма )" ) + "
  |
     |";
« Последняя редакция: 08. Октября 2007 :: 06:51 - geschaft »  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: поможите достать Контрагента для разных докуме
Ответ #8 - 08. Октября 2007 :: 09:12
Печать  
geschaft писал(а) 07. Октября 2007 :: 17:53:
Ведь например сама 1С может корректно отработать строки типа:
Док = СоздатьОбъект( "Документ" );
ТКонтрагент = Документ.Контрагент;
(будем считать что  у каждого вида документов есть реквизит Контрагент)

При каждом изменении на другой документ идет полная выборка всех
реквизитов шапки документа select * from dt...  ( подробно описано статья БыстыеСправочники ).
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать