|
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)
Либо запрос в ПартииНаличие и с него вытащить Приход/Расход + сумму продажи и КонОст, либо в тексте запроса еще обратиться к регистру Продажи |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |