|
v7: Помогите в Запросе | ☑ | ||
---|---|---|---|---|
0
Henistaromin
16.07.12
✎
11:51
|
Всем добрый день. Ребят, наставьте на путь истинный =)
Имеется небольшой отчёт. Процедура Сформировать() ТекстЗапроса=" //Формируем запрос с условиями отбора | |Период С ДатаНач По ДатаКон; |Номенклатура = Документ.ПоступлениеТМЦ.Номенклатура, Документ.ВводОстатковТМЦ.Номенклатура, Документ.ОприходованиеТМЦ.Номенклатура, Документ.ПоступлениеТМЦИмпорт.Номенклатура, Документ.ПоступлениеТМЦРозница.Номенклатура; |НоменклатураКол = Регистр.ОстаткиТМЦ.Номенклатура; |Количество = Регистр.ОстаткиТМЦ.Количество; |Функция ВсегоДоков = Счётчик(); |Функция КоличествоНачОст = НачОст(Количество); |Функция КоличествоКонОст = КонОст(Количество); |Функция КоличествоПриход = Приход(Количество); |Условие (Номенклатура в ВыбНоменклатура); |Условие (НоменклатураКол в ВыбНоменклатура); //|Условие ( |Группировка НоменклатураКол;"; Запрос = СоздатьОбъект("Запрос"); Запрос.Выполнить(ТекстЗапроса); КоличествоМесяцев = (ДатаКон-ДатаНач)/30; //Вычисление количества месяцев в указанном периоде ТехОбр1 = Запрос.КоличествоПриход+Запрос.КоличествоНачОст-Запрос.КоличествоКонОст; //Вычисление параметра Z Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица( "Печать" ); Таб.ВывестиСекцию("Шапка"); Пока Запрос.Группировка("НоменклатураКол") = 1 Цикл ЕжемПродаж = (Запрос.КоличествоПриход+Запрос.КоличествоНачОст-Запрос.КоличествоКонОст)/КоличествоМесяцев; //Вычисление параметра С1 Если Запрос.КоличествоПриход = 0 Тогда // Если небыло приходов тогда во избежании ошибки деления на 0 говорим что нижеследующие переменные равны 0 ОборВмесяц = 0 ИначеЕсли ТехОбр1 = 0 Тогда ОборВмесяц = 0 Иначе ОборВмесяц = (ТехОбр1/Запрос.КоличествоПриход)*(Запрос.ВсегоДоков/КоличествоМесяцев)*100;//Вычисление параметра Z КонецЕсли; ОкрОборВмесяц = Окр(ОборВмесяц,2); //Округляем ежемесячные обороты до 2 знаков после запятой ОкрЕжемПродаж = Окр(ЕжемПродаж,2); //Округляем ежемесячные продажи до 2 знаков после запятой Если Запрос.НоменклатураКол.ЭтоГруппа() = 1 Тогда //Если в запрос попадает группа то мы ее не выводем в печать Продолжить Иначе Если ПустоеЗначение(Запрос.НоменклатураКол) = 1 Тогда //Если в запрос попадает пустое значение то мы его не выводем в печать Продолжить Иначе Таб.ВывестиСекцию("Строка_1"); КонецЕсли; КонецЕсли; КонецЦикла; Таб.Опции(0,0,0,0); Таб.ТолькоПросмотр(1); Таб.Показать("Печать",""); КонецПроцедуры Необходимо чтобы в расчет принимались приходы с 1 го и 2 го склада(Склад1,Склад2), а расходы с 1 го, 2 го и 3 го склада(Склад1, Склад2, Склад3). Выбираются склады непосредственно из формы отчета. Думаю для знающего человека это проблема на 5 секунд. Я вот не пойму как правильно прописать данное условие. Заранее благодарю всех, кто откликнулся. |
|||
1
andrewks
16.07.12
✎
11:53
|
а остатки?
|
|||
2
GLazNik
16.07.12
✎
11:54
|
Как-то так:
ТекстЗапроса=" //Формируем запрос с условиями отбора | |Период С ДатаНач По ДатаКон; |Номенклатура = Документ.ПоступлениеТМЦ.Номенклатура, Документ.ВводОстатковТМЦ.Номенклатура, Документ.ОприходованиеТМЦ.Номенклатура, Документ.ПоступлениеТМЦИмпорт.Номенклатура, Документ.ПоступлениеТМЦРозница.Номенклатура; |НоменклатураКол = Регистр.ОстаткиТМЦ.Номенклатура; |Количество = Регистр.ОстаткиТМЦ.Количество; |Склад = Регистр.ОстаткиТМЦ.Склад; |Функция ВсегоДоков = Счётчик(); |Функция КоличествоНачОст = НачОст(Количество); |Функция КоличествоКонОст = КонОст(Количество); |Функция КоличествоПриход = Приход(Количество) Когда Склад = ВыбСклад1; |Функция КоличествоРасход = Расход(Количество) Когда Склад = ВыбСклад2; |Условие (Номенклатура в ВыбНоменклатура); |Условие (НоменклатураКол в ВыбНоменклатура); |Группировка НоменклатураКол;"; Дальше самостоятельно |
|||
3
Ёпрст
16.07.12
✎
11:56
|
(0)
|Период С ДатаНач По ДатаКон; |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура; |Количество = Регистр.ОстаткиТМЦ.Количество; |Функция КоличествоПриходСклад = Приход(Количество) Когда (Склад в СписокСкладовПрихода); |Функция КоличествоРасходСклад = Расход(Количество) Когда (Склад в СписокСкладовРасхода); |Функция КоличествоПриходВсего = Приход(Количество); |Функция КоличествоРасходВсего = Расход(Количество); |Функция КоличествоНачОст = НачОст(Количество); |Функция КоличествоКонОст = КонОст(Количество); |Условие (Номенклатура в ВыбНоменклатура); |Группировка Номенклатура; |
|||
4
palpetrovich
16.07.12
✎
12:00
|
бери все из регистра, зачем вообще доки трогать?
|
|||
5
palpetrovich
16.07.12
✎
12:01
|
(3)+1 только наверное это избыточно:
|Функция КоличествоПриходВсего = Приход(Количество); |Функция КоличествоРасходВсего = Расход(Количество); |
|||
6
Ёпрст
16.07.12
✎
12:03
|
(5) вовсе нет. Так он увидит весь КоличествоПриходВсего и КоличествоРасходВсего + сойдутся останки..
|
|||
7
Ёпрст
16.07.12
✎
12:03
|
если сложит Начост+Приход-Расход = КонОст..
|
|||
8
palpetrovich
16.07.12
✎
12:04
|
(6) может и нет, но в (0) ему это не нужно :)
|
|||
9
Ёпрст
16.07.12
✎
12:06
|
(8) нужно, он пока сам еще не знает об этом
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |