staff
|
|
« : 25-11-2009 07:15 » |
|
Вопрос на засыпку, как мне сделать так, чтобы формировался еженедельный отчет, а также ежемесячный отчет, и какие мне значения надо добавлять. Вывод еженедельных и ежемесячных результатов расчетов производится при помощи формул. Как мне привязать системный календарь к формированию отчета? Например, если закончилась неделя, то при нажатии кнопки "сформировать" выводился отчет за неделю, точно также и ежемесячно, закончился месяц календарный при нажатии на "сформировать" выводится месячный отчет.
|
|
« Последнее редактирование: 25-11-2009 20:18 от Sel »
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #1 : 25-11-2009 11:41 » |
|
Для начала определиться с понятиями: 1. "формировался отчет" - это что значит? создалась форма табличного документа и сохранилась/отправилась по e-mail? 2. "закончилась неделя/месяц" - что значит закончиться? будут ли после физического кончания периода вноситься данные задним числом? если будут - как долго? 3. "привязать системный календарь к формированию отчета" - что значит "привязать"? из текущей даты вычислить даты начала/конца закончившегося периода или "формировать отчет" (см.п.1)
|
|
|
Записан
|
|
|
|
staff
|
|
« Ответ #2 : 25-11-2009 11:58 » |
|
У меня есть результаты расчетов данных, хранящиеся в РегистреНакопления, на данный момент я создал запрос на вывод результатов в Макет отчета. Только теперь мне необходимо, чтобы формировался недельный расчет на основании полученных результатов из итоговой колонки суточных расчетов, для этого мне надо, чтобы недельный расчет был связан с календарем (наиболее оптимальный вариант, так как в неделе 7 дней), а также какой мне необходимо использовать РегистрНакопления для суммирования результатов расчета недельных данных итоговой таблицы суточных.
|
|
« Последнее редактирование: 25-11-2009 16:21 от Sel »
|
Записан
|
|
|
|
staff
|
|
« Ответ #3 : 25-11-2009 12:57 » |
|
код формирования суточных отчетов с использованием Макета:
Процедура КнопкаСформировать1Нажатие(Элемент) // Вставить содержимое обработчика. Запрос = Новый запрос; Запрос.Текст = "ВЫБРАТЬ | ТеоретическийБалансПодсолнечника.Регистратор КАК Регистратор, | СУММА(ТеоретическийБалансПодсолнечника.z) КАК z, ....................... | СУММА(ТеоретическийБалансПодсолнечника.x) КАК x, .......................... | СУММА(ТеоретическийБалансПодсолнечника.c) КАК c, ........................... |ИЗ | РегистрНакопления.ТеоретическийБалансПодсолнечника КАК ТеоретическийБалансПодсолнечника |ГДЕ | ТеоретическийБалансПодсолнечника.Период МЕЖДУ &НачалоДня И &КонецДня | |СГРУППИРОВАТЬ ПО | ТеоретическийБалансПодсолнечника.Регистратор | |УПОРЯДОЧИТЬ ПО | Регистратор |ИТОГИ | СУММА(z), ................ | СУММА(x), ................... | СУММА(c), ................ |ПО | Регистратор |АВТОУПОРЯДОЧИВАНИЕ"; Запрос.УстановитьПараметр("НачалоДня", НачалоДня(НачПериода)); Запрос.УстановитьПараметр("КонецДня", КонецДня(КонПериода)); Результат = Запрос.Выполнить(); ВыборкаРегистратор = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); темп = Новый ТабличныйДокумент; ТабДок = ПолучитьМакет("Макет"); ОбластьВведение = ТабДок.ПолучитьОбласть("Введение"); Темп.Вывести(ОбластьВведение); Пока ВыборкаРегистратор.Следующий() цикл если ВыборкаРегистратор<>Неопределено тогда ОбластьРегистратор = ТабДок.ПолучитьОбласть("Регистратор"); ОбластьРегистратор.Параметры.Дата=ВыборкаРегистратор.Регистратор.Дата; ОбластьРегистратор.Параметры.z=ВыборкаРегистратор.z; .................. ОбластьРегистратор.Параметры.x=ВыборкаРегистратор.x; .................... ОбластьРегистратор.Параметры.c=ВыборкаРегистратор.c; .................... Темп.Вывести(ОбластьРегистратор); конецесли; конеццикла; ТабФорма = Отчеты.ТеоретическийБалансПодсолнечника1.ПолучитьФорму("ФормаТаблицы"); ТабФорма.Открыть(); ТабФорма.ЭлементыФормы.Результат.Вывести(Темп); КонецПроцедуры
|
|
|
Записан
|
|
|
|
staff
|
|
« Ответ #4 : 25-11-2009 19:15 » |
|
кто то поможет с моей проблемой???
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #5 : 25-11-2009 20:32 » |
|
staff, потерпи. Некоторые спят по ночам, вообще то
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #6 : 26-11-2009 09:06 » |
|
Если я правильно понял - тебе вместо колонок день нужно колонку неделя (месяц)? Используй в группировке запроса (СГРУППИРОВАТЬ ПО) вместо ТеоретическийБалансПодсолнечника.Регистратор результат функции соответствующего периода (см. скриншот), например: НЕДЕЛЯ(ТеоретическийБалансПодсолнечника.Период)
|
|
|
Записан
|
|
|
|
staff
|
|
« Ответ #7 : 26-11-2009 12:27 » |
|
у меня получилась такая процедура: Процедура КнопкаСформировать2Нажатие(Элемент) //Вставить содержимое обработчика. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТеоретическийБалансПодсолнечника.Период КАК Период |ИЗ | РегистрНакопления.ТеоретическийБалансПодсолнечника КАК ТеоретическийБалансПодсолнечника |ГДЕ | ТеоретическийБалансПодсолнечника.Период МЕЖДУ &НачалоДня И &КонецДня | |СГРУППИРОВАТЬ ПО | ТеоретическийБалансПодсолнечника.Период | |УПОРЯДОЧИТЬ ПО | Период |ИТОГИ ПО | Период ПЕРИОДАМИ(НЕДЕЛЯ, &НачалоДня, &КонецДня) |АВТОУПОРЯДОЧИВАНИЕ"; Запрос.УстановитьПараметр("НачалоДня", НачалоДня(НачПериода)); Запрос.УстановитьПараметр("КонецДня", КонецДня(КонПериода)); Результат = Запрос.Выполнить(); ВыборкаПериод = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); темп = Новый ТабличныйДокумент; ТабДок = ПолучитьМакет("Макет1"); ОбластьВведение = ТабДок.ПолучитьОбласть("Введение"); Темп.Вывести(ОбластьВведение); Пока ВыборкаПериод.Следующий() цикл если ВыборкаПериод<> неопределено тогда ОбластьПериод = ТабДок.ПолучитьОбласть("Период"); ОбластьПериод.Параметры.Дата=ВыборкаПериод.Дата; Темп.Вывести(ОбластьПериод); конецесли; конеццикла; ........................... КонецПроцедуры тогда пишет такую ошибку: {Отчет.ТеоретическийБалансПодсолнечника1.Форма.ФормаОтчета(416)}: Поле объекта не обнаружено (Дата) ОбластьПериод.Параметры.Дата=ВыборкаПериод.Дата; или же я что то не так пишу в коде формирования отчета?
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #8 : 26-11-2009 15:18 » |
|
Ну а где у тебя в запросе Дата? Попробуй использовать ОбластьПериод.Параметры.Дата=ВыборкаПериод.Период;
|
|
|
Записан
|
|
|
|
staff
|
|
« Ответ #9 : 27-11-2009 09:51 » |
|
переделал запрос как по примеру на "НЕДЕЛЯ(ТеоретическийБалансПодсолнечника.Период)" теперь пишет ошибку "{Отчет.ТеоретическийБалансПодсолнечника1.Форма.ФормаОтчета(405)}: Ошибка при вызове метода контекста (Выполнить): {(2, 2)}: Поле не входит в группу "ТеоретическийБалансПодсолнечника.Период" <<?>>ТеоретическийБалансПодсолнечника.Период КАК Период Результат = Запрос.Выполнить();" а когда пишу "ТеоретическийБалансПодсолнечника.Период" то все нормально работает, только мне выводятся все дни недели с результатами то есть с понедельника по пятницу саму процедуру немного переделал, но наверно еще до полного функционирования чего то не хватает в цикле код процедуры: Процедура КнопкаСформировать2Нажатие(Элемент) //Вставить содержимое обработчика. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТеоретическийБалансПодсолнечника.Период КАК Период |ИЗ | РегистрНакопления.ТеоретическийБалансПодсолнечника КАК ТеоретическийБалансПодсолнечника |ГДЕ | ТеоретическийБалансПодсолнечника.Период МЕЖДУ &НачалоНеделя И &КонецНеделя |СГРУППИРОВАТЬ ПО | ТеоретическийБалансПодсолнечника.Период |УПОРЯДОЧИТЬ ПО | Период |ИТОГИ ПО | Период ПЕРИОДАМИ(НЕДЕЛЯ, &НачалоНеделя, &КонецНеделя) |АВТОУПОРЯДОЧИВАНИЕ"; Запрос.УстановитьПараметр("НачалоНеделя", НачалоДня(НачПериода)); Запрос.УстановитьПараметр("КонецНеделя", КонецДня(КонПериода)); Результат = Запрос.Выполнить(); ВыборкаПериод = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); темп = Новый ТабличныйДокумент; ТабДок = ПолучитьМакет("Макет"); Пока ВыборкаПериод.Следующий() цикл если ВыборкаПериод<> неопределено тогда ОбластьПериод = ТабДок.ПолучитьОбласть("Период"); ОбластьПериод.Параметры.Дата=ВыборкаПериод.Период; Сообщить(КонецНедели(ТекущаяДата())); Темп.Вывести(ОбластьПериод); конецесли; конеццикла;
ТабФорма = Отчеты.ТеоретическийБалансПодсолнечника.ПолучитьФорму("ФормаТаблицы"); ТабФорма.Открыть(); ТабФорма.ЭлементыФормы.Результат.Вывести(Темп); КонецПроцедуры
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #10 : 27-11-2009 10:55 » |
|
Если я не ошибаюсь ИТОГИ ПО имеют отношение только к построителю запроса (по крайней мере я их только с ними использовал) да и агрегатные поля нигде не прописаны (типа этого: СУММА(ТеоретическийБалансПодсолнечника.z) КАК z, ) Я ошибался! Смотри пост дальше
|
|
« Последнее редактирование: 08-12-2009 14:45 от Kivals »
|
Записан
|
|
|
|
staff
|
|
« Ответ #11 : 27-11-2009 11:23 » |
|
мне на данном этапе необходимо что бы формировались две колонки "Наименование" и "Неделя" фактически что то на подобии: какие мне изменения необходимо внести в процедуру, что формировался отчет?
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #12 : 27-11-2009 11:42 » |
|
В первоначальном запросе https://forum.shelek.ru/index.php/topic,22601.msg219398.html#msg219398попробуй поменять ВЫБРАТЬ ТеоретическийБалансПодсолнечника.Регистратор КАК Регистратор, на ВЫБРАТЬ НЕДЕЛЯ(ТеоретическийБалансПодсолнечника.Период) КАК Регистратор, и СГРУППИРОВАТЬ ПО ТеоретическийБалансПодсолнечника.Регистратор на СГРУППИРОВАТЬ ПО НЕДЕЛЯ(ТеоретическийБалансПодсолнечника.Период)
|
|
|
Записан
|
|
|
|
staff
|
|
« Ответ #13 : 27-11-2009 12:08 » |
|
сделал изменения которые вы привели, все нормально работает кроме вывода даты ОбластьПериод.Параметры.Дата=ВыборкаПериод; ставлю ОбластьПериод.Параметры.Дата=ВыборкаПериод.Дата; ошибка {Отчет.ТеоретическийБалансПодсолнечника1.Форма.ФормаОтчета(633)}: Поле объекта не обнаружено (Дата) ОбластьПериод.Параметры.Дата=ВыборкаПериод.Дата; иначе ОбластьПериод.Параметры.Дата=ВыборкаПериод.Регистратор.Дата; ошибка {Отчет.ТеоретическийБалансПодсолнечника1.Форма.ФормаОтчета(633)}: Значение не является значением объектного типа (Дата) ОбластьПериод.Параметры.Дата=ВыборкаПериод.Регистратор.Дата;
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #14 : 27-11-2009 12:41 » |
|
ОбластьПериод.Параметры.Дата=ВыборкаПериод.Регистратор
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #15 : 27-11-2009 12:43 » |
|
Хотя нет - это вернет номер недели в году Если нужно вывести дату - тогда везде вместо НЕДЕЛЯ(ТеоретическийБалансПодсолнечника.Период) нужно поставить НАЧАЛОПЕРИОДА(ТеоретическийБалансПодсолнечника.Период, НЕДЕЛЯ)
|
|
|
Записан
|
|
|
|
staff
|
|
« Ответ #16 : 27-11-2009 12:57 » |
|
теперь у меня такая ошибка: {Отчет.ТеоретическийБалансПодсолнечника1.Форма.ФормаОтчета(622)}: Ошибка при вызове метода контекста (Выполнить): {(2, 9)}: Поле не входит в группу "ТеоретическийБалансПодсолнечника.Период" НЕДЕЛЯ(<<?>>ТеоретическийБалансПодсолнечника.Период) КАК Регистратор, Результат = Запрос.Выполнить();
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #17 : 27-11-2009 13:30 » |
|
почему НЕДЕЛЯ когда должно быть НАЧАЛОПЕРИОДА? я же написал - везде поменять
|
|
|
Записан
|
|
|
|
staff
|
|
« Ответ #18 : 27-11-2009 13:46 » |
|
|
|
|
Записан
|
|
|
|
staff
|
|
« Ответ #19 : 30-11-2009 09:42 » |
|
необходимо наставление, у меня есть значение k1 которое должно вычисляться исходя из формулы k1=c2/k, при этом "c2" должна идти как сумма всех "с2" в документе за неделю. Эта формула предназначена для вывода итогового недельного отчета. Как и куда мне необходимо ее вписать для того что бы производилось вычисление. Например: k1=1587.25/123.5 где 1587.25 сумма всех "с2" за неделю, 123.5 сумма всех "k" за неделю, k1 должно в таком случае равняться 12.8522 данные для формирования отчета берутся из Регистра накопления
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #20 : 30-11-2009 13:55 » |
|
В запросе добавь расчетное поле: СУММА(ТеоретическийБалансПодсолнечника.c2)/СУММА(ТеоретическийБалансПодсолнечника.k) КАК k1, Только хорошо бы еще проверить сумму k на ноль: ВЫБОР КОГДА СУММА(ТеоретическийБалансПодсолнечника.k) <> 0 ТОГДА СУММА(ТеоретическийБалансПодсолнечника.c2) / СУММА(ТеоретическийБалансПодсолнечника.k) ИНАЧЕ 0 КОНЕЦ КАК k1,
|
|
|
Записан
|
|
|
|
staff
|
|
« Ответ #21 : 01-12-2009 09:22 » |
|
написал запрос и теперь у меня ошибка выскакивает
{Отчет.ТеоретическийБалансПодсолнечника1.Форма.ФормаОтчета(674)}: Ошибка при вызове метода контекста (Выполнить): Ошибка выполнения запроса "Ошибка при выполнении операции над данными: Ошибка SQL: Деление на 0" Результат = Запрос.Выполнить();
что подскажете с ней можно сделать?
|
|
|
Записан
|
|
|
|
staff
|
|
« Ответ #22 : 01-12-2009 09:42 » |
|
Написал запрос , и теперь у меня ошибка выскакивает {Отчет.ТеоретическийБалансПодсолнечника1.Форма.ФормаОтчета(674)}: Ошибка при вызове метода контекста (Выполнить): Ошибка выполнения запроса "Ошибка при выполнении операции над данными: Ошибка SQL: Деление на 0" Результат = Запрос.Выполнить(); Что подскажете с ней можно сделать? А, да , еще у меня есть некоторые функции в запросе , как 100 - СУММА(ТеоретическийБалансПодсолнечника.k14) как k18 А та кже СУММА(ТеоретическийБалансПодсолнечника.k14) * (100 - СУММА(ТеоретическийБалансПодсолнечника.k1)) / 100 КАК k16 По этим двум функциям у меня ничего не выводится .
|
|
« Последнее редактирование: 01-12-2009 10:31 от Sel »
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #23 : 01-12-2009 11:03 » |
|
Ошибка SQL: Деление на 0 Ищи внимательно где у тебя деление и используй предложенной мной выше констуркцию: ВЫБОР КОГДА А<>0 ТОГДА В/А ИНАЧЕ 0 КОНЕЦ КАК С где вместо А,В,С могут быть как поля, так и выражения По этим двум функциям у меня ничего не выводится. Возможно где-то встречается значение NULL, которое влияет на результат. попробуй так: 100 - СУММА(ЕСТЬNULL(ТеоретическийБалансПодсолнечника.k14,0)) как k18 аналогично во втором случае
|
|
|
Записан
|
|
|
|
staff
|
|
« Ответ #24 : 01-12-2009 11:17 » |
|
обведенное число 28.00 в отчете это есть k14, исходя из запроса функции | 100 - СУММА(ТеоретическийБалансПодсолнечника.k14) как k18 у меня в результате должно получится k18=72, а у меня получается 100
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #25 : 01-12-2009 11:55 » |
|
ты пробовал сделать как написано?
|
|
|
Записан
|
|
|
|
staff
|
|
« Ответ #26 : 01-12-2009 11:57 » |
|
да у меня все равно выводится 100
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #27 : 01-12-2009 16:15 » |
|
Давай тогда весь текст запроса
|
|
|
Записан
|
|
|
|
staff
|
|
« Ответ #28 : 02-12-2009 06:35 » |
|
Запрос = Новый запрос; Запрос.Текст = "ВЫБРАТЬ |КОНЕЦПЕРИОДА(ТеоретическийБалансПодсолнечника.Период, НЕДЕЛЯ) КАК Регистратор, |(СУММА(ТеоретическийБалансПодсолнечника.z2)+СУММА(ТеоретическийБалансПодсолнечника.x2))/СУММА(ТеоретическийБалансПодсолнечника.k) КАК k1, |(СУММА(ТеоретическийБалансПодсолнечника.z4)+СУММА(ТеоретическийБалансПодсолнечника.x4))/СУММА(ТеоретическийБалансПодсолнечника.k) КАК k6, |СУММА(ТеоретическийБалансПодсолнечника.k7) / СУММА(ТеоретическийБалансПодсолнечника.k) КАК k7, |(СУММА(ТеоретическийБалансПодсолнечника.z9)+СУММА(ТеоретическийБалансПодсолнечника.x9))/СУММА(ТеоретическийБалансПодсолнечника.k) КАК k8, |(СУММА(ТеоретическийБалансПодсолнечника.z11) + СУММА(ТеоретическийБалансПодсолнечника.x11)) / СУММА(ТеоретическийБалансПодсолнечника.k) КАК k9, |СУММА(ТеоретическийБалансПодсолнечника.k3)/СУММА(ТеоретическийБалансПодсолнечника.k) КАК k10, |(СУММА(ТеоретическийБалансПодсолнечника.z15)+СУММА(ТеоретическийБалансПодсолнечника.x15))/СУММА(ТеоретическийБалансПодсолнечника.k) КАК k11, |(СУММА(ТеоретическийБалансПодсолнечника.z17)+СУММА(ТеоретическийБалансПодсолнечника.x17))/СУММА(ТеоретическийБалансПодсолнечника.k) КАК k12, |(СУММА(ТеоретическийБалансПодсолнечника.z19)+СУММА(ТеоретическийБалансПодсолнечника.x19))/СУММА(ТеоретическийБалансПодсолнечника.k) КАК k13, |СУММА(ТеоретическийБалансПодсолнечника.k4)/СУММА(ТеоретическийБалансПодсолнечника.k) КАК k14, |СУММА(ТеоретическийБалансПодсолнечника.k5)/СУММА(ТеоретическийБалансПодсолнечника.k) КАК k15, |СУММА(ТеоретическийБалансПодсолнечника.k14)*(100-СУММА(ТеоретическийБалансПодсолнечника.k1))/100 КАК k16, |СУММА(ТеоретическийБалансПодсолнечника.k16) КАК k17, |100-СУММА(ТеоретическийБалансПодсолнечника.k14) КАК k18, |СУММА(ТеоретическийБалансПодсолнечника.c26)/СУММА(ТеоретическийБалансПодсолнечника.k) КАК k19, |100*(СУММА(ТеоретическийБалансПодсолнечника.k16)-СУММА(ТеоретическийБалансПодсолнечника.k13))/(100-СУММА(ТеоретическийБалансПодсолнечника.k13)+СУММА(ТеоретическийБалансПодсолнечника.k12)) КАК k20, |(100*СУММА(ТеоретическийБалансПодсолнечника.k6)-СУММА(ТеоретическийБалансПодсолнечника.k18)*СУММА(ТеоретическийБалансПодсолнечника.k15))/СУММА(ТеоретическийБалансПодсолнечника.k14) КАК k21, |СУММА(ТеоретическийБалансПодсолнечника.k10)*(100-СУММА(ТеоретическийБалансПодсолнечника.k21))/(100-СУММА(ТеоретическийБалансПодсолнечника.k10)) КАК k22, |10000-100*(СУММА(ТеоретическийБалансПодсолнечника.k7)+СУММА(ТеоретическийБалансПодсолнечника.k6)+СУММА(ТеоретическийБалансПодсолнечника.k22))+СУММА(ТеоретическийБалансПодсолнечника.k22)*СУММА(ТеоретическийБалансПодсолнечника.k11)+СУММА(ТеоретическийБалансПодсолнечника.k10))/(100-(СУММА(ТеоретическийБалансПодсолнечника.k9)+СУММА(ТеоретическийБалансПодсолнечника.k8))) КАК k23, |СУММА(ТеоретическийБалансПодсолнечника.k23)*СУММА(ТеоретическийБалансПодсолнечника.k9)/100 КАК k24, |СУММА(ТеоретическийБалансПодсолнечника.k22)*СУММА(ТеоретическийБалансПодсолнечника.k11)/100 КАК k25, |СУММА(ТеоретическийБалансПодсолнечника.k7)-(СУММА(ТеоретическийБалансПодсолнечника.k24)+СУММА(ТеоретическийБалансПодсолнечника.k25)) КАК k26, |СУММА(ТеоретическийБалансПодсолнечника.k6)-(СУММА(ТеоретическийБалансПодсолнечника.k23)*СУММА(ТеоретическийБалансПодсолнечника.k8)+СУММА(ТеоретическийБалансПодсолнечника.k22)*СУММА(ТеоретическийБалансПодсолнечника.k10))/100 КАК k27, Я оставил запрос так , как он у меня был первон Ачально .Функции , которые не выводятся: k16, k17, k18, k20, k21, k22, k23, k24, k25, k26, k27 |СУММА(ТеоретическийБалансПодсолнечника.k16) КАК k17, В этой функции долж ен о выводиться результат расчета по k16, так как у меня в k16 ничего не выводится , с оотв етственно , и k17 тоже не выводится .
|
|
« Последнее редактирование: 02-12-2009 06:47 от Sel »
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #29 : 02-12-2009 10:53 » |
|
Во-первых запрос не весь, а только поля. Во-вторых не вижу предложенного использования функции ЕСТЬNULL()
|
|
|
Записан
|
|
|
|
|