Имя: Пароль:
1C
1С v8
Проблема с динамическим списком.
,
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
Последний раз подниму. Похоже, лучше переделать все на обычную форму.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс