Имя: Пароль:
1C
1С v8
табличная часть документа
0 dimogen
 
06.06.12
11:27
Подскажите, как можно правильно сделать отбор в табличной части документа по значению? есть поле склад(например, основной и виртуальный), как отобрать только основной? делал так:

Форма = ДокСсылка.ПолучитьФорму("ФормаДокумента");
Форма.ЭлементыФормы.Товары.ОтборСтрок.Склад.Установить(Склад);
ОтборСтрок = Форма.ЭлементыФормы.Товары.ОтборСтрок;
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Форма.ЭлементыФормы.Товары.ОтборСтрок);
Для Каждого ЭлементОтбора из ОтборСтрок Цикл
Если ЭлементОтбора.Использование Тогда
НовыйОтбор = Построитель.Отбор.Добавить(ОтборСтрок.Склад);
НовыйОтбор.Использование = Истина;
НовыйОтбор.Значение = Справочники.МестаХранения.НайтиПоКоду(9);
КонецЕсли;
КонецЦикла;
Рез = Построитель.Результат;

но у меня ошибка в строке новыйотбор = построитель.отбор.добавить... может кто знает как мне помочь?
1 dimogen
 
06.06.12
11:32
можно использовать другой вариант получать из ТЗ по найти, но там не могу условие правильно сделать
2 CyberDream
 
06.06.12
11:37
можно воспользоваться менеджером временных таблиц, поместить в него табличную форму документа, и запросом извлечь необходимые данные
3 Maxus43
 
06.06.12
11:42
через форму то зачем всё? просто запрос к ТЧ дока чем не катит?
4 Reset
 
06.06.12
11:43
Если есть документ-объект, тогда
УсловиеОтбора=Новый Структура("Склад",Склад)
Объект.Товары.НайтиСтроки() -- вернет массив строк

Если ссылка, то простейший запрос к ТЧ
5 Reset
 
06.06.12
11:44
(2) "поместить в менеджер временных таблиц табличную форму документа"
:D
6 dimogen
 
06.06.12
11:44
(3)дак я сделал запрос, там все данные получил, потом выгрузил ТЗ, но мне нужно взять колонку склад с наименование основной и по нему я буду дальше работать.
(4)вот как раз так сделал, получил массив
7 dimogen
 
06.06.12
11:45
(4) только дальше понять не могу что делать)))

Отбор = Новый Структура;
Отбор.Вставить("Склад", Склад);
НайдСтр = ТЗ.НайтиСтроки(Отбор);
8 Reset
 
06.06.12
11:46
(7) В НайдСтр будет массив отобранных строк, как ты и просил.
Или ты просил не это? Скажи, что нужно получить в итоге. Цель какая.
9 dimogen
 
06.06.12
11:49
(8) в итоге мне нужно получить склад = основной, в ТЧ могут быть много разных складов, когда получаю склад то я буду делать документ перемещение только той номенклатуры из ТЧ в кот. поле склад
10 Reset
 
06.06.12
11:52
Ничего не понял :(
11 Reset
 
06.06.12
11:53
Почитай еще про метод Выгрузить у табличной части
12 Reset
 
06.06.12
11:54
И про условие ГДЕ в запросе
13 dimogen
 
06.06.12
12:01
вот смотри как у меня сделано, может ты так больше поймешь, что я имею в виду:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    ДоставкаТовары.Номенклатура,
|    ДоставкаТовары.Количество,
|    ДоставкаТовары.Сумма,
|    ДоставкаТовары.Склад,
|    ДоставкаТовары.Ссылка
|ИЗ
|    Документ.Доставка.Товары КАК ДоставкаТовары
|ГДЕ
|    ДоставкаТовары.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ДокСсылка);
Результат = Запрос.Выполнить();
   
Склад = Справочники.МестаХранения.НайтиПоКоду(9);
ТЗ = ДокСсылка.Товары.Выгрузить();
Отбор = Новый Структура;
Отбор.Вставить("Склад", Склад);
НайдСтр = ТЗ.НайтиСтроки(Отбор);
ДокПерем = Документы.Перемещение.СоздатьДокумент();
//вот здесь хочу вставить условие по складу
Для Стр=0 ПО ТЗ.Количество()-1 Цикл
   НовСтр = ДокПерем.Товары.Добавить();
   НовСтр.Номенклатура = ТЗ.Получить(Стр).Номенклатура;
   НовСтр.Количество = ТЗ.Получить(Стр).Количество;
   //НовСтр.Цена = ТЗ.Получить(Стр).Цена;
   НовСтр.Сумма = ТЗ.Получить(Стр).Сумма;
   НовСтр.код = ТЗ.Получить(Стр).Номенклатура.Ссылка.Код;
КонецЦикла;
14 Reset
 
06.06.12
12:14
(13) Измени запрос:

"ВЫБРАТЬ
|    ДоставкаТовары.Номенклатура,
|    ДоставкаТовары.Количество,
|    ДоставкаТовары.Сумма,
|    ДоставкаТовары.Склад,
|    ДоставкаТовары.Ссылка
|ИЗ
|    Документ.Доставка.Товары КАК ДоставкаТовары
|ГДЕ
|    ДоставкаТовары.Ссылка = &Ссылка И ДоставкаТовары.Склад=&Склад";

и передавай в него параметр Склад, по которому хочешь отобрать.
15 dimogen
 
06.06.12
12:16
(14) вроде такого:
Склад = Справочники.МестаХранения.НайтиПоКоду(9);
Запрос.УстановитьПараметр("Склад", Склад);
16 dimogen
 
06.06.12
12:29
и как условие должно выглядеть?
17 dimogen
 
06.06.12
13:16
up
18 hhhh
 
06.06.12
13:21
у вас числовые коды у складов?
19 dimogen
 
06.06.12
13:31
да, числовой
20 dimogen
 
06.06.12
16:08
я сделал так:
ТабСклад = ДокСсылка.Товары.ВыгрузитьКолонку("Склад");
Для каждого Элем из ТабСклад Цикл
Сообщить(Элем);
КонецЦикла;
но теперь не понимаю как мне выбрать нужное мне значение?
21 dimogen
 
06.06.12
17:15
все разобрался))) всем спасибо
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.