Имя: Пароль:
1C
1С v8
v8: Не могу победить ДинамическийСписок
0 Omskdizel
 
24.10.11
16:47
8.2.14.528, УТ 11.0.7.2
Делаю обработочку. На форме лежит динамический список, основная табличка - Номенклатура. Делаю колонку с остатком. Сделал реквизит "Склады", тип СписокЗначений, типы значений справочник "Склады". Табличку все колонки показал, смотрю на результат, а остатки показываются только по первому складу из списка. Вот запрос в ДинамическомСписке:

ВЫБРАТЬ
   СправочникНоменклатура.Ссылка,
   СправочникНоменклатура.ВерсияДанных,
   СправочникНоменклатура.ПометкаУдаления,
   СправочникНоменклатура.Предопределенный,
   СправочникНоменклатура.Родитель,
   СправочникНоменклатура.ЭтоГруппа,
   СправочникНоменклатура.Код,
   СправочникНоменклатура.Наименование,
   СправочникНоменклатура.Артикул,
   ВложенныйЗапрос.ВНаличииОстаток,
   ВложенныйЗапрос.ВРезервеОстаток,
   ВложенныйЗапрос.Номенклатура
ИЗ
   Справочник.Номенклатура КАК СправочникНоменклатура
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,
           СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
           СвободныеОстаткиОстатки.ВРезервеОстаток КАК ВРезервеОстаток
       ИЗ
           РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
       ГДЕ
            СвободныеОстаткиОстатки.Склад В(&Склады)) КАК ВложенныйЗапрос
       ПО СправочникНоменклатура.Ссылка = ВложенныйЗапрос.Номенклатура

При изменении поля выполняется код:

СписокНоменклатуры.Параметры.УстановитьЗначениеПараметра("Склады",Склады);


Подскажите плиз, где напортачил? Надо бы остатки по двум складам в сумме, а у меня только одни остатки выходють...
1 Азат
 
24.10.11
16:47
ну вы блин объединяйтесь как-то что ли?
2 Азат
 
24.10.11
16:48
3 Omskdizel
 
24.10.11
16:50
(1) Если внимательно почитать, то видно, что такой проблемы, как у автора упомянутой темы у меня нет. Номенклатура прекрасно отображается, некорректно показываются остатки. Вы в общем почитайте и лучше по делу чего-нить отпишите.
4 UFedor
 
24.10.11
16:53
Вероятно нужно сделать группировку во вложенном запросе, хотя это не очень хорошая затея. А параметр лучше включить в параметры виртуальной таблицы
5 Omskdizel
 
24.10.11
16:55
(4) А чем плох использованный способ, вроде все штатные средства? Я правда учусь еще, может чего неправильно понял? Виртуальные таблицы это где?
6 Buster007
 
24.10.11
16:57
почитать не только про УФ, а еще про запросы
           РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
       ГДЕ
            СвободныеОстаткиОстатки.Склад В(&Склады)
7 UFedor
 
24.10.11
16:58
(5) нужно использовать так
РегистрНакопления.СвободныеОстатки.Остатки(, Склад В (&Склады))
и группировку добавь.
В твоем случае если выполнить запрос при наличии остатков на нескольких складах одна номенклатура может будет включена несколько раз в результат запроса.
Как ведет себя динамический список - видимо описанным способом, берет только одну строку.
8 Omskdizel
 
24.10.11
17:14
(7) Поменял запрос на:

ВЫБРАТЬ
   СправочникНоменклатура.Ссылка,
   СправочникНоменклатура.ПометкаУдаления,
   СправочникНоменклатура.Предопределенный,
   СправочникНоменклатура.Родитель,
   СправочникНоменклатура.ЭтоГруппа,
   СправочникНоменклатура.Код,
   СправочникНоменклатура.Наименование,
   СправочникНоменклатура.Артикул,
   ВложенныйЗапрос.ВНаличииОстаток,
   ВложенныйЗапрос.ВРезервеОстаток,
   ВложенныйЗапрос.Номенклатура
ИЗ
   Справочник.Номенклатура КАК СправочникНоменклатура
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,
           СУММА(СвободныеОстаткиОстатки.ВНаличииОстаток) КАК ВНаличииОстаток,
           СУММА(СвободныеОстаткиОстатки.ВРезервеОстаток) КАК ВРезервеОстаток
       ИЗ
           РегистрНакопления.СвободныеОстатки.Остатки(, Склад В (&Склады)) КАК СвободныеОстаткиОстатки
       
       СГРУППИРОВАТЬ ПО
           СвободныеОстаткиОстатки.Номенклатура) КАК ВложенныйЗапрос
       ПО СправочникНоменклатура.Ссылка = ВложенныйЗапрос.Номенклатура

Эффект тот же, показывается только по первому складу из списка значений
9 Omskdizel
 
24.10.11
17:16
(6) Вы не поверите, но почитал. Третье предложение из (3) к вам тоже видимо относится.
10 Omskdizel
 
24.10.11
17:23
По дороге еще небольшой вопрос, может кто сталкивался. Реквизит Склады я сделал как реквизит формы. Если его сделать как реквизит объекта и задать тип СписокЗначений, то не нигде не нашел способа задать, что тип значений должен быть справочник Склад. Ни в интерфейсе, ни программно. Подскажите плиз, в какую сторону ковырнуть.
11 Omskdizel
 
24.10.11
17:33
Мда, пичаль...
(7) Вы были правы насчет того, что СГРУППИРОВАТЬ лучше не использовать. Почитал еще раз про ДинамическиеСписки и там написано, что группировки можно пользовать только без основной таблицы. Ессно улетели все прелести внешнего вида справочника Номенклатура, но самое смешное, что остатки так и показываются по первому складу.

В консоли запросов вложенный запрос прекрасно работает. Похоже ограничения динамического списка.
12 UFedor
 
24.10.11
17:36
Нашел
   Реквизит2.Параметры.УстановитьЗначениеПараметра("Территория",Реквизит1.ВыгрузитьЗначения());

В таком варианте работает. Видимо какая-то ошибка при передаче списка в параметр запроса
13 UFedor
 
24.10.11
17:38
Реквизитом какого объекта вы хотели сделать список значений?
Сделайте табличную часть
14 Omskdizel
 
24.10.11
17:58
(12) Супер! Все заработало! Для полноты эксперимента прогнал с первым запросом и тоже все заработало.
(13) Реквизитом обработки. Ну чтобы сделать отдельную форму для настроек например, думаю их наберется прилично. Вообще планируется понавешать много дел на обработку, а то менеджерам несколько неудобно пока в УТ11 работать, например какими заказами зарезервирован товар быстро не посмотреть. Ну и пару видов цен в ту же таблицу сейчас буду прикручивать.
15 Omskdizel
 
24.10.11
18:03
(12) Ну кстати о списке значений. В руководстве разработчика только в одном месте и то не целенаправленно написано, что можно передавать список значений в качестве правой стороны выражения с "В", в тексте список не упоминается вообще. Впрочем как и массив не помню чтобы был указан.
16 Omskdizel
 
26.10.11
09:34
Мучения чайника продолжаются :)
Пока в списке кроме номенклатуры отображались только остатки все было прекрасно и работало на нормальной скорости. Добавил вид цены, начались дикие тормоза при отрисовке формы.

ВЫБРАТЬ
   СправочникНоменклатура.Ссылка,
   СправочникНоменклатура.ПометкаУдаления,
   СправочникНоменклатура.Предопределенный,
   СправочникНоменклатура.Родитель,
   СправочникНоменклатура.ЭтоГруппа,
   СправочникНоменклатура.Код,
   СправочникНоменклатура.Наименование,
   СправочникНоменклатура.Артикул,
   ВложенныйЗапрос.ВНаличииОстаток,
   ВложенныйЗапрос.ВРезервеОстаток,
   ВложенныйЗапрос.Номенклатура,
   ВложенныйЗапрос1.Цена
ИЗ
   Справочник.Номенклатура КАК СправочникНоменклатура
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,
           СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
           СвободныеОстаткиОстатки.ВРезервеОстаток КАК ВРезервеОстаток
       ИЗ
           РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
       ГДЕ
           СвободныеОстаткиОстатки.Склад В(&Склады)) КАК ВложенныйЗапрос
       ПО СправочникНоменклатура.Ссылка = ВложенныйЗапрос.Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
           ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура
       ИЗ
           РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
       ГДЕ
           ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦены) КАК ВложенныйЗапрос1
       ПО СправочникНоменклатура.Ссылка = ВложенныйЗапрос1.Номенклатура

По идее тут и ошибиться то особо негде, но может все-таки? Убрал запрос по остаткам - все равно тормоза. Можно как-то ускорить сей процесс? Как-то очень странно, что запрос по регистру остатков работает быстрее запроса по регистру сведений.
17 Omskdizel
 
27.10.11
17:24
Все-таки надо делать через параметры виртуальной таблицы. На первый вариант ругается на нарушение уникальности в поле Ссылка.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.