Имя: Пароль:
1C
 
Подскажите с отбором по справочнику
0 zagorodnev
 
27.03.07
13:15
В общем хочу сделать выборку по группе справочника
Подборка;//Подборка поле формы для выбора
Выборка = Справочники.Номенклатура.Выбрать(Подборка);
Пока Выборка.Следующий() Цикл
....
КонецЦикла;

Не работает???
1 Широкий
 
27.03.07
13:18
Подборка - это ссылка или объект?
2 zagorodnev
 
27.03.07
13:18
Ссылка
3 gwalker
 
27.03.07
13:19
а если попробовать Для Каждого Из?
4 zagorodnev
 
27.03.07
13:21
(3) Не не пойдет:

Отбор= Новый Структура("Номенклатура");
Отбор.Номенклатура=Подборка;//Подборка поле формы для выбора
Выборка = Справочники.Номенклатура.Выбрать(,,Отбор);

Тоже не пашет
5 zagorodnev
 
27.03.07
13:22
Пишет
Недопустимое значение параметра (параметр номер "3")
6 КуплюКровать
 
27.03.07
13:23
Делай запросом
ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Справочник.Номенклатура.Родитель = &Родитель
7 zagorodnev
 
27.03.07
13:23
(6) Не пойдет внутри иерархия большая
8 Широкий
 
27.03.07
13:25
(2) Код вроде должен отрабатывать..
предположения:
"выборка" - это элемент (не группа)
"выборка" - тип значения не является "СправочникСсылка.Номенклатура"

(6) В ИЕРАРХИИ тогда уж
9 КуплюКровать
 
27.03.07
13:27
(8) ты прав.
(0) вот так например работает
Группа = Справочники.Номенклатура.НайтиПоНаименованию("Услуги");
выборка = справочники.Номенклатура.Выбрать(Группа);
Пока выборка.Следующий() Цикл
сообщить(выборка);
КОнецЦикла;
10 gwalker
 
27.03.07
13:30
(4) Отбор.Вставить("Номенклатура",Подборка)
11 zagorodnev
 
27.03.07
13:39
Все как-то не то идея такая я в форме выбираю группу Номенклатуры и бегу в цикле только по ней
12 zagorodnev
 
27.03.07
13:40
(10) Так тоже не будет работать
13 gwalker
 
27.03.07
13:42
(11) ё, я ж так делал!!!
Ща код найду
14 zagorodnev
 
27.03.07
13:44
Найди найди он ругается Недопустимое значение параметра (параметр номер "3")
Отбор.Вставить("Номенклатура",Подборка)
Это равносильно Отбор.Номенклатура=Подборка;
15 Широкий
 
27.03.07
13:47
(14) в (6) уже все написано ... только условие поставь в иерархии
16 gwalker
 
27.03.07
13:48
НоменклатураДляОтчетов - это ТП с типом значения СписокЗначений и с типом зн. списка Справочникссылка.Номенклатура

Функция ЗапросПоПартиямТМЦ(НачалоПериода, КонецПериода)
   Запрос = Новый Запрос;
   Текст = "
   |ВЫБРАТЬ
   |    ПартииОстаткиИОбороты.Регистратор КАК Регистратор,
   |    СУММА(ПартииОстаткиИОбороты.СуммаУпрНачальныйОстаток) КАК СебестоимостьУпрНачальныйОстаток,
   |    СУММА(ПартииОстаткиИОбороты.СуммаУпрПриход) КАК СебестоимостьУпрПриход,
   |    СУММА(ПартииОстаткиИОбороты.СуммаУпрРасход) КАК СебестоимостьУпрРасход,
   |    СУММА(ПартииОстаткиИОбороты.СуммаУпрКонечныйОстаток) КАК СебестоимостьУпрКонечныйОстаток
   |ИЗ
   |    РегистрНакопления.Партии.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, , ) КАК ПартииОстаткиИОбороты
   |ГДЕ
   |    (ПартииОстаткиИОбороты.СтатусПартии = &СтатусПартии) ";
   //добавляем отбор по номенклатуре в текст запроса
   Если НЕ (НоменклатураДляОтчетов.Количество()=0) Тогда
       Текст = Текст + "И (";
       СтаршийИндекс=ЭлементыФормы.НоменклатураДляОтчетов.Значение.Количество()-1;
       Для Счетчик=0 По СтаршийИндекс Цикл
           Текст = Текст+"ПартииОстаткиИОбороты.Номенклатура В ИЕРАРХИИ (&Номенклатура"+счетчик+")";
           Если Счетчик < СтаршийИндекс Тогда
               Текст = Текст + " ИЛИ ";
           Иначе
               Текст = Текст + ")";
           КонецЕсли;
           Номенклатура = "Номенклатура"+Счетчик;
           Запрос.УстановитьПараметр(Номенклатура, ЭлементыФормы.НоменклатураДляОтчетов.Значение[Счетчик].Значение);  
       КонецЦикла;
   КонецЕсли;
   Текст = Текст + "
   |СГРУППИРОВАТЬ ПО
   |   ПартииОстаткиИОбороты.Регистратор
   |УПОРЯДОЧИТЬ ПО
   |    Регистратор.Дата
   |";
   Запрос.Текст = Текст;
   Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
   Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
   Запрос.УстановитьПараметр("СтатусПартии", Перечисления.СтатусыПартий.Собственная);
   Выборка = Запрос.Выполнить().Выбрать();
   Возврат Выборка;
КонецФункции

У меня это работает
17 gwalker
 
27.03.07
13:49
(15) именно
18 Широкий
 
27.03.07
13:51
(16) :)) Условие по номенклатуре просто офигенное ... то что ты написал в 14 строках можно ужать до одной
19 gwalker
 
27.03.07
14:08
(18) рад принять любую помостчь :)
20 Широкий
 
27.03.07
14:24
(19) + Условие не в параметрах виртуальной таблицы
Наверно примерно
Текст = "
|ВЫБРАТЬ
|    ПартииОстаткиИОбороты.Регистратор КАК Регистратор,
|    СУММА(ПартииОстаткиИОбороты.СуммаУпрНачальныйОстаток) КАК СебестоимостьУпрНачальныйОстаток,
|    СУММА(ПартииОстаткиИОбороты.СуммаУпрПриход) КАК СебестоимостьУпрПриход,
|    СУММА(ПартииОстаткиИОбороты.СуммаУпрРасход) КАК СебестоимостьУпрРасход,
|    СУММА(ПартииОстаткиИОбороты.СуммаУпрКонечныйОстаток) КАК СебестоимостьУпрКонечныйОстаток
|ИЗ
|    РегистрНакопления.Партии.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор,,&ТекстУсловия = ИСТИНА) КАК ПартииОстаткиИОбороты
|СГРУППИРОВАТЬ ПО
|   ПартииОстаткиИОбороты.Регистратор
|УПОРЯДОЧИТЬ ПО
|    Регистратор.Дата
|";

ТекстУсловия="СтатусПартии = &СтатусПартии";
Если НоменклатураДляОтчетов.Количество()>0 Тогда
   ТекстУсловия=ТекстУсловия+" И Номенклатура В ИЕРАРХИИ (&СписокНоменклатуры)";
КонецЕсли;

Запрос.Текст=СтрЗаменить(Запрос.Текст,"&ТекстУсловия",ТекстУсловия);

Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
Запрос.УстановитьПараметр("СтатусПартии", Перечисления.СтатусыПартий.Собственная);
Запрос.УстановитьПараметр("СписокНоменклатуры",НоменклатураДляОтчетов.ВыгрузитьКолонку("Значение"));
21 Широкий
 
27.03.07
14:25
+20
РегистрНакопления.Партии.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор,,&ТекстУсловия) КАК ПартииОстаткиИОбороты
22 vladnet
 
27.03.07
14:29
Что то все как то сложно, а так не пробывал:

Выборка = Справочники.Номенклатура.Выбрать(Подборка);
23 vladnet
 
27.03.07
14:30
+(22) да что то совсем не читаю
24 vladnet
 
27.03.07
14:35
В общем то (22) работает, проверил, а чтобы выбирать элементы еще и групп ниже нужно просто воспользоватся другой командой:

лВыборка=Справочники.Номенклатура.ВыбратьИерархически(Родитель);