Имя: Пароль:
1C
 
Вывод дополнительной информации в форме списка
0 Сергей33
 
13.03.15
11:20
Всем добрый день,

Пытаюсь реализовать следующее: в форме списка документа "Заказ покупателю" добавил колонку "Наличие", в которую планирую выводить инфу о наличии материала на складе. Например 2 значения: "есть на текущем складе" = 1, "есть на всех складах" = 2 (на текущую дату).
Как лучше организовать заполнение этой колонки? Если в событии при выводе строки выбирать запросом то мне кажется будет медленно открываться форма, может есть еще какой более быстрый способ?
1 mikecool
 
13.03.15
11:25
в обычных формах - в приполученииданных
в уф - запросом в дин списке
2 nightangel48
 
13.03.15
11:26
ПриПолученииДанных отработает быстрее.
3 D_E_S_131
 
13.03.15
11:28
(2) Не быстрее, но позволит одним запросом получить данные для всех выводимых строк.
4 Сергей33
 
13.03.15
11:33
А запрос для получения данных сразу для всех строк как то по особенному строится?
5 anatoly
 
13.03.15
11:35
(3) быстрее - т.к. отработает при открытии один раз для всех - а ПриВыводеСтроке будет вызываться при каждой прокрутке для каждой строки.
(4) для всех сразу.
6 Godofsin
 
13.03.15
11:38
(4) Собираешь нужные данные из всех строк и строишь один запрос на их основе
7 Сергей33
 
13.03.15
11:46
из всех строк списка? т.е. выбираю остатки по всей номенклатуре, а потом как?
8 D_E_S_131
 
13.03.15
11:49
Пример с ИТС:

Процедура СправочникСписокПриПолученииДанных(Элемент, ОформленияСтрок)

    // Соответствие создается для заполнения остатков в строках табличного поля
    Соответствие = Новый Соответствие;

    // Заполнение параметра - массива значений ссылками на отображаемые строки табличного поля
    СсылкиМассив = Новый Массив;
    Для каждого Стр из ОформленияСтрок Цикл

        СсылкиМассив.Добавить(Стр.ДанныеСтроки.Ссылка);
        Соответствие.Вставить(Стр.ДанныеСтроки.Ссылка, Стр);

    КонецЦикла;

    // Сформировать запрос для получения остатков
    ЗапросОстатка = Новый Запрос;
    ЗапросОстатка.Текст = "ВЫБРАТЬ
                           | УчетНоменклатурыОстатки.Номенклатура,
                           | УчетНоменклатурыОстатки.КоличествоОстаток
                           |ИЗ
                           | РегистрНакопления.УчетНоменклатуры.Остатки(, Номенклатура В (&Номенклатура)) КАК УчетНоменклатурыОстатки";

    ЗапросОстатка.УстановитьПараметр("Номенклатура", СсылкиМассив);
    Выборка = ЗапросОстатка.Выполнить().Выбрать();

    //Вывести остаток в строку, найденную в соответствии по номенклатуре из запроса
    Пока Выборка.Следующий() Цикл

        Соответствие.Получить(Выборка.Номенклатура).Ячейки.Остаток.Значение = Выборка.КоличествоОстаток;

    КонецЦикла;

КонецПроцедуры
[\1c]
9 Сергей33
 
13.03.15
11:56
Спасибо большое! Сейчас поразбираюсь..
10 Сергей33
 
16.03.15
11:12
Спасибо! Половину задачи решил при помощи подобного запроса. Когда выбираю остаток по всем складам - все прекрасно работает. Но мне нужно еще получить остаток по конкретному складу из текущей строки с документом, для этого использую параметр, который нужно передавать для каждой строки отбора. Можно ли как то приспособить этот запрос для параметра? Или может есть другой способ?
11 Сергей33
 
16.03.15
11:41
Пока использую такой вариант: В ПриПолученииДанных получаю остатки по всем складам - заполняю столбец "Наличие на складе" = "Да", а в событии ПриВыводеСтроки - проверяю: если "Да" делаю запрос с условием по конкретному складу.
12 Сергей33
 
16.03.15
13:26
Пришла мысль - использовать подзапрос, связанный с основным по документу, из этого подзапроса и брать склад.
13 D_E_S_131
 
16.03.15
13:47
"РегистрНакопления.УчетНоменклатуры.Остатки(, Номенклатура В (&Номенклатура))" — это получение данных в запросе с использованием виртуальной таблицы "Остатки" и установки параметров виртуальной таблицы. Для получения доп.отбора по складу, нужно аналогично номенклатуре установить условие по складу. А для начала почитать про использование виртуальных таблиц в запросах.
14 Сергей33
 
16.03.15
13:58
я видимо мысль не закончил: ... брать склад и подставлять в параметр виртуальной таблицы (я это имел в виду)
Программист всегда исправляет последнюю ошибку.