1с 7.7 тис 964 черный запрос

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#1
есть задача - отобрать по регистру ПартииНаличные движение и остатки за указанный период по выбранной товарной группе (или товару). теперь нужно построить запрос таким образом чтобы вытаскивать свойство номенклатуры Размер.

Попытался упростить задачу и выбрать просто из справочника данное свойство по одному товару. запрос ничего не возвращает.
Код:
ТекстЗапроса = 
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ТекущийЭлемент = Справочник.СвойстваНоменклатуры.ТекущийЭлемент;
|Номенклатура = Регистр.ПартииНаличие.Номенклатура;
|Владелец = Справочник.СвойстваНоменклатуры.Владелец;
|ВидСвойства = Справочник.СвойстваНоменклатуры.ВидСвойства;
|ЗначениеСвойства = Справочник.СвойстваНоменклатуры.ЗначениеСвойства;
|Группировка Номенклатура;
|Группировка ТекущийЭлемент;
|Условие((Владелец = Товар));
|"//}}ЗАПРОС
;
Помогите пожалуйста написать правильный текст. Я ламо в запросах
 

puh14

Well-known member
11.07.2008
1 412
0
#2
что-то нет ни функции движения ни остатков. ни связи межу измерением номенклатура и справочником свойства номенклатуры. Вопрос - размер это элемент какого справочника?
 

vbs

Well-known member
18.02.2007
1 708
1
#3
А чем не устраивает стандартный отчет
ВедомостьПоПартиямТМЦ ?
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#4
есть справочник Свойства Номенклатуры, который по идее подчинен справочнику номенклатура. в нем 2 реквизита - ВидСвойства и ЗначениеСвойства.
в справочнике видов свойств есть группа Свойства Номенклатуры, а в ней элемент - Размер. вот его значение мне и нужно получить

А чем не устраивает стандартный отчет
ВедомостьПоПартиямТМЦ ?
На основании его я и сделал свой - внешний вид хотели другой. вот теперь только к нему нада прикрутить размер чтобы выводить номенклатура.наименование+(Номенклатура.свойство.размер)
 

vbs

Well-known member
18.02.2007
1 708
1
#5
А если сам будешь изготавливать запрос, стоит лучше вместо
|Владелец = Справочник.СвойстваНоменклатуры.Владелец;
|ВидСвойства = Справочник.СвойстваНоменклатуры.ВидСвойства;
|ЗначениеСвойства = Справочник.СвойстваНоменклатуры.ЗначениеСвойства;

использовать
|ЗначениеСвойства = Регистр.ПартииНаличие.Партия.Свойство;
 

puh14

Well-known member
11.07.2008
1 412
0
#6
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Свойства = Справочник.СвойстваНоменклатуры.ТекущийЭлемент;
|Номенклатура = Регистр.ПартииНаличие.Номенклатура,Справочник.СвойстваНоменклатуры.Владелец;
|КолВо = Регистр.ПартииНаличие.Количество;
|Группировка Номенклатура;
|Группировка Свойства;
|Функция ПрКол = Приход(КолВо);
|Функция РасКол = Расход(КолВо);
|Функция ОстКол = КонОст(КолВо);
|Условие((Свойства.Владелец = Номенклатура));//связка между свойством и номенклатурой, на всякий случай.
|Условие((Свойства.ВидСвойства = ВыбВид));//тут собсно тип размер
|Условие((Свойства.ЗначениеСвойства = ВыбЗначение));//тут значение размер
|Условие(( Номенклатура = товар));//тут отбор по конкретному товару
|"//}}ЗАПРОС

как-то так. А пустое у тебя было, потому как пока не укажешь функции - ничего из регистров показывать не будет.

Добавлено:
А если сам будешь изготавливать запрос, стоит лучше вместо
|Владелец = Справочник.СвойстваНоменклатуры.Владелец;
|ВидСвойства = Справочник.СвойстваНоменклатуры.ВидСвойства;
|ЗначениеСвойства = Справочник.СвойстваНоменклатуры.ЗначениеСвойства;

использовать
|ЗначениеСвойства = Регистр.ПартииНаличие.Партия.Свойство;
А если так, то покажет и всевозможные размеры
|ЗначениеСвойства = Регистр.ПартииНаличие.Партия.Свойство, Справочник.СвойстваНоменклатуры.ЗначениеСвойства;
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#7
А если так, то покажет и всевозможные размеры
|ЗначениеСвойства = Регистр.ПартииНаличие.Партия.Свойство, Справочник.СвойстваНоменклатуры.ЗначениеСвойства;
Добавил. получаю ошибку - Значение не представляет агрегатный объект (родитель): 26
 

vbs

Well-known member
18.02.2007
1 708
1
#8
Нарисуй весь запрос - что-то родитель нигде не фигурирует
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#9
не фигурирует. не знаю его куда вкинуть. вот как делал:
Код:
"//{{ЗАПРОС(Сформировать)
|Период с НачДата по КонДата;
|Без итогов;
|Номенклатура	= Регистр.ПартииНаличие.Номенклатура;
//	|Партия			= Регистр.ПартииНаличие.Партия;
|СвойствоПартии	= Регистр.ПартииНаличие.Партия.Свойство,Справочник.СвойстваНоменклатуры.ЗначениеСв
ойства;
|Поставщик		= Регистр.ПартииНаличие.Партия.Поставщик;
|КодОперации	= Регистр.ПартииНаличие.КодОперации;
|Количество 	= Регистр.ПартииНаличие.Количество;
|Артикул 		= Регистр.ПартииНаличие.Номенклатура.Артикул;
|СвойствоИмя 	= Справочник.СвойстваНоменклатуры.ТекущийЭлемент;
|ВладелецС 		= Справочник.СвойстваНоменклатуры.ТекущийЭлемент.Владелец;
|Свойство		= Справочник.СвойстваНоменклатуры.ТекущийЭлемент.ВидСвойства;
//	|Размер  		= Справочник.СвойстваНоменклатуры.ТекущийЭлемент.ЗначениеСвойства;
|Функция НачОстК = НачОст(Количество);
|Функция ПриходК = Приход(Количество) Когда ((КодОперации <> глКО.Перемещение) И (КодОперации <> глКО.Перемещение) И (КодОперации <> глКО.ПередачаВРозницу) И (КодОперации <> глКО.ВозвратИзРозницы));
|Функция РасходК = Расход(Количество) Когда ((КодОперации <> глКО.Перемещение) И (КодОперации <> глКО.Перемещение) И (КодОперации <> глКО.ПередачаВРозницу) И (КодОперации <> глКО.ВозвратИзРозницы));
|Функция КонОстК = КонОст(Количество);
|Группировка Артикул;
|Группировка Номенклатура без Групп;
|Группировка СвойствоПартии;";
;
Если ПустоеЗначение(ВыбПоставщик) = 0 Тогда
ТекстЗапроса = ТекстЗапроса + "Условие(Поставщик = ВыбПоставщик);";
Конецесли;	
ТекстЗапроса = ТекстЗапроса + ?(Товар.ЭтоГруппа() = 1,"Условие(Номенклатура.родитель = Товар);","Условие(Номенклатура = Товар);");//+
"Условие ((ВладелецС = Номенклатура) И (СвойствоИмя = ВидсвойстваРазмер));");
на самом деле текст запроса "латанный-перелатанный" а как правильно должно быть - я х.з.
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#10
|Условие((Свойства.ЗначениеСвойства = ВыбЗначение));//тут значение размер
Вот тут не понятно. мне нужно не передавать значение, а получать значение.
 

vbs

Well-known member
18.02.2007
1 708
1
#11
А так попробовать
Код:
"//{{ЗАПРОС(Сформировать)
|Период с НачДата по КонДата;
|Без итогов;
|Номенклатура	= Регистр.ПартииНаличие.Номенклатура;
|СвойствоПартии	= Регистр.ПартииНаличие.Партия.Свойство;
|Поставщик		= Регистр.ПартииНаличие.Партия.Поставщик;
|КодОперации	= Регистр.ПартииНаличие.КодОперации;
|Количество	 = Регистр.ПартииНаличие.Количество;
|Артикул		 = Регистр.ПартииНаличие.Номенклатура.Артикул;
|Функция НачОстК = НачОст(Количество);
|Функция ПриходК = Приход(Количество) Когда ((КодОперации <> глКО.Перемещение) И (КодОперации <> глКО.Перемещение) И (КодОперации <> глКО.ПередачаВРозницу) И (КодОперации <>  
глКО.ВозвратИзРозницы));
|Функция РасходК = Расход(Количество) Когда ((КодОперации <> глКО.Перемещение) И (КодОперации <> глКО.Перемещение) И (КодОперации <> глКО.ПередачаВРозницу) И (КодОперации <>	
глКО.ВозвратИзРозницы));
|Функция КонОстК = КонОст(Количество);
|Группировка Артикул;
|Группировка Номенклатура без Групп;
|Группировка СвойствоПартии;
|Условие(Номенклатура = Товар); // все равно указано Без групп
|Условие (СвойствоПартии = ВидсвойстваРазмер);
|Условие(Поставщик в ВыбПоставщик);";
 

vbs

Well-known member
18.02.2007
1 708
1
#13
Да вроде, просто вырезка из типового отчета по партиям.
Чему там не получаться ?
Я бы просто взял этот типовой отчет, выгрузил его запрос в ТЗ и посмотрел.
Все данные устанавливаются группировками, и фильтр по свойствам есть.
А на основе этой ТЗ наваял бы нужную выходную форму.

PS. А литру я и так готов выкатить. Уж больно мне год назад "хакерский" метод помог ;)
 

puh14

Well-known member
11.07.2008
1 412
0
#14
Рекомендую в условиях ставить для ссылочных данных вместо "=" "В" - отлично отрабатывает для всяких там групп и элементов.
Собственно вместо ?(Товар.ЭтоГруппа() = 1,"Условие(Номенклатура.родитель = Товар);","Условие(Номенклатура = Товар);") пишется просто "Номенклатура В товар;"

Кокй сейчас текущий текст запроса?
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#15
Код:
 |Условие (СвойствоПартии = ВидсвойстваРазмер);
ни в какую не хочет работать это условие.

решил попробовать упростить запрос
Код:
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Без Итогов;
|ВладелецСвойства = Справочник.СвойстваНоменклатуры.Владелец;
|ВидСвойства = Справочник.СвойстваНоменклатуры.ВидСвойства;
|ТекущийЭлемент = Справочник.СвойстваНоменклатуры.ТекущийЭлемент;
|ЗначениеСвойства = Справочник.СвойстваНоменклатуры.ЗначениеСвойства;
|Группировка ВладелецСвойства без групп;
|Группировка ЗначениеСвойства без групп;
|Условие((ВладелецСвойства = товар);
так выводит значение всех свойств товара. если добавляю условие - (ВидСвойства = ВидСвойстваРазмер);
ничего не выводит вообще
 

vbs

Well-known member
18.02.2007
1 708
1
#16
Похоже, путаешь вид свойства и значение свойства
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#17
использовать
|ЗначениеСвойства = Регистр.ПартииНаличие.Партия.Свойство;
не получится, ибо это свойство просто не заполнено. а вот в справочнике свойств номенклатуры есть то что нужно
-------------------------------------------------------------------------------------------------------------------------------------------
текс. с упрощенным запросом разобрался. лохонулся тут - не спозиционировался на ТекущемЭлементе...
ВдСвойстваРазмер = СоздатьОбъект("Справочник.ВидыСвойств");
ВдСвойстваРазмер.НайтиПоНаименованию("Размер",0);
ВидСвойстваРазмер = ВдСвойстваРазмер.ТекущийЭлемент();

решил к этот простой заработавший запрос немного видоизменить:
Код:
//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Без Итогов;
|ВладелецСвойства = Регистр.ПартииНаличие.Номенклатура, Справочник.СвойстваНоменклатуры.Владелец;
|КолВо = Регистр.ПартииНаличие.Количество;
|ВидСвойства = Справочник.СвойстваНоменклатуры.ВидСвойства;
|ТекущийЭлемент = Справочник.СвойстваНоменклатуры.ТекущийЭлемент;
|ЗначениеСвойства = Справочник.СвойстваНоменклатуры.ЗначениеСвойства;
//	|Функция ПрКол = Приход(КолВо);
//	|Функция РасКол = Расход(КолВо);
//	|Функция ОстКол = КонОст(КолВо);
|Группировка ВладелецСвойства без групп;
|Группировка ЗначениеСвойства без групп;
|Условие((ВладелецСвойства = товар));
|Условие(ВидСвойства = ВидСвойстваРазмер.ТекущийЭлемент());
|"//}}ЗАПРОС;
так отрабатывает нормально. но как только раскомментирую строки с функциями - уже не возвращает ничего. неужто Дайнеко прав?!?! :( :(

Пожалуйста подскажите как быть в моей ситуации? уж очень не хочется простой перебор значений... :please:
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#18
так и не поборол я эту штуку - в итоге сделал 2 запроса - сначала одним вынимаю всю номенклатуру из Партий Наличие, а потом подаю это на вход Справочника Свойств Номенклатуры...
Всем спасибо за участие. Особо активным участникам выдам благодарственные ;)
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#19
Помогите, пожалуйста, еще с одним запросом, а вернее с условием...
Необходимо выбрать все заявки покупателей у которых нет подчиненных документов или же эти подчиненные документы не проведены
 

vbs

Well-known member
18.02.2007
1 708
1
#20
Проще сделать перебором заявок в цикле, собирая в таблицу заявки без подчиненных или с непроведенными подчиненными.
Кода получится строк на пять