Имя: Пароль:
1C
1С v8
Отобрать 2 значение
,
0 universal23
 
14.02.13
11:48
Добрый день форумчани!
Помогите подправить запрос. В РегистрСведений.ЗначенияСвойствОбъектов есть список, Объект(Контрагент), Свойства(Отбор по "Конец ключей УСЦ",), Значение(Дата).
Сначало нужно перебрать те контрогенты у котор. Значение<=СсылкаНаОбъект.Дата.
Потом выяснить сколько у этого контрагента кол-во ключей в Свойства(отобрать по "Количество ключей") и получить значение- Как эта сделать?

//перебирает всех контрагентов, если он находит Значение<=СсылкаНаОбъект.Дата и кол-во ключей, то цикл прерывается

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

   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
|  ЗначенияСвойствОбъектов.Объект КАК Контрагент,
|    КОЛИЧЕСТВО(ЗначенияСвойствОбъектов.Значение) КАК инфо
|ИЗ
|  РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов,
|    (ВЫБРАТЬ
|         ЗначенияСвойствОбъектов.Значение
|         ИЗ
|           РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|         ГДЕ                      
|           ЗначенияСвойствОбъектов.Свойство = &КоличествоКлючей)как КоличествоКлючей
|ГДЕ                      
|  ЗначенияСвойствОбъектов.Свойство = &Ключи
|  И ЗначенияСвойствОбъектов.Значение <= &ДатаПланаПродаж
|СГРУППИРОВАТЬ ПО ЗначенияСвойствОбъектов.Объект
|  ";

Запрос.УстановитьПараметр("Ключи", КонецКлючей.ссылка);
Запрос.УстановитьПараметр("ДатаПланаПродаж", ДатаПланаПродаж);
Запрос.УстановитьПараметр("КоличествоКлючей", КоличествоКлючей);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() цикл
 КолКлючей=Выборка.инфо;
....
КонецЦикла;
1 universal23
 
14.02.13
14:10
никто не знает ?
2 universal23
 
18.02.13
11:27
помогите пожалуйста написать запрос
3 Godofsin
 
18.02.13
11:30
Вот чессна тебе скажу - нихера не понял.
а запросы сжечь
4 Reset
 
18.02.13
11:33
не только запросы...
Пока Выборка.Следующий() Цикл
 Выборка = Запрос.Выполнить().Выбрать();
КонецЦикла;
5 Reset
 
18.02.13
11:35
(4) Хотя это работоспособная конструкция, в теории,хм. Просто выглядит дико просто
6 Галахад
 
гуру
18.02.13
11:37
Запрос по концу ключей
к нему левое соединение по количеству ключей
7 Peltzer
 
18.02.13
11:38
А кто мешает использовать такую конструкцию в запросе?
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КлючиИлиКакИхТам)
8 universal23
 
18.02.13
11:50
(4) Ща попробую..
(7) КОЛИЧЕСТВО - он у меня считает Сколько свойств(Кол-воКлючей) заполнено в значении- я второй запрос написал, там присутствует КОЛИЧЕСТВО, если еще добавить РАЗЛИЧНЫЕ  то тоже самое.
(3) мне надо 2 Свойство отобрать и 2 значение вывести, т.е. если 1 свойство отобрал и значение <= то отбираем 2-ое свойство и вівести значение
9 Reset
 
18.02.13
11:51
(8) Не надо пробовать, это я издевался. Не обращай внимания.
Лучше постарайся токойве рассказать задачу
10 Reset
 
18.02.13
11:51
толковей*
11 Peltzer
 
18.02.13
12:27

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

Так, что ли?
12 universal23
 
18.02.13
13:15
(6)    КонецКлючей=ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Конец ключей УСЦ");
   КоличествоКлючей=ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Количество ключей");
   ДатаПланаПродаж=СсылкаНаОбъект.Дата; //дата Документа ПланаПродаж

Запрос = Новый Запрос;    
   Запрос.Текст = "ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Объект КАК Контрагент,
| ЗначенияСвойствОбъектов.Свойство,
|   ЗначенияСвойствОбъектов.Значение,

| ЗначенияСвойствОбъектов1.Объект,
| ЗначенияСвойствОбъектов1.Свойство,
|   ЗначенияСвойствОбъектов1.Значение КАК Инфо
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|  ЛЕВОЕ СОЕДИНЕНИЕ
|    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов1
|   ПО (ЗначенияСвойствОбъектов.Объект=ЗначенияСвойствОбъектов1.Объект)
|ГДЕ                      
|  ЗначенияСвойствОбъектов.Свойство = &Ключи
|И   ЗначенияСвойствОбъектов.Значение <= &ДатаПланаПродаж
|И   ЗначенияСвойствОбъектов1.Свойство=&Ключи1
|";
Запрос.УстановитьПараметр("Ключи", КонецКлючей.ссылка);
Запрос.УстановитьПараметр("ДатаПланаПродаж",ДатаПланаПродаж);
 Запрос.УстановитьПараметр("Ключи1", КоличествоКлючей);
   Выборка = Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() цикл
     КолКлючей=Выборка.инфо;
КлючБухгалт=Справочники.Номенклатура.НайтиПоКоду("К00000050");
док=ссылканаобъект.ПолучитьОбъект();
стр=док.СоставПлана.Добавить();              стр.Номенклатура=КлючБухгалт;
стр.Количество="1";
стр.Контрагент=контрагент;            стр.СтавкаНДС=КлючБухгалт.СтавкаНДС;
стр.Договор=Контрагент.ОсновнойДоговорКонтрагента;
док.Записать();
КонецЦикла;
записывает одного контрагента и цикл прерывается, а нужно список вывести- в чем проблема-где ошибка?

(10) Постараюсь еще более подробно объяснить..
(11) Запрос.Параметры.(); // тут ошибка,какой параметр хотел задать?

Объясняю еще раз в РегистреСведений.ЗначенияСвойствОбъектов  есть список в Колонке(ОБЪЕКТ) контрагенты. (СВОЙСТВО) КонецКлючей,Кол-воКлючей и много другое. (ЗНАЧЕНИЕ)тут понятно что выводит, даты,цифры и т.д.
Мне нужно сначало по (СВОЙСТВО)КонецКлючей Найти Дату, сравнить эту дату с СозданииДокументаПланаПродаж- т.е. в запросе делаем так (ЗначенияСвойствОбъектов.Значение <= &ДатаПланаПродаж) если значение подходит ТОГДА по этому контрагенту будем выбирать следующее СВОЙСТВО КоличествоКлючей и вывести ЗНАЧЕНИЕ и так  нужно список вывести, а у меня только один контрагент выводит и цикл прерывается.
13 Галахад
 
гуру
18.02.13
13:18
Вообще не читабельно.
14 Reset
 
18.02.13
13:22
(12) В (6) вроде правильно тогда
15 universal23
 
18.02.13
13:37
Все спасибо большое, разобрался