Имя: Пароль:
1C
1C 7.7
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
Спасибо,будем колупать
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан