Имя: Пароль:
1C
1C 7.7
v7: Не работает запрос
0 Henistaromin
 
20.07.12
10:45
Всем привет!
Обращался пару дней назад с вопросами по этому модулю. Ёпрст очень помог! Спасибо.
Возникла еще одна проблема. Проблема в том, что первый запрос в модуле не выполняется. Запрос должен подсчитывать количество приходов по списку документов заданых в запросе и выводить это количество в печатную форму.

Процедура Сформировать()
   
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ДатаНач по ДатаКон;
|ПоступлениеТоваров = Документ.ПоступлениеТМЦ.ТекущийДокумент, Документ.ВводОстатковТМЦ.ТекущийДокумент, Документ.ОприходованиеТМЦ.ТекущийДокумент, Документ.ПоступлениеТМЦИмпорт.ТекущийДокумент, Документ.ПоступлениеТМЦРозница.ТекущийДокумент;    
|Товар = Документ.ПоступлениеТМЦ.Номенклатура, Документ.ВводОстатковТМЦ.Номенклатура, Документ.ОприходованиеТМЦ.Номенклатура, Документ.ПоступлениеТМЦИмпорт.Номенклатура, Документ.ПоступлениеТМЦРозница.Номенклатура;
|Функция ВсегоДоков = Счётчик(ПоступлениеТоваров) когда(Товар = ВыбНоменклатура);
|Условие(Товар = ВыбНоменклатура);
|"
;
ТекстЗапроса= ТекстЗапроса +
"   //Формируем запрос с условиями отбора
|Номенклатура    = Регистр.ОстаткиТМЦ.Номенклатура;
|Количество = Регистр.ОстаткиТМЦ.Количество;
|Склад = Регистр.ОстаткиТМЦ.Склад;

|Функция КоличествоНачОст = НачОст(Количество);// Когда ((Склад в СкладП1)И(Склад в СкладП2)И(Склад в СкладП3)И(Склад в СкладП4)И(Склад в СкладР1)И(Склад в СкладР2)И(Склад в СкладР3)И(Склад в СкладР4));
|Функция КоличествоКонОст = КонОст(Количество);// Когда ((Склад в СкладП1)И(Склад в СкладП2)И(Склад в СкладП3)И(Склад в СкладП4)И(Склад в СкладР1)И(Склад в СкладР2)И(Склад в СкладР3)И(Склад в СкладР4));
|Функция КоличествоПриход = Приход(Количество);// Когда ((Склад в СкладП1)И(Склад в СкладП2)И(Склад в СкладП3)И(Склад в СкладП4));

|Условие (Номенклатура в ВыбНоменклатура);

|Группировка Номенклатура;

|"//}}ЗАПРОС
;



Запрос = СоздатьОбъект("Запрос");
Запрос.Выполнить(ТекстЗапроса);
КоличествоМесяцев = (ДатаКон-ДатаНач)/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 Ёпрст
 
20.07.12
10:47
(0) как бэ, скрешивать в одном запросе обращение к документам и регистрам - будет каша, точнее, запрос не рабочим будет.
2 1Сергей
 
20.07.12
10:48
всё смешалось - люди, кони...

а нельзя ли задействовать КодОперации вместо того, чтобы переписывать все возможные документы?
3 Henistaromin
 
20.07.12
11:13
(2) Сделаю, спасибо.
(1) Сделать запрос отдельной функцией и "вклеить" его?
4 пипец
 
20.07.12
11:15
не забываем про внешние функции
5 viktor_vv
 
20.07.12
11:18
(3) Сделай два запроса. При обходе основного, во втором позиционируйся и получай данные через Получить().
6 Henistaromin
 
20.07.12
11:59
С 1С-кой работаю 10 месяцем, во многом еще не догоняю. Можно немного по подробнее что куда.
Спасибо.
7 Ёпрст
 
20.07.12
12:01
(6) а чего запрос должен возвращать в итоге ?
8 Henistaromin
 
20.07.12
12:09
(7)
В печатную форму должны выводиться параметры в зависимости от выбраной номенклатуры (ВыбНоменклатура):
1)ОборВмесяц
2)ЕжемПродаж
3)КоличествоКонОст
4)ВсегоДоков

Если правильно понял вопрос.
9 Henistaromin
 
20.07.12
12:10
Перый запрос возвращает Количество приходов (ВсегоДоков)
Второй запрос всё остальное.
10 1Сергей
 
20.07.12
12:19
(9) о каком втором запросе ты говоришь, если в (0) он всего один?
11 Henistaromin
 
20.07.12
12:23
(10)
Для работоспособности запроса было предложено разбить его на 2 части. Т.е. сделать 2 запроса.(5) Если можно каким - либо способом сделать всё в одном, был бы только рад.
12 Ёпрст
 
20.07.12
12:26
(8)
Либо запрос в ПартииНаличие и с него вытащить Приход/Расход + сумму продажи и КонОст, либо в тексте запроса еще обратиться к регистру Продажи