Подскажите как организовать условие в запросе. Проблема в том что 01.07.2016 была деноминация (10000) и в отчет попадают данные из документов за 2 периода (до и после) далее всё в кучу.
Хотелось бы определить условие чтобы документы "до" делились на 10000 и суммировались с "после". Всё выше сказанное касается Стоимости.
Хотелось бы определить условие чтобы документы "до" делились на 10000 и суммировались с "после". Всё выше сказанное касается Стоимости.
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ОбрабатыватьДокументы проведенные;
|Док = Документ.ПередачаМатериаловСпецназначенияВПроизводство.ТекущийДокумент,
| Документ.ТребованиеНакладная.ТекущийДокумент,
| Документ.ВводВЭксплуатациюМБП.ТекущийДокумент;
|Материал = Документ.ПередачаМатериаловСпецназначенияВПроизводство.Материал,
| Документ.ТребованиеНакладная.Материал,
| Документ.ВводВЭксплуатациюМБП.Материал;
|Страна = Документ.ПередачаМатериаловСпецназначенияВПроизводство.Материал.СтранаПроисхождения,
| Документ.ТребованиеНакладная.Материал.СтранаПроисхождения,
| Документ.ВводВЭксплуатациюМБП.Материал.СтранаПроисхождения;
|Код = Документ.ПередачаМатериаловСпецназначенияВПроизводство.Материал.СтранаПроисхождения.Код,
| Документ.ТребованиеНакладная.Материал.СтранаПроисхождения.Код,
| Документ.ВводВЭксплуатациюМБП.Материал.СтранаПроисхождения.Код;
|Дата = Документ.ПередачаМатериаловСпецназначенияВПроизводство.ДатаДок,
| Документ.ТребованиеНакладная.ДатаДок,
| Документ.ВводВЭксплуатациюМБП.ДатаДок;
|Номер = Документ.ПередачаМатериаловСпецназначенияВПроизводство.НомерДок,
| Документ.ТребованиеНакладная.НомерДок,
| Документ.ВводВЭксплуатациюМБП.НомерДок;
|Стоимость = Документ.ПередачаМатериаловСпецназначенияВПроизводство.Сумма,
| Документ.ТребованиеНакладная.Сумма,
| Документ.ВводВЭксплуатациюМБП.Сумма;
|Ном = Документ.ПередачаМатериаловСпецназначенияВПроизводство.НомерСтроки,
| Документ.ТребованиеНакладная.НомерСтроки,
| Документ.ВводВЭксплуатациюМБП.НомерСтроки;
|Функция Всего = Сумма(Стоимость);
|Группировка Страна;
|Группировка Док упорядочить по Док.ДатаДок;
|Группировка Материал упорядочить по Материал.наименование без Групп;
|Группировка Ном;
|"//}}ЗАПРОС
;
ПоказатьПо теме из базы знаний
- Временные таблицы, отбор по нескольким составным ключам в запросе.
- Применение множественных условий по отсрочке платежа в запросе
- Обработка для 1С: выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)
- RLS - дубли условий в запросах к СУБД
- Структура таблиц
Найденные решения
(22)
!!! ты немного условия местами поменял. Надо
Для одной строки будет не ноль или всего1, или всего2. Правильно?
Всего1 в новых зайчиках
Всего2 в старых, делённое на 10000.
Итого=Итого+Запрос.Всего1+Запрос.Всего2; --не забудь у себя исправить.
и получится всё так, как надо.
| Функция Всего1 = Сумма(Стоимость/10000) Когда (Дата > Д);
| Функция Всего2 = Сумма(Стоимость) Когда (Дата <= Д);
!!! ты немного условия местами поменял. Надо
| Функция Всего1 = Сумма(Стоимость) Когда (Дата > Д);
| Функция Всего2 = Сумма(Стоимость/10000) Когда (Дата <= Д);
Для одной строки будет не ноль или всего1, или всего2. Правильно?
Всего1 в новых зайчиках
Всего2 в старых, делённое на 10000.
Итого=Итого+Запрос.Всего1+Запрос.Всего2; --не забудь у себя исправить.
и получится всё так, как надо.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб, Д;
Д="16.07.01";
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ОбрабатыватьДокументы проведенные;
|Док = Документ.ПередачаМатериаловСпецназначенияВПроизводство.ТекущийДокумент,
| Документ.ТребованиеНакладная.ТекущийДокумент,
| Документ.ВводВЭксплуатациюМБП.ТекущийДокумент;
|Материал = Документ.ПередачаМатериаловСпецназначенияВПроизводство.Материал,
| Документ.ТребованиеНакладная.Материал,
| Документ.ВводВЭксплуатациюМБП.Материал;
|Страна = Документ.ПередачаМатериаловСпецназначенияВПроизводство.Материал.СтранаПроисхождения,
| Документ.ТребованиеНакладная.Материал.СтранаПроисхождения,
| Документ.ВводВЭксплуатациюМБП.Материал.СтранаПроисхождения;
|Код = Документ.ПередачаМатериаловСпецназначенияВПроизводство.Материал.СтранаПроисхождения.Код,
| Документ.ТребованиеНакладная.Материал.СтранаПроисхождения.Код,
| Документ.ВводВЭксплуатациюМБП.Материал.СтранаПроисхождения.Код;
|Дата = Документ.ПередачаМатериаловСпецназначенияВПроизводство.ДатаДок,
| Документ.ТребованиеНакладная.ДатаДок,
| Документ.ВводВЭксплуатациюМБП.ДатаДок;
|Номер = Документ.ПередачаМатериаловСпецназначенияВПроизводство.НомерДок,
| Документ.ТребованиеНакладная.НомерДок,
| Документ.ВводВЭксплуатациюМБП.НомерДок;
|Стоимость = Документ.ПередачаМатериаловСпецназначенияВПроизводство.Сумма,
| Документ.ТребованиеНакладная.Сумма,
| Документ.ВводВЭксплуатациюМБП.Сумма;
|Ном = Документ.ПередачаМатериаловСпецназначенияВПроизводство.НомерСтроки,
| Документ.ТребованиеНакладная.НомерСтроки,
| Документ.ВводВЭксплуатациюМБП.НомерСтроки;
|
| Функция Всего1 = Сумма(Стоимость) Когда (Дата >= Д);
| Функция Всего2 = Сумма(Стоимость/10000) Когда (Дата < Д);
|
|Группировка Страна;
|Группировка Док упорядочить по Док.ДатаДок;
|Группировка Материал упорядочить по Материал.наименование без Групп;
|Группировка Ном;
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
РБ = 0;
НеРБ = 0;
Итого = 0;
//Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
НомерСтроки = 1;
Пока Запрос.Группировка(1) = 1 Цикл
Таб.ВывестиСекцию("Страна");
Если Запрос.Код=1 Тогда
РБ = РБ+Запрос.Всего1+Запрос.Всего2;
Иначе
НеРБ = НеРБ+Запрос.Всего1+Запрос.Всего2;
КонецЕсли;
Пока Запрос.Группировка(2) = 1 Цикл
Пока Запрос.Группировка(3) = 1 Цикл
Пока Запрос.Группировка(4) = 1 Цикл
НомерСтроки = НомерСтроки +1;
Если Разворачивать=1 Тогда
Таб.ВывестиСекцию("Материал");
КонецЕсли;
Итого = Итого+Запрос.Стоимость;
КонецЦикла;
КонецЦикла;
Таб.ВывестиСекцию("Док");
Итого=0;
КонецЦикла;
Итого = 0;
Таб.ВывестиСекцию("Итог") ;
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
СохранитьЗначение("ЯСоставил",ОтчетСоставил);
Таб.ПараметрыСтраницы(1,,,,,,,,,1);
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры
ВыбНачПериода = РабочаяДата();
ВыбКонПериода = РабочаяДата();
ОтчетСоставил = ВосстановитьЗначение("ЯСоставил");
ПоказатьТак работает без ошибок. Но Результат возвращает не тот. Что выводить?
//*******************************************
// Процедура генерации запроса Сформировать.
//
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб, Д;
Д=Дата("01.07.2016");
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ОбрабатыватьДокументы проведенные;
|Док = Документ.ПередачаМатериаловСпецназначенияВПроизводство.ТекущийДокумент,
| Документ.ТребованиеНакладная.ТекущийДокумент,
| Документ.ВводВЭксплуатациюМБП.ТекущийДокумент;
|Материал = Документ.ПередачаМатериаловСпецназначенияВПроизводство.Материал,
| Документ.ТребованиеНакладная.Материал,
| Документ.ВводВЭксплуатациюМБП.Материал;
|Страна = Документ.ПередачаМатериаловСпецназначенияВПроизводство.Материал.СтранаПроисхождения,
| Документ.ТребованиеНакладная.Материал.СтранаПроисхождения,
| Документ.ВводВЭксплуатациюМБП.Материал.СтранаПроисхождения;
|Код = Документ.ПередачаМатериаловСпецназначенияВПроизводство.Материал.СтранаПроисхождения.Код,
| Документ.ТребованиеНакладная.Материал.СтранаПроисхождения.Код,
| Документ.ВводВЭксплуатациюМБП.Материал.СтранаПроисхождения.Код;
|Дата = Документ.ПередачаМатериаловСпецназначенияВПроизводство.ДатаДок,
| Документ.ТребованиеНакладная.ДатаДок,
| Документ.ВводВЭксплуатациюМБП.ДатаДок;
|Номер = Документ.ПередачаМатериаловСпецназначенияВПроизводство.НомерДок,
| Документ.ТребованиеНакладная.НомерДок,
| Документ.ВводВЭксплуатациюМБП.НомерДок;
|Стоимость = Документ.ПередачаМатериаловСпецназначенияВПроизводство.Сумма,
| Документ.ТребованиеНакладная.Сумма,
| Документ.ВводВЭксплуатациюМБП.Сумма;
|Ном = Документ.ПередачаМатериаловСпецназначенияВПроизводство.НомерСтроки,
| Документ.ТребованиеНакладная.НомерСтроки,
| Документ.ВводВЭксплуатациюМБП.НомерСтроки;
|
| Функция Всего1 = Сумма(Стоимость/10000) Когда (Дата > Д);
| Функция Всего2 = Сумма(Стоимость) Когда (Дата <= Д);
|
|Группировка Страна;
|Группировка Док упорядочить по Док.ДатаДок;
|Группировка Материал упорядочить по Материал.наименование без Групп;
|Группировка Ном;
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
РБ = 0;
НеРБ = 0;
Итого = 0;
//Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
НомерСтроки = 1;
Пока Запрос.Группировка(1) = 1 Цикл
Таб.ВывестиСекцию("Страна");
Если Запрос.Код=1 Тогда
РБ = РБ+Запрос.Всего1+Запрос.Всего2/10000;
Иначе
НеРБ = НеРБ+Запрос.Всего1+Запрос.Всего2/10000;
КонецЕсли;
Пока Запрос.Группировка(2) = 1 Цикл
Пока Запрос.Группировка(3) = 1 Цикл
Пока Запрос.Группировка(4) = 1 Цикл
НомерСтроки = НомерСтроки +1;
Если Разворачивать=1 Тогда
Таб.ВывестиСекцию("Материал");
КонецЕсли;
Если Запрос.Дата <= Д Тогда Итого=Итого+Запрос.Стоимость/10000
Иначе Итого=Итого+Запрос.Стоимость;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Таб.ВывестиСекцию("Док");
Итого=0;
КонецЦикла;
Итого = 0;
Таб.ВывестиСекцию("Итог") ;
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
СохранитьЗначение("ЯСоставил",ОтчетСоставил);
Таб.ПараметрыСтраницы(1,,,,,,,,,1);
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры
ВыбНачПериода = РабочаяДата();
ВыбКонПериода = РабочаяДата();
ОтчетСоставил = ВосстановитьЗначение("ЯСоставил");
ПоказатьТЗ заполняю так:
Секция Док
Запрос.Док ФорматС(Итого)
Секция Материал
Запрос.Материал
Секция Итог
В С Е Г О Запрос.Всего1+Запрос.Всего2/10000#Ч15.2.
Получается так как надо по внешнему виду, однако Итого считает только ДО 01.07.2016.
Конструкция типа:
ВЫБОР
КОГДА Документ.ПередачаМатериаловСпецназначенияВПроизводство.Дата > &ДатаДеноминации ТОГДА
Документ.ПередачаМатериаловСпецназначенияВПроизводство.Сумма
ИНАЧЕ
Документ.ПередачаМатериаловСпецназначенияВПроизводство.Дата/10000
КОНЕЦ
(2)(3)(4) это всё в 7.7 работает?? :)
(1) можно как-то так полагаю
(1) можно как-то так полагаю
Функция Всего1 = Сумма(Стоимость) Когда (Документ.ПередачаМатериаловСпецназначенияВПроизводство.ДатаДок > &ДатаДеноминации) ;
Функция Всего2 = Сумма(Стоимость) Когда (Документ.ПередачаМатериаловСпецназначенияВПроизводство.ДатаДок <= &ДатаДеноминации) ;
(5)
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.ПТМ_РасхМатПоСтран.Форма.Модуль(59)}: Функция Всего1 = Сумма(Стоимость) Когда ( <<?>> Документ.ПередачаМатериаловСпецназначенияВПроизводство.ДатаДок > &ДатаДеноминации) ;
Запрос[28] : Ожидается логическое выражение
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.ПТМ_РасхМатПоСтран.Форма.Модуль(59)}: Функция Всего1 = Сумма(Стоимость) Когда ( <<?>> Документ.ПередачаМатериаловСпецназначенияВПроизводство.ДатаДок > &ДатаДеноминации) ;
Запрос[28] : Ожидается логическое выражение
ВЫБОР
КОГДА Документ.ПередачаМатериаловСпецназначенияВПроизводство.ДатаДок > &ДатаДеноминации ТОГДА
Документ.ПередачаМатериаловСпецназначенияВПроизводство.Сумма
ИНАЧЕ
Документ.ПередачаМатериаловСпецназначенияВПроизводство.Сумма/10000
КОНЕЦ КАК Стоимость
как всегда поторопишься и результат.)))
убрал.
Сам запрос:
А как потом получить одно число из моих функций?
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.ПТМ_РасхМатПоСтран.Форма.Модуль(62)}: Функция Всего1 = Сумма(Стоимость) Когда ( <<?>> Документ.ПередачаМатериаловСпецназначенияВПроизводство.ДатаДок > ДатаДеноминации);
Запрос[29] : Ожидается логич
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.ПТМ_РасхМатПоСтран.Форма.Модуль(62)}: Функция Всего2 = Сумма(Стоимость) Когда ( <<?>> Документ.ПередачаМатериаловСпецназначенияВПроизводство.ДатаДок <= ДатаДеноминации);
Запрос[30] : Ожидается логиче
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.ПТМ_РасхМатПоСтран.Форма.Модуль(62)}: Функция Всего3 = Сумма(Стоимость) Когда ( <<?>> Документ.ТребованиеНакладная.ДатаДок > ДатаДеноминации);
Запрос[31] : Ожидается логическое выражение
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.ПТМ_РасхМатПоСтран.Форма.Модуль(62)}: Функция Всего4 = Сумма(Стоимость) Когда ( <<?>> Документ.ТребованиеНакладная.ДатаДок <= ДатаДеноминации);
Запрос[32] : Ожидается логическое выражение
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.ПТМ_РасхМатПоСтран.Форма.Модуль(62)}: Функция Всего5 = Сумма(Стоимость) Когда ( <<?>> Документ.ВводВЭксплуатациюМБП.ДатаДок > ДатаДеноминации);
Запрос[33] : Ожидается логическое выражение
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.ПТМ_РасхМатПоСтран.Форма.Модуль(62)}: Функция Всего6 = Сумма(Стоимость) Когда ( <<?>> Документ.ВводВЭксплуатациюМБП.ДатаДок <= ДатаДеноминации);
Запрос[34] : Ожидается логическое выражение
ПоказатьСам запрос:
| Функция Всего1 = Сумма(Стоимость) Когда (Документ.ПередачаМатериаловСпецназначенияВПроизводство.ДатаДок > ДатаДеноминации);
| Функция Всего2 = Сумма(Стоимость) Когда (Документ.ПередачаМатериаловСпецназначенияВПроизводство.ДатаДок <= ДатаДеноминации);
| Функция Всего3 = Сумма(Стоимость) Когда (Документ.ТребованиеНакладная.ДатаДок > ДатаДеноминации);
| Функция Всего4 = Сумма(Стоимость) Когда (Документ.ТребованиеНакладная.ДатаДок <= ДатаДеноминации);
| Функция Всего5 = Сумма(Стоимость) Когда (Документ.ВводВЭксплуатациюМБП.ДатаДок > ДатаДеноминации);
| Функция Всего6 = Сумма(Стоимость) Когда (Документ.ВводВЭксплуатациюМБП.ДатаДок <= ДатаДеноминации);
А как потом получить одно число из моих функций?
объяви ДатаДок, в условиях сравнивай ДатаДок.
Это не знаю как сделать.
А вот это тогда зачем?
|Дата = Документ.ПередачаМатериаловСпецназначенияВПроизводство.ДатаДок,
| Документ.ТребованиеНакладная.ДатаДок,
| Документ.ВводВЭксплуатациюМБП.ДатаДок;
Про итого - понял.
ДАТАДЕНОМИНАЦИИ<<?>>
Переменная не определена (ДАТАДЕНОМИНАЦИИ)
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.ПТМ_РасхМатПоСтран.Форма.Модуль(62)}: Функция Всего1 = Сумма(Стоимость) Когда (Дата >= ДатаДеноминации <<?>> );
Запрос[29] : Ошибка в выражении 'ДатаДеноминации'
ДАТАДЕНОМИНАЦИИ<<?>>
Переменная не определена (ДАТАДЕНОМИНАЦИИ)
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.ПТМ_РасхМатПоСтран.Форма.Модуль(62)}: Функция Всего2 = Сумма(Стоимость) Когда (Дата < ДатаДеноминации <<?>> );
Запрос[30] : Ошибка в выражении 'ДатаДеноминации'
ПоказатьКонстанта ДатаДеноминации определена. Или в переменной надо?
|Дата = Документ.ПередачаМатериаловСпецназначенияВПроизводство.ДатаДок;
| Функция Всего1 = Сумма(Стоимость) Когда (Дата >= ДатаДеноминации);
| Функция Всего2 = Сумма(Стоимость) Когда (Дата < ДатаДеноминации);
(20)
опять забыл про свои функции.
а вообще, даже условие лишнее. Если посчиталось всего1, получишь всего2=0, и наоборот.
Если Запрос.Дата <= Д Тогда Итого=Итого+Запрос.Стоимость/10000
Иначе Итого=Итого+Запрос.Стоимость;
КонецЕсли;
опять забыл про свои функции.
Если Запрос.Дата <= Д Тогда
Итого=Итого+Запрос.Всего1;
Иначе
Итого=Итого+Запрос.Всего2;
КонецЕсли;
а вообще, даже условие лишнее. Если посчиталось всего1, получишь всего2=0, и наоборот.
Итого=Итого+Запрос.Всего1+Запрос.Всего2;
а вообще, даже условие лишнее. Если посчиталось всего1, получишь всего2=0, и наоборот.
А как он тогда считает Стоимость после даты Деноминации?
Мне надо чтобы до даты отображалось как Стоимость/10000
после даты как есть.
Итого выводилось деноминированное.
Тоесть
документ до даты на сумму 100 000 отображается как 10
документ после на сумму 10.25 как есть
Итого 20,25.
А получатся только 10.
(22)
!!! ты немного условия местами поменял. Надо
Для одной строки будет не ноль или всего1, или всего2. Правильно?
Всего1 в новых зайчиках
Всего2 в старых, делённое на 10000.
Итого=Итого+Запрос.Всего1+Запрос.Всего2; --не забудь у себя исправить.
и получится всё так, как надо.
| Функция Всего1 = Сумма(Стоимость/10000) Когда (Дата > Д);
| Функция Всего2 = Сумма(Стоимость) Когда (Дата <= Д);
!!! ты немного условия местами поменял. Надо
| Функция Всего1 = Сумма(Стоимость) Когда (Дата > Д);
| Функция Всего2 = Сумма(Стоимость/10000) Когда (Дата <= Д);
Для одной строки будет не ноль или всего1, или всего2. Правильно?
Всего1 в новых зайчиках
Всего2 в старых, делённое на 10000.
Итого=Итого+Запрос.Всего1+Запрос.Всего2; --не забудь у себя исправить.
и получится всё так, как надо.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот