Имя: Пароль:
1C
1С v8
Отбор в таблице значений по списку значений
,
0 laby1
 
16.02.17
14:53
Доброго всем!

Имею:


1) Список значений:

мОсновныеСклады = Новый СписокЗначений;
мОсновныеСклады.Добавить(Справочники.Склады.НайтиПоНаименованию("Основной склад №1"));
мОсновныеСклады.Добавить(Справочники.Склады.НайтиПоНаименованию("Основной склад №3"));
мОсновныеСклады.Добавить(Справочники.Склады.НайтиПоНаименованию("УПП (открытый склад)"));

2) Таблицу значений остатков (колонки "Склад", "Остаток"):

    Остатки = РасчитатьОстаткиПоВсемСкладам(Элемент.ТекущаяСтрока.Номенклатура);


Хочу:

Из ТЗ (2) выбрать все записи, у которых поле "Склад" в списке (1).

Пытаюсь так:

    Отбор = Новый Структура;
    Отбор.Вставить("Склад",мОсновныеСклады);
    рОстаткиЦС = Остатки.НайтиСтроки(Отбор);

, но не работает
1 Господин ПЖ
 
16.02.17
14:54
а должно?

загони в менеджер врем. таблиц и запросом
2 laby1
 
16.02.17
14:56
(1) Я так думаю не должно, раз не работает.

Насчет загнать в менеджер врем. таблиц и запросом - не совсем в теме.
3 Господин ПЖ
 
16.02.17
14:57
гугль все знает
4 Андрюха
 
16.02.17
14:58
(0) Все правильно с "НайтиСтроки", смотри в отладчике, чтобы значение, которое в структуру отбора передаешь совпадало с табличным.
5 laby1
 
16.02.17
15:00
(3) Подскажи, мне нужен отбор такого плана:

Склад В мОсновныеСклады

и еще

НЕ (Склад В мОсновныеСклады)
6 Господин ПЖ
 
16.02.17
15:01
7 h-sp
 
16.02.17
15:03
ВЫБРАТЬ * ПОМЕСТИТЬ Таб ИЗ &Таб КАК ТабИсх; ВЫБРАТЬ Склад, Остаток ИЗ Таб ГДЕ Склад В (мОсновныеСклады)
8 h-sp
 
16.02.17
15:03
&мОсновныеСклады
9 1Снеговик
 
гуру
16.02.17
15:30
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(мОсновныеСклады);

СтрокаОтбора = ПостроительЗапроса.Отбор.Добавить("Склад");
СтрокаОтбора.Значение = мОсновныеСклады.ВыгрузитьЗначения();
СтрокаОтбора.ВидСравнения = ВидСравнения.ВСписке;
СтрокаОтбора.Использование = Истина;
        
ПостроительЗапроса.Выполнить();
рОстаткиЦС = ПостроительЗапроса.Результат.Выгрузить();
10 Serginio1
 
16.02.17
15:43
Посмотри http://catalog.mista.ru/public/371762/
Там есть универсальный отбор
11 laby1
 
16.02.17
15:46
(9) (10) Спасибо, посмотрю.

(6) (7) (8) Спасибо, так и сделал:

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

    Возврат Остатки;
    
КонецФункции

Процедура СоставПланаПриАктивизацииСтроки(Элемент)

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