|
Проблема с динамическим списком. | ☑ | ||
---|---|---|---|---|
0
Access granted
20.11.12
✎
15:51
|
Здравствуйте!
Столкнулся с непонятным поведением системы: есть динамический список с произвольным запросом, у него указана основная таблица. Часть текста запроса: ЕСТЬNULL(РасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток, 0) КАК ДолгПоЗаказу .... ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСКонтрагентами.Остатки КАК РасчетыСКонтрагентамиОстатки ПО РегистрСведенийМаршрутныеЛисты.ДокументЗаказ = РасчетыСКонтрагентамиОстатки.Сделка Вышеприведенный код получает долг по заказу покупателя. При этом динамический список показывает, к примеру, 19110, а по факту долга нет. При этом запрос, скопированный в консоль показывает правильный результат (долг = 0). Подскажите, куда копать? chdbfl + ТИИ ошибок не выдали. Также стоит отметить, что долг рассчитывается неверно только по некоторым позициям, а по остальным - нормально. |
|||
1
Access granted
20.11.12
✎
16:05
|
=UP=
|
|||
2
kible
20.11.12
✎
16:10
|
Дата остатка где?
|
|||
3
mzelensky
20.11.12
✎
16:11
|
а их не может быть несколько?
|
|||
4
Access granted
20.11.12
✎
16:12
|
Дата не указана, при этом получаются актуальные остатки. Пробовал так же и дату задавать в параметре виртуальной таблицы - результат тот же.
|
|||
5
mzelensky
20.11.12
✎
16:12
|
(4) давай полный запрос
|
|||
6
Access granted
20.11.12
✎
16:13
|
(3) Да, я нашел в регистре (по которому ДС данные получает) 2 строки с одинаковым заказом. Одну из них удалил - не помогло.
|
|||
7
Access granted
20.11.12
✎
16:15
|
(5)
ВЫБРАТЬ РегистрСведенийМаршрутныеЛисты.Период, РегистрСведенийМаршрутныеЛисты.ДокументЗаказ, РегистрСведенийМаршрутныеЛисты.НомерМаршрута, РегистрСведенийМаршрутныеЛисты.КонтактноеЛицоИЕгоТелефоны, РегистрСведенийМаршрутныеЛисты.АдресДоставки, РегистрСведенийМаршрутныеЛисты.ВодительЭкспедитор, РегистрСведенийМаршрутныеЛисты.СтрокаДобавленаПослеЗаполнения, ЕСТЬNULL(РасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток, 0) КАК ДолгПоЗаказу ИЗ РегистрСведений.МаршрутныеЛисты КАК РегистрСведенийМаршрутныеЛисты ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСКонтрагентами.Остатки КАК РасчетыСКонтрагентамиОстатки ПО РегистрСведенийМаршрутныеЛисты.ДокументЗаказ = РасчетыСКонтрагентамиОстатки.Сделка |
|||
8
Access granted
20.11.12
✎
16:16
|
При этом я никак не могу понять, почему этот же запрос в консоли показывает по заказу долг 0, а в ДС - 19110...
|
|||
9
MSII
20.11.12
✎
16:17
|
Если основную таблицу отцепить, какие будут результаты?
|
|||
10
Access granted
20.11.12
✎
16:18
|
(9) Убрал, ничего не изменилось.
|
|||
11
mzelensky
20.11.12
✎
16:19
|
вообще как-то не айсово сделано.
Получи сперва одну таблицу: ВЫБРАТЬ РегистрСведенийМаршрутныеЛисты.Период, РегистрСведенийМаршрутныеЛисты.ДокументЗаказ, РегистрСведенийМаршрутныеЛисты.НомерМаршрута, РегистрСведенийМаршрутныеЛисты.КонтактноеЛицоИЕгоТелефоны, РегистрСведенийМаршрутныеЛисты.АдресДоставки, РегистрСведенийМаршрутныеЛисты.ВодительЭкспедитор, РегистрСведенийМаршрутныеЛисты.СтрокаДобавленаПослеЗапол нения, ИЗ РегистрСведений.МаршрутныеЛисты КАК РегистрСведенийМаршрутныеЛисты Засунь во временную таблицу. Потом сделай выборку из нее + левое соединение. В виртуальной таблице сразу можно ограничения наложить. + ситуация с несколькими строками может быть не единична. Возможно нужно сгруппировать...ну или еще как-то обработать....не знаю что тебе там нужно в итоге. |
|||
12
mzelensky
20.11.12
✎
16:20
|
(11) + еще на сколько я знаю "РасчетыСКонтрагентамиОстатки.Сделка" это составной тип. Если у тебя "РегистрСведенийМаршрутныеЛисты.ДокументЗаказ" это только заказы, то сделай через "ВЫРАЗИТЬ"
|
|||
13
mzelensky
20.11.12
✎
16:21
|
И кстати...вот тебе еще один возможный косяк - поле "РасчетыСКонтрагентамиОстатки.Сделка" может быть ПУСТЫМ!!!
И если у тебя "РегистрСведенийМаршрутныеЛисты.ДокументЗаказ" тоже пусто ,то они будут "соединяться" |
|||
14
mzelensky
20.11.12
✎
16:21
|
(13) т.е. проверь на пустоту
|
|||
15
Access granted
20.11.12
✎
16:23
|
(13) В регистре ДокументЗаказ не может быть пустым, а предприятие работает только по заказам, по этому и в регистре расчетов в принципе сделка всегда есть. Сейчас попробую (11).
|
|||
16
Access granted
20.11.12
✎
16:55
|
Мда... Ставим приходнику вчерашнюю дату - долг в ДС исчезает... Ставим приходнику сегодняшнюю дату - долг появляется. Хотя должны явно получаться актуальные данные из регистра. Даже указание параметра Период виртуальной таблицы ничего не дает.
|
|||
17
Access granted
20.11.12
✎
17:05
|
На неправильный остаток влияет этот код:
Список.Отбор.Элементы.Очистить(); НовыйЭлементОтбора = Список.Отбор.Элементы.Вставить(0, Тип("ЭлементОтбораКомпоновкиДанных")); НовыйЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Период"); НовыйЭлементОтбора.Использование = Истина; НовыйЭлементОтбора.ПравоеЗначение = ДатаМаршрутногоЛиста; НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; На форме есть поле с датой, где пользователь ее выбирает и ему показывает только данные по регистру на выбранную дату. Убрал все отборы и в списке ДС долги стали считаться нормально! Не могу понять, каким образом отбор влияет на виртуальную таблицу, они же никак не связаны? |
|||
18
Access granted
20.11.12
✎
17:13
|
=UP= Может быть кто-то знает, почему отбор компоновки влияет на получение данных из виртуальной таблицы?
|
|||
19
Access granted
20.11.12
✎
17:32
|
=UP=
|
|||
20
Buster007
20.11.12
✎
17:34
|
задай вручную параметр у виртуальной таблицы
|
|||
21
Access granted
20.11.12
✎
17:35
|
(20) Уже задавал и не раз. Ничего не дает. Такое чувство, что он просто игнорируется...
|
|||
22
Access granted
20.11.12
✎
17:47
|
Последний раз подниму. Похоже, лучше переделать все на обычную форму.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |