Имя: Пароль:
1C
1C 7.7
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) нужно, он пока сам еще не знает об этом