|   |   | 
| 
 | v7: Неправильно объединяет поля в запросе. | ☑ | ||
|---|---|---|---|---|
| 0
    
        Pr0gLamer 13.03.12✎ 19:55 | 
        Типовая дописанная конфа "ТиС". Отчёт продажи. Необходимо выдать авторов документов и сами документы.
  Существует документ "Скидка". У него есть реквизит шапки "ДокументОснование" с типом "Документ.РасходнаяНакладная". При построении отчёта нужно выдавать не автора документа "Скидка",а автора документа "РН",на основании которой он введён. Всё прекрасно работает,если автор описывается таким образом: Авт = Регистр.ПартииТоваров.ТекущийДокумент.Скидка.ДокументОснование.Автор; Если же я хочу выдать авторов еще по расходным накладным, то мне нужно объединить поля в запросе.Я делаю так: Авт = Регистр.ПартииТоваров.ТекущийДокумент.Скидка.ДокументОснование.Автор, Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Автор; При этом мне выдаёт вместо авторов расходных накладных авторов документов "Скидка".До этого всё работало как часы. Помогите разобраться пожалуйста. | |||
| 1
    
        Pr0gLamer 13.03.12✎ 20:12 | 
        неправильно написал 
  Авт = Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Автор, Регистр.ПартииТоваров.ТекущийДокумент.Скидка.ДокументОснование.Автор; Хочу допонить: авторов РН выдаёт правильно,но если документ "Скидка",то выдаёт его автора,вместо автора основания | |||
| 2
    
        miki 13.03.12✎ 20:15 | 
        ты бы группировки-то показал, а лучше весь запрос...     | |||
| 3
    
        Pr0gLamer 14.03.12✎ 11:17 | 
        ОбрабатыватьДокументы Все;
  ПЕРИОД С Дата1 По Дата2; Филиал=Регистр.ПартииТоваров.Филиал; Фирма=Регистр.ПартииТоваров.Фирма; Товар=Регистр.ПартииТоваров.Товар; Направление = Регистр.ПартииТоваров.ТекущийДокумент.ВводОстатковТоваров.Направление, Регистр.ПартииТоваров.ТекущийДокумент.ГТД.Направление, Регистр.ПартииТоваров.ТекущийДокумент.НарядЗаказ.Направление, Регистр.ПартииТоваров.ТекущийДокумент.ПриходнаяНакладная.Направление, Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Направление, Регистр.ПартииТоваров.ТекущийДокумент.НарядЗаказГидр.Направление, Регистр.ПартииТоваров.ТекущийДокумент.ГТДГидр.Направление, Регистр.ПартииТоваров.ТекущийДокумент.Скидка.Направление; Покупатель=Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Контрагент, Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяРозничная.Контрагент, Регистр.ПартииТоваров.ТекущийДокумент.ПриходнаяНакладная.Контрагент, Регистр.ПартииТоваров.ТекущийДокумент.ПродажаРеализатора.Контрагент, Регистр.ПартииТоваров.ТекущийДокумент.НарядЗаказ.Контрагент, Регистр.ПартииТоваров.ТекущийДокумент.НарядЗаказГидр.Контрагент, Регистр.ПартииТоваров.ТекущийДокумент.ГТДГидр.Контрагент, Регистр.ПартииТоваров.ТекущийДокумент.ЧекКА.ЭККА, Регистр.ПартииТоваров.ТекущийДокумент.ОтчетКА.ЭККА, Регистр.ПартииТоваров.ТекущийДокумент.Скидка.Контрагент; Склад=Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Склад, Регистр.ПартииТоваров.ТекущийДокумент.НарядЗаказ.Склад, Регистр.ПартииТоваров.ТекущийДокумент.НарядЗаказГидр.Склад, Регистр.ПартииТоваров.ТекущийДокумент.ГТДГидр.Склад, Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяРозничная.Склад, Регистр.ПартииТоваров.ТекущийДокумент.ПриходнаяНакладная.Склад, Регистр.ПартииТоваров.ТекущийДокумент.ЧекКА.Склад, Регистр.ПартииТоваров.ТекущийДокумент.ОтчетКА.Склад, Регистр.ПартииТоваров.ТекущийДокумент.Скидка.Склад; Авт = Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Автор, Регистр.ПартииТоваров.ТекущийДокумент.Скидка.ДокументОснование.Автор; Вработе=Регистр.ПартииТоваров.ТекущийДокумент.НарядЗаказ.Вработе,Регистр.ПартииТоваров.ТекущийДокумент.ГТДГидр.Вработе; Условие (Вработе<>1); Поставщик=Регистр.ПартииТоваров.Поставщик; Поставка=Регистр.ПартииТоваров.Поставка; ПрихДокумент=Регистр.ПартииТоваров.ПрихДокумент; ТекДок=Регистр.ПартииТоваров.ТекущийДокумент; ОстатокТовара=Регистр.ПартииТоваров.ОстатокТовара; НДС=Регистр.ПартииТоваров.НДС; НДСрасхода=Регистр.ПартииТоваров.НДСрасхода; Оборот=Регистр.ПартииТоваров.ОборотГривня; Прибыль=Регистр.ПартииТоваров.ПрибыльГривня; КодОперации=Регистр.ПартииТоваров.КодОперации; Группировка Авт Без групп; Группировка Документ ; Функция РасхОстатокТовара=Расход(ОстатокТовара); Функция ПрихОстатокТовара=Приход(ОстатокТовара); Функция ОборотТовара=Сумма(Оборот); Функция ПрибыльТовара=Сумма(Прибыль); Функция ПрихНДС=Приход(НДС); Функция РасхНДС=Расход(НДС); Функция НДСрасходаТовара=Сумма(НДСрасхода); Условие (Фирма=ВыбФирма); Условие (КодОперации В КодыОперацийПродажи); Условие (Филиал в СписокФилиалов); | |||
| 4
    
        ЧеловекДуши 14.03.12✎ 11:18 | 
        Запрос в Топку!!!!
  Автора в Дворники :) Автор, ты хоть в конструкторе запрос сделай ;) | |||
| 5
    
        ЧеловекДуши 14.03.12✎ 11:19 | 
        + Нафига вот это, "ОбрабатыватьДокументы Все;", при работе с регистрами?     | |||
| 6
    
        Pr0gLamer 14.03.12✎ 11:25 | 
        как обычно.желчи много,по делу ничего."ОбрабатыватьДокументы Все;" действительно не нужно,но на работоспособность никак не влияет     | |||
| 7
    
        Морозов Александр 14.03.12✎ 11:36 | 
        чет не понятно... а чего в других документах авторов нету? и если не везде автор в запросе указывается зачем тогда группировка по нему?     | |||
| 8
    
        Pr0gLamer 14.03.12✎ 11:45 | 
        запрос создаётся динамически в т.ч. и группировки.В других документах тоже есть автора,я закомментировал эти строки в отладочных целях.Запрос возвращает результат: все документы за период с их авторами,но вот в документе "Скидка" светит не автора того документа,на основании которого он введён,а самого автора скидки. Если убрать строку  
  Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Автор то выдаются все документы за период, а авторов показывает только по документам "Скидка",причём правильно,т.е. авторов док-в,на основании которых скидка введена | |||
| 9
    
        miki 14.03.12✎ 12:05 | 
        у тебя "Документ " - группировка вложенная в группировку "Авт". Сотвественно, внутри второй группировки автор будет постоянным.     | |||
| 10
    
        Ork 14.03.12✎ 12:09 | 
        (0) Вместо :
  Авт = Регистр.ПартииТоваров.ТекущийДокумент.Скидка.ДокументОснование.Автор, Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Автор; АторСкидки = Регистр.ПартииТоваров.ТекущийДокумент.Скидка.ДокументОснование.Автор; АвторРасходной = Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная; При разборе : Автор = Запрос.АвторСкидки + Запрос.АвторРасходной. ЗЫ. Начитались, пАнимашь за объединение... | |||
| 11
    
        ЧеловекДуши 14.03.12✎ 12:09 | 
        У партии товара разве нет измерения "Склад"? (ну допустим нет его там)
  Нахрена его из документов вытаскивать, через регистр. Так же если ты так любишь документы, то делай напрямую по документно :) | |||
| 12
    
        Pr0gLamer 14.03.12✎ 12:17 | 
        (11) Сей запрос не я придумал,конфа была написана до меня.И измерение склад есть,не знаю чем руководствовались
  (10) Буду пробовать,как вы советуете,спасибо | |||
| 13
    
        Pr0gLamer 14.03.12✎ 12:30 | 
        Авт = Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Автор;
  АвторСкидки = Регистр.ПартииТоваров.ТекущийДокумент.Скидка.ДокументОснование.Автор; Группировка Авт Без групп; Группировка Документ ; Точно так же выдаёт документ "Скидка" и его автора,а не автора Расходной,хотя,как я понимаю,должно выдавать исключительно авторов Расходных | |||
| 14
    
        Voronve 14.03.12✎ 12:32 | 
        (13) "....Скидка.ДокументОснование" имеет тип документа неопределенного вида ? Тогда фильтровать только при обходе результатов запроса.     | |||
| 15
    
        Pr0gLamer 14.03.12✎ 12:33 | 
        (14) изначально было неопределённого вида,я поставил РасходнуюНакладную,ничего не изменилось     | |||
| 16
    
        Voronve 14.03.12✎ 12:34 | 
        +(14) Либо попробуй добавить переменную в запрос вида переменную "ВидДокОсн = Регистр.ПартииТоваров.ТекущийДокумент.Скидка.ДокументОснование;" и условие по "ВидДокОсн.Вид() = ""РасходнаяНакладная"")     | |||
| 17
    
        Pr0gLamer 14.03.12✎ 12:53 | 
        ПЕРИОД С Дата1 По Дата2;
  Филиал=Регистр.ПартииТоваров.Филиал; Фирма=Регистр.ПартииТоваров.Фирма; Товар=Регистр.ПартииТоваров.Товар; Авт = Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Автор; АвтСкидки = Регистр.ПартииТоваров.ТекущийДокумент.Скидка.ДокументОснование.Автор; ВидДокОсн = Регистр.ПартииТоваров.ТекущийДокумент.Скидка.ДокументОснование; Вработе=Регистр.ПартииТоваров.ТекущийДокумент.НарядЗаказ.Вработе,Регистр.ПартииТоваров.ТекущийДокумент.ГТДГидр.Вработе; Условие (Вработе<>1); Поставщик=Регистр.ПартииТоваров.Поставщик; Поставка=Регистр.ПартииТоваров.Поставка; ПрихДокумент=Регистр.ПартииТоваров.ПрихДокумент; ТекДок=Регистр.ПартииТоваров.ТекущийДокумент; ОстатокТовара=Регистр.ПартииТоваров.ОстатокТовара; НДС=Регистр.ПартииТоваров.НДС; НДСрасхода=Регистр.ПартииТоваров.НДСрасхода; Оборот=Регистр.ПартииТоваров.ОборотГривня; Прибыль=Регистр.ПартииТоваров.ПрибыльГривня; КодОперации=Регистр.ПартииТоваров.КодОперации; Группировка Авт Без групп; Группировка Документ ; Функция РасхОстатокТовара=Расход(ОстатокТовара); Функция ПрихОстатокТовара=Приход(ОстатокТовара); Функция ОборотТовара=Сумма(Оборот); Функция ПрибыльТовара=Сумма(Прибыль); Функция ПрихНДС=Приход(НДС); Функция РасхНДС=Расход(НДС); Функция НДСрасходаТовара=Сумма(НДСрасхода); Условие (Фирма=ВыбФирма); Условие (КодОперации В КодыОперацийПродажи); Условие (ВидДокОсн.Вид() = "РасходнаяНакладная"); Условие (Филиал в СписокФилиалов); ничего не изменилось, всё равно отдаёт фамилии авторов "Скидок" | |||
| 18
    
        Voronve 14.03.12✎ 12:59 | 
        (17) Это "Условие (КодОперации В КодыОперацийПродажи);" попробуй выкинуть и посмотри что получиться.     | |||
| 19
    
        Pr0gLamer 14.03.12✎ 13:04 | 
        (18) ничего не изменилось
  это может быть какой-то особенностью построения запросов либо функционирования программы? | |||
| 20
    
        miki 14.03.12✎ 13:08 | 
        (19)это только может быть собенностью конкретного кодера...
  У тебя даже не осталось группировки с автором из скидок. Покажи как присваивашь переменные при выводе. | |||
| 21
    
        Pr0gLamer 14.03.12✎ 13:22 | 
        (20) Если сделать группировку по АвтСкидки - выдаёт авторов РасходныхНакладных,как и требовалось,но вместе с ними в выдачу попадают и все остальные документы,но уже без авторов.
  в процессе отладки результат выполнения запроса я выгружаю в таблицу значений,потом использую тз.ВыбратьСтроку(); или мне нужно делать 2 группировки: 1)по авторам Расходных 2)По авторам Скидок ? | |||
| 22
    
        miki 14.03.12✎ 13:23 | 
        Покажи как присваивашь переменные при выводе     | |||
| 23
    
        Pr0gLamer 14.03.12✎ 13:35 | 
        Не понимаю сути вопроса.Я смотрю результат запроса по таблице значений     | |||
| 24
    
        DimRom 14.03.12✎ 15:53 | 
        Попробуй две группировки 
  1)по авторам Расходных и 2)По авторам Скидок | |||
| 25
    
        ЧеловекДуши 14.03.12✎ 15:57 | 
        (23)Бросай ты это дело делать все в одном запросе.
  1С-ный запросы криво себя ведут в твоем случае (0) Лучше выполнить простой запрос, получить нужные данные. А затем в цикле присваивать нужные значения. | |||
| 26
    
        ЧеловекДуши 14.03.12✎ 15:58 | 
        + Т.е. конструкцию, типа
  Направление = Регистр.ПартииТоваров.ТекущийДокумент.ВводОстатковТоваров.Направление, Регистр.ПартииТоваров.ТекущийДокумент.ГТД.Направление, Регистр.ПартииТоваров.ТекущийДокумент.НарядЗаказ.Направление, Регистр.ПартииТоваров.ТекущийДокумент.ПриходнаяНакладная.Направление, Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Направление, Регистр.ПартииТоваров.ТекущийДокумент.НарядЗаказГидр.Направление, Регистр.ПартииТоваров.ТекущийДокумент.ГТДГидр.Направление, Регистр.ПартииТоваров.ТекущийДокумент.Скидка.Направление; Покупатель=Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Контрагент, Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяРозничная.Контрагент, Регистр.ПартииТоваров.ТекущийДокумент.ПриходнаяНакладная.Контрагент, Регистр.ПартииТоваров.ТекущийДокумент.ПродажаРеализатора.Контрагент, Регистр.ПартииТоваров.ТекущийДокумент.НарядЗаказ.Контрагент, Регистр.ПартииТоваров.ТекущийДокумент.НарядЗаказГидр.Контрагент, Регистр.ПартииТоваров.ТекущийДокумент.ГТДГидр.Контрагент, Регистр.ПартииТоваров.ТекущийДокумент.ЧекКА.ЭККА, Регистр.ПартииТоваров.ТекущийДокумент.ОтчетКА.ЭККА, Регистр.ПартииТоваров.ТекущийДокумент.Скидка.Контрагент; Склад=Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Склад, Регистр.ПартииТоваров.ТекущийДокумент.НарядЗаказ.Склад, Регистр.ПартииТоваров.ТекущийДокумент.НарядЗаказГидр.Склад, Регистр.ПартииТоваров.ТекущийДокумент.ГТДГидр.Склад, Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяРозничная.Склад, Регистр.ПартииТоваров.ТекущийДокумент.ПриходнаяНакладная.Склад, Регистр.ПартииТоваров.ТекущийДокумент.ЧекКА.Склад, Регистр.ПартииТоваров.ТекущийДокумент.ОтчетКА.Склад, Регистр.ПартииТоваров.ТекущийДокумент.Скидка.Склад; Получить в каком либо цикле, при выводе результата. | |||
| 27
    
        DimRom 14.03.12✎ 16:03 | 
        как вариант: выкинь Авторов совсем из запроса. Оставь одну Группировку по Документу. Обойди запрос и там уже смотри кто автор и записывай в ТЗ     | |||
| 28
    
        Pr0gLamer 14.03.12✎ 17:37 | 
        У меня динамически с помощью галочек,кнопочек,списка значений и рекурсии формируются группировки и даже задаётся их порядок. Чтобы изменить структуру придётся переписывать всё полностью.Может быть есть возможность связать поля  таблиц в запросе по - другому?     | |||
| 29
    
        DimRom 14.03.12✎ 17:50 | 
        Нельзя ли после выполнения запроса обойти результаты и там получить авторов в зависимости от вида документа?     | |||
| 30
    
        Pr0gLamer 14.03.12✎ 17:55 | 
        Скорее всего так и буду делать - либо ставить доп. условие,либо сначала строить запрос по всем документам,кроме скидки,а потом уже по скидке.Всем спасибо,хоть в чём была проблема я так и не понял...     | |||
| 31
    
        Ёпрст гуру 14.03.12✎ 18:12 | 
        (28) использовать прямой запрос или реструктуризировать регистр и добавить в него реквизит - автор. который и иметь потом в запросе просто и без мегатормозов, как сей час     | |||
| 32
    
        Pr0gLamer 15.03.12✎ 11:00 | 
        =(
  Придётся всё перепроводить | |||
| 33
    
        Ёпрст гуру 15.03.12✎ 11:59 | 
        (32) достаточно апдейтить 1 табличку движений без перепровода. Это от силы пару минут.     | |||
| 34
    
        Pr0gLamer 15.03.12✎ 12:34 | 
        Это напрямую в SQL лезть или как?     | |||
| 35
    
        Pr0gLamer 15.03.12✎ 14:16 | 
        Если да то пример в студию пожалуйста     | |||
| 36
    
        Ёпрст гуру 15.03.12✎ 14:53 | 
        Update
  Рег SET $Рег.Имяреквизита = НужноеЗначениеОткудаУгодноНапримерИзШапкиДокумента FROM $Регистр.НужныйВидРегистра as Рег | |||
| 37
    
        Pr0gLamer 15.03.12✎ 15:34 | 
        Спасибо,будем колупать     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |