|
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
|
Ну, почти все понял, пошел писать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |