|
v7: условие в запросе | ☑ | ||
---|---|---|---|---|
0
Bahon
14.09.12
✎
11:51
|
|Товар = Регистр.ОстаткиТоваров.Товар;
|Каталог = Регистр.ОстаткиТоваров.Товар.Каталог; |Склад = Регистр.ОстаткиТоваров.Склад; |Кол = Регистр.ОстаткиТоваров.ОстатокТовара; |Функция КонКол = КонОст(Кол); как взять только те товары, в которых КонКол>0 условие типа Запрос.конкол>0 не правильно выводит... без условия выводит все товары, а мне надо те товары которые конечный остаток больше нуля |
|||
1
Bahon
14.09.12
✎
13:21
|
Неужели никто не может помочь?
|
|||
2
1Сергей
14.09.12
✎
13:32
|
он и так покажет только не нулевые
|
|||
3
Bahon
14.09.12
✎
13:43
|
если бы так...
|
|||
4
expertus
14.09.12
✎
13:46
|
(3) либо это так, либо ты не весь запрос скопипастил.
|
|||
5
1Сергей
14.09.12
✎
13:46
|
(3) ну, дык покажи весь запрос
|
|||
6
1Сергей
14.09.12
✎
13:47
|
Блин, Баха. Не узнал тебя, привет! :)
|
|||
7
Bahon
14.09.12
✎
13:49
|
Привет
|Период С ДатаОтчета По ДатаОтчета; |Обрабатывать НеПомеченныеНаУдаление; |Товар = Регистр.ОстаткиТоваров.Товар; |НомерОрдина = Регистр.ОстаткиТоваров.Ордин; |Каталог = Регистр.ОстаткиТоваров.Товар.Каталог; |Склад = Регистр.ОстаткиТоваров.Склад; |КодИБ = Регистр.ОстаткиТоваров.Склад.КодПерБазы; |Кол = Регистр.ОстаткиТоваров.ОстатокТовара; |"+?(((флТенге=0)И(флВалюта=0))или(РежЦ>1),""," |БазСто = Регистр.ОстаткиТоваров.БазоваяСтоимость; |ВалСто = Регистр.ОстаткиТоваров.ВалютнаяСтоимость; |Функция БазСто1 = КонОст(БазСто); |Функция ВалСто1 = КонОст(ВалСто);")+" |Функция КонКол = КонОст(Кол);"; Если ВыбФирма.Выбран()=1 Тогда ТекстЗапроса=ТекстЗапроса+" |Фирма = Регистр.ОстаткиТоваров.Фирма; |Условие (Фирма в ВыбФирма);"; КонецЕсли; Если ТекРежимВыбора=1 Тогда ТекстЗапроса=ТекстЗапроса+" |Условие (Товар в ВыбТовар2); |Условие (Склад в ВыбСклад2);"; Иначе ТекстЗапроса=ТекстЗапроса+" |Условие (Товар в ВыбТовар); |Условие (Склад в ВыбСклад);"; КонецЕсли; ТекстЗапроса=ТекстЗапроса+" |Условие (Каталог в ВыбКаталог); |Условие (НомерОрдина в ВыбПартии); |Группировка Товар упорядочить по Товар.Наименование; |Группировка НомерОрдина упорядочить по НомерОрдина.Наименование; |Группировка Склад упорядочить по Склад.Код Все ВошедшиеВЗапрос; |
|||
8
expertus
14.09.12
✎
13:51
|
Дай угадаю. Задача найти товары, у которых списано количество, но не списана себестоимость?
|
|||
9
Bahon
14.09.12
✎
13:52
|
я в отчете хочу лишние товары без остатков убрать...
|
|||
10
1Сергей
14.09.12
✎
13:52
|
(8) нет, там дело куда серьёзнее
|
|||
11
expertus
14.09.12
✎
13:54
|
(9) в базе есть косяки с себестоимостью, и ты условием хочешь эти косяки замаскировать?
|
|||
12
Bahon
14.09.12
✎
14:00
|
(11)дело в количестве, отчет выводит все товары с регистра, я хочу отфильтровать и нулевые товары убрать, зачем они в отчете
|
|||
13
Boroda
14.09.12
✎
14:06
|
Тут наверное в строке с нулевым количеством или БазСто1, или ВалСто1 не равны нулю. Вот и выводит..
|
|||
14
Bahon
14.09.12
✎
14:07
|
пробовал в ТЗ выгрузить, но там все перелопатить надо, лучше конечно изначально в запросе сразу ненулевые выбрать
|
|||
15
1Сергей
14.09.12
✎
14:08
|
(13) там при определённых условиях
|"+?(((флТенге=0)И(флВалюта=0))или(РежЦ>1),""," |БазСто = Регистр.ОстаткиТоваров.БазоваяСтоимость; |ВалСто = Регистр.ОстаткиТоваров.ВалютнаяСтоимость; |Функция БазСто1 = КонОст(БазСто); |Функция ВалСто1 = КонОст(ВалСто);")+" вообще не вставляется в запрос, но всё-равно выходят строки с количеством = 0 |Функция КонКол = КонОст(Кол);"; |
|||
16
1Сергей
14.09.12
✎
14:09
|
(14) попробуй поудалять всё лишнее из текста запроса.
|Каталог = Регистр.ОстаткиТоваров.Товар.Каталог; |КодИБ = Регистр.ОстаткиТоваров.Склад.КодПерБазы; вот это не нужно |
|||
17
Boroda
14.09.12
✎
14:11
|
Попробуй уберать вот это:
...Все ВошедшиеВЗапрос; и чтобы не попадали в запрос строки |Функция БазСто1 = КонОст(БазСто); |Функция ВалСто1 = КонОст(ВалСто);")+" |
|||
18
Bahon
14.09.12
✎
14:20
|
не получается, дело не в них...
|Функция БазСто1 = КонОст(БазСто); |Функция ВалСто1 = КонОст(ВалСто); они действуют если галочки на стоимости, да и колонку выводят... а я без галочек |
|||
19
Boroda
14.09.12
✎
14:25
|
А "Все ВошедшиеВЗапрос" пробовал убирать?
|
|||
20
Bahon
14.09.12
✎
14:26
|
пробовал... безрезультатно
|
|||
21
Boroda
14.09.12
✎
14:29
|
Ну тогда убери "|Обрабатывать НеПомеченныеНаУдаление;" - для регистра это неактуально.
|
|||
22
Bahon
14.09.12
✎
14:31
|
удалил, хотя вряд ли это поможет
|
|||
23
Boroda
14.09.12
✎
14:33
|
Просто выполни сперва вот такой запрос:
ТекстЗапроса = " |Товар = Регистр.ОстаткиТоваров.Товар; |Кол = Регистр.ОстаткиТоваров.ОстатокТовара; |Функция КонКол = КонОст(Кол); |Группировка Товар"; 100% не должен нулевые остатки показывать. Ну а дальше добавляй потихоньку строки... :) |
|||
24
Boroda
14.09.12
✎
14:36
|
Чтоб быстрее работало период, пока на этапе тестирования, не задавай.
Я обычно прямо на форму временно кладу тз и делаю выгрузку результатов в него. Ну а потом уже "рюшечки" :) |
|||
25
Bahon
14.09.12
✎
14:38
|
а как быть с этим
Запрос.ВНачалоВыборки(); Пока Запрос.Группировка(1)=1 Цикл //* по товарам Если Запрос.Товар.ЭтоГруппа()=1 Тогда ОВывестиСекцию("Группа","Основная",Запрос,Таб); Если (РежЦ=2)И((флТенге<>0)ИЛИ(флВалюта<>0)) Тогда ОВывестиСекцию("Группа","Цены",Запрос,Таб); КонецЕсли; КонецЕсли; Пока Запрос.Группировка(2)=1 Цикл //* по ординам Если Запрос.НомерОрдина.ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли; КолСкладов=0; ТекСклад=0; Если Запрос.Товар.ЭтоГруппа()=0 Тогда Резерв = Регистр.РезервыТоваров.СводныйОстаток(Запрос.Товар, Запрос.НомерОрдина, , , "РезервТовара"); ОВывестиСекцию("Товар","Основная",Запрос,Таб); Если (РежЦ=2)И((флТенге<>0)ИЛИ(флВалюта<>0)) Тогда ЦенВал=ЦенаПоОрдину(Запрос.Товар,Запрос.НомерОрдина,ДатаОтчета); //ЦенВал2=ЦенВал-Скидка(Запрос.Товар,Запрос.НомерОрдина,ЦенВал); //* получим скидку СкидкаМакс=0; СкидкаМаксСум=0; глСкидка(Контекст,,Запрос.Товар,Запрос.НомерОрдина,,1,,,,ДатаОтчета,Константа.ОсновнаяВалюта,ТекущаяДата(),Константа.ОснВидАкции.Получить(ДатаОтчета),0,,СкидкаМакс,СкидкаМаксСум,,,,); Если (СкидкаМакс=0)И(СкидкаМаксСум<>0) Тогда // в данной ситуации скидка задана в денежном эквиваленте ЦенВал2=ЦенВал-СкидкаМаксСум; Иначе // в данной ситуации скидка задана в процентах ЦенВал2=ЦенВал*(100-СкидкаМакс)/100; КонецЕсли; ОВывестиСекцию("Товар","Цены",Запрос,Таб); КонецЕсли; КонецЕсли; Пока Запрос.Группировка(3)=1 Цикл //* по складам Если Запрос.Склад.ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли; КолСкладов = КолСкладов + 1; Если Запрос.Товар.ЭтоГруппа()=1 Тогда ОВывестиСекцию("Группа","Склад",Запрос,Таб); Иначе Если Запрос.КонКол=0 Тогда Иначе //Сообщить("Товар -"+ТЗ.Товар +", Остаток - "+ ТЗ.КонКол); НС=0; Если ТаблицаИтогов.НайтиЗначение(Запрос.Склад,НС,"Склад")=1 Тогда ТаблицаИтогов.ПолучитьСтрокуПоНомеру(НС); ТаблицаИтогов.Количество = ТаблицаИтогов.Количество + Запрос.КонКол; КонецЕсли; Если флТенге=1 Тогда Если РежЦ=1 Тогда СумТен=Формат(Запрос.БазСто1*КоэфНДС,"Ч017.2.,"); ТаблицаИтогов.СумТен = ТаблицаИтогов.СумТен + Запрос.БазСто1*КоэфНДС; ИначеЕсли РежЦ=2 Тогда СумТен=Формат(ЦенВал*Запрос.КонКол*КоэфНДС*КурсЕвро,"Ч017.2.,"); ТаблицаИтогов.СумТен = ТаблицаИтогов.СумТен + ЦенВал*Запрос.КонКол*КоэфНДС*КурсЕвро; КонецЕсли; КонецЕсли; Если флВалюта=1 Тогда Если РежЦ=1 Тогда СумВал=Формат(Запрос.ВалСто1*КоэфНДС,"Ч017.2.,"); ТаблицаИтогов.СумВал = ТаблицаИтогов.СумВал + Запрос.ВалСто1*КоэфНДС; ИначеЕсли РежЦ=2 Тогда СумВал=Формат(ЦенВал*Запрос.КонКол*КоэфНДС,"Ч017.2.,"); ТаблицаИтогов.СумВал = ТаблицаИтогов.СумВал + ЦенВал*Запрос.КонКол*КоэфНДС; КонецЕсли; КонецЕсли; КонецЕсли; ОВывестиСекцию("Товар","Склад",Запрос,Таб); КонецЕсли; КонецЦикла; Если флСостав=1 Тогда Если Найти(Врег(Запрос.НомерОрдина.Наименование),"ZKC")>0 Тогда Состав=глПолучитьСоставПродукции(Запрос.НомерОрдина,Запрос.Товар,ДатаОтчета); //Состав.ВыбратьСтроку(); Состав.ВыбратьСтроки(); Пока Состав.ПолучитьСтроку()=1 Цикл ОВывестиСекцию("Комплектующее","Основная",Запрос,Таб); Если (РежЦ=2)И((флТенге<>0)ИЛИ(флВалюта<>0)) Тогда ЦенВал=Состав.Сумма/Состав.Количество; ЦенВал2=(Состав.Сумма-Состав.Скидка)/Состав.Количество; ОВывестиСекцию("Комплектующее","Цены",Запрос,Таб); КонецЕсли; Для Идн=1 По КолСкладов Цикл Если Идн=ТекСклад Тогда КолКомплектующих=Состав.Количество; Если РежЦ>1 Тогда СумТен=Формат(Состав.Сумма*Константа.ОсновнаяВалюта.Текущ_курс.Получить(ДатаОтчета),"Ч017.2.,"); СумВал=Формат(Состав.Сумма,"Ч017.2.,"); Иначе СумТен=Формат(Состав.СебестоимостьБаз,"Ч017.2.,"); СумВал=Формат(Состав.СебестоимостьВал,"Ч017.2.,"); КонецЕсли; Иначе КолКомплектующих=0; СумТен=""; СумВал=""; КонецЕсли; ОВывестиСекцию("Комплектующее","Склад",Запрос,Таб); КонецЦикла; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; |
|||
26
Bahon
14.09.12
✎
14:41
|
я пробовал конечно, после запроса ненулевые отшлифовать, но надо именно в запросе как то ненулевые товары взять
|
|||
27
Boroda
14.09.12
✎
14:44
|
Ну ты сделал запрос из (23)?
Если сделал и нулей нет, то дальше добавляем след.группировку: "Ордин" Опять смотрим тз и должны видеть что нулей нет! |
|||
28
Bahon
14.09.12
✎
14:50
|
хотя на конец месяца нули исчезают
|
|||
29
Bahon
14.09.12
✎
14:52
|
(28) это я к тому что может не надо(27) а то в табличке хватает колонок и строк, начнет щя ругаться...
|
|||
30
Boroda
14.09.12
✎
14:54
|
Табличка "ругаться" не будет - ей положено выводить колонки.
|
|||
31
Cthulhu
14.09.12
✎
14:55
|
пихать в запрос то, что можно отшелушивать при выборке результатов, следует только в случаях, когда в результате впихивания время выполнения запроса существенно не увеличится при существенном снижении объемов получаемых запросом данных.
это - не тот случай. |
|||
32
Ochkarito
14.09.12
✎
14:57
|
|Функция КонКол = КонОст(Кол) Когда (Кол > 0);
|
|||
33
Cthulhu
14.09.12
✎
15:01
|
(32): и в группировке, в которой участвуют Кол +5,-7,+3 вместо +1 получишь +8... оно тебе надо?..
|
|||
34
Boroda
14.09.12
✎
15:07
|
Действительно, при выставлении периода появляются товары с нулевыми строками...
Ну тогда, может, просто проигнорировать эти строки в момент вывода в печать? |
|||
35
Cthulhu
14.09.12
✎
15:08
|
(34): именно. см.(31).
|
|||
36
Bahon
14.09.12
✎
15:08
|
вот теперь начинаете понимать...
|
|||
37
1Сергей
14.09.12
✎
15:09
|
(35) там лишние группы выводятся тогда
|
|||
38
Bahon
14.09.12
✎
15:10
|
(29)
|
|||
39
1Сергей
14.09.12
✎
15:11
|
(31) ты объясни лучше, почему туда вообще нулевые попадают. По идее не должны
|
|||
40
Bahon
14.09.12
✎
15:17
|
(34) Как? там же группировки стоят
|
|||
41
Bahon
14.09.12
✎
15:26
|
(39)по идее да, потому что нулевые списанные. Их вообще в регистре не должно быть....
|
|||
42
Bahon
14.09.12
✎
15:41
|
(33) и условие запрос.конкол>0 также работает как и кол>0, почему?
|
|||
43
Boroda
14.09.12
✎
17:18
|
В общем, посмотрел я прямым запросом свой итоговый регистр "ОстакиТМЦ" , структура такая же как и в типовой.
Пример: У меня нулевые остатки появляются по Товару1. Анализ записей итогового регистра по этому товару дал следующие записи: Фирма1 Товар1 Склад1 ЦенаПрод1 180 Фирма2 Товар1 Склад1 ЦенаПрод1 -180 т.е. пересорт по фирме - некорректное закрытие регистра по данному товару. Посмотри вот этим запросом остатки по товару по которым нулевые остатки, но выводятяся в результат запроса. РегОбщ = СоздатьОбъект("Регистры"); РегОстатки = РегОбщ.ОстаткиТМЦ; РегОстатки.УстановитьЗначениеФильтра("Номенклатура", ВыбНоменклатура, 1); РегОстатки.ВыгрузитьИтоги(тз,1,1); Возможно, по какому то измерению идет пересорт. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |