Имя: Пароль:
1C
1C 7.7
v7: Запрос к двум источникам данным - не срабатывают условия
0 e053nk
 
26.11.12
02:15
Исходные данные: регистр остатоков товаров и справочник с миним. разрешенным остатком. Запрос должен анализировать позиции, у которых мин. остаток не равен 0, сравнивать с текущим остатком и выводить необходимое количество до оптимального заказа (тоже реквизит справочника)
1 Азат
 
26.11.12
02:21
ну а что. добавь в запрос переменную типа так
МинОст = Регистр.ОстаткиТоваров.Номенклатура.МинимальныйОстаток;

ну а потом условие (МинОст <> 0);
2 Азат
 
26.11.12
02:22
это если ты извращенчик и не хочешь просто 1С++ заюзать
3 miki
 
26.11.12
02:26
(0)Ну, а запрос-то где?
(1)В условии достаточно ">" ...
4 e053nk
 
26.11.12
02:27
Так, не знаю как, листинг кода правильно вставить

   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(АнализМинОтатков)
   |Период с ВыбКонПериода по ВыбКонПериода;
   |Обрабатывать НеПомеченныеНаУдаление;
   |Подразделение =Регистр.Склад.Подразделение, Справочник.МинОптЗапасы.Владелец ;
   |Номенклатура =Регистр.Склад.Номенклатура,Справочник.МинОптЗапасы.Номенклатура ;
   |Количество = Регистр.Склад.Количество;
   |МинимальныйЗапас = Справочник.МинОптЗапасы.МинимальныйЗапас;
   |ОптимальныйЗапас = Справочник.МинОптЗапасы.ОптимальныйЗапас;
   |Функция КоличествоКонОст = КонОст(Количество);
   |Функция МинимальныйЗапасСумма = Сумма(МинимальныйЗапас);
   |Функция ОптимальныйЗапасСумма = Сумма(ОптимальныйЗапас);
   //    |Функция НаЗаказСумма = Сумма(ОптимальныйЗапас);
//    |Функция НаЗаказСумма =Сумма(Запрос.ОптимальныйЗапасСумма-Запрос.КоличествоКонОст + Количество - Количество);// КОГДА  (Количество<=МинимальныйЗапас);
   |Функция НаЗаказСумма =Сумма(ОптимальныйЗапас-Количество + Количество - Количество); // КОГДА  (Количество<=МинимальныйЗапас);
   |Группировка Подразделение без групп;
   |Группировка Номенклатура без групп;
   |Условие(Подразделение в Подр);
   |Условие(Номенклатура в Номен);
   //|Условие((МинимальныйЗапас<>0) и (ОптимальныйЗапас<>0) и (Количество<МинимальныйЗапас));
//    |Условие(ОптимальныйЗапас>0); //МинимальныйЗапас
//    |Условие(МинимальныйЗапас-Количество>=0);// и (МинимальныйЗапас>0));
   |Условие(МинимальныйЗапас>0);// и (МинимальныйЗапас-Количество>=0));// и (ОптимальныйЗапас>0) );
   |"//}}ЗАПРОС
   ;

Проблема в том что указываю условие
|Условие(МинимальныйЗапас>0); то запрос мне выдает все позиции по остатку (т.е. и МинимальныйЗапас=0 ) , а если пытаюсь еще и сравнить на
(МинимальныйЗапас-Количество>=0) он мне вообще ересь выдает, я её даже к данным никак привязать немогучто бы проверить.
МинимальныйЗапас,ОптимальныйЗапас,Количество -это все типы число.Проверял на нескольких позициях, одна, контрольная на остатке есть=2, мин остаток=2,, Оптимальныйостаток=4. Т.е. заказать нужно еще 2штуки. В приведеном примере запрос выдаетпо этой конкретной позиции правильно, но вдобавок выводитеще и весь товар ,которыйесть на остатке.
Если указать еще условие (МинимальныйЗапас-Количество>=0) то  покажет корректно мин остаток=2,, Оптимальныйостаток=4, но остатко покажет =0 соответсвенно ивычисляет неправильно данные для заказа. Вчем может быть проблема?
5 e053nk
 
26.11.12
02:29
OFF Движок сам понял где код? или я какие то кнопки нажал?
6 КонецЦикла
 
26.11.12
02:31
(5) Нет, не нажимал, 146%
7 e053nk
 
26.11.12
02:33
Нашел статью
http://infostart.ru/public/83887/
там вроде подобное как ошибки 1с определяются, но что то к своему примеру применить ничего несмог
8 Азат
 
26.11.12
02:35
(0) давай тимку, сделаю за косарь
9 КонецЦикла
 
26.11.12
02:38
Выгрузи в ТЗ, посмотри что получается
сначала просто переменные, без условий и вычислений
10 miki
 
26.11.12
02:38
(4)
>>он мне вообще ересь выдает
Везде, где в формулах указал "Количество" и получишь ересь, ибо ресурс, для него функция нужна.
Для реквизитов справочника функции не нужны.

----------
>>=Сумма(ОптимальныйЗапас-Количество + Количество - Количество)

Веселая арифметика :)
11 e053nk
 
26.11.12
02:39
(8) вообще то я хотел понять в чем проблема, запрос вроде не сложный
12 e053nk
 
26.11.12
02:42
(10) выше есть функция заремленная
|Функция НаЗаказСумма =Сумма(Запрос.ОптимальныйЗапасСумма-Запрос.КоличествоКонОст + Количество - Количество);//
если её включить-результат не меняется
13 e053nk
 
26.11.12
03:28
(9)только заметил сообщение -много данных в выборке получается,но попробую щас
14 e053nk
 
26.11.12
03:36
Вообщем если без условиий и выражений выводит все сочетания подразделений и номенкалтур, выводит только значения МинимальныйЗапас и ОптимальныйЗапас, Количество=0
15 e053nk
 
26.11.12
03:40
если вставить |Функция КоличествоКонОст = КонОст(Количество);
то выводит правильно , но по всем складами без фильтрации по миностатку
16 e053nk
 
26.11.12
03:43
если вставить одно условие
|Условие(МинимальныйЗапас>0);
ничег оне происходит ,т.е.выводит все позиции на остатках
Это как такое может получаться?
17 miki
 
26.11.12
04:12
(14)выше же объяснил про ресурсы у регистров.
(15,16) У тебя нет прямой связи между товаром и его минимальным остатком. Ты связываешь их через справочник МинОптЗапасы, но запрос-то про это не знает. Запятая в описании переменной запроса - это не соединение.
18 e053nk
 
26.11.12
04:16
(17) не понял,какую еще связь нужноу казывать
|Номенклатура =Регистр.Склад.Номенклатура,Справочник.МинОптЗапасы.Номенклатура ;
вроде должна группировать по номенклатуре из двух источников?
19 miki
 
26.11.12
04:18
(18)Да, сложит из обеих таблиц.
Но к чему тут применить фильтр на минимальный остаток?
20 e053nk
 
26.11.12
04:21
Если запрос сложит из двух таблиц одну, значит в одной изсоставляюей результата будет поле МинимальныйЗапас  - к нему и должен применить
21 e053nk
 
26.11.12
04:27
Все пойду спать,не соображаю уже,продолжение позже
всем спасибо за отклики, если есть идей -все выслушаю
22 miki
 
26.11.12
04:28
(20)то, что хочется тебе и что принимает от тебя запрос - может и не совпадать. Ничего он тебе не должен.

Твой фильтр
>>  |МинимальныйЗапас = Справочник.МинОптЗапасы.МинимальныйЗапас;
>>  |Условие(МинимальныйЗапас>0);

Наложится на элементы справочника "МинОптЗапасы", но не на справочник Номенклатура. И уж тем более не на измерения регистра.
23 e053nk
 
26.11.12
08:50
(22) Общий смысл понятен,в запросе , как я понимаю, нельзя накладывать фильтры на итоговые значения по группировкам. Пойду 2 запроса делать с обходом -думал уйду от этого, фокус не удался
24 Ёпрст
 
26.11.12
09:16
(23) в прямом всё можно, в черном, нет
25 e053nk
 
26.11.12
09:20
(24) Это что значит?
26 Ёпрст
 
26.11.12
09:27
(25) что накладывая условия на результат вычисления функции в чорном запросе получишь не то, что от него ожидаешь - условие накладывается при расчете самой функции, а не на результат.
Т.е это обычный where в тексте запроса, а не фильтр по группировкам having.
27 e053nk
 
26.11.12
10:16
Ну, почти все понял, пошел писать