#0
by Cerera
Задача - обойтись без вычисляемых полей в СКД для вычислении разницы между датами. Мне пришлось создавать отчеты, в которых вычисляется разницы между датами в днях с учетом производственного календаря. Как вы знаете, в типовых есть регистр сведений производственного календаря и функция Но вот в чём проблема. Использовать эту функцию в отчетах, сделанных с использованием СКД тяжело, поскольку запрос этой функции нельзя соединить с другими запросами изза грёбанной строчки А число дней то для каждой строчки запроса может быть разное! А нам необходима возможность рассчитывать даты с учетом производственного календаря прямо в запросе! для того, чтобы это работало быстро, нужно создать ещё один регистр сведений в котором будут все возможные комбинации дат и в качестве ресурса будет количество дней между ними, просчитанное заранее. Что скажете про этот подход или есть более умный метод?
#1
by DrShad
пипец а не подход? у тебя время на заполнение этого нового регистра уйдет несоизмеримо больше, чем потраченное на расчет в нескольких вызовах нескольких отчетов
#4
by ChAlex
- да все элементарно - два набора: один требуемые периоды - второй регистр сведений со всеми датами нужного диапазона и связь по датам - потом группировка: короче описывать как реализовать больше - чем сама реализация
#6
by Cerera
так регистр это заполнить можно один раз. а отчетом пользуются ежедневно многие люди. и изза вычисляемых полей это происходит долго! Вот коммерческая прибыль у нас формируется в течении нескольких минут изза этих вычисляемых полей.
#9
by ChAlex
- в РегистрСведений.РегламентированныйПроизводственныйКалендарь - уже все есть (там еще по-моему есть и продолжительность дня) - остается только связать с входным набором периодов
#10
by dmpl
Как вариант - взять сумму календарных дней по условию ДатаКалендаря МЕЖДУ ДругаяТаблица.ДатаНачала И ДругаяТаблица.ДатаОкончания Только не факт что будет быстрее вычисляемых полей. А если отчет попробуют за 10 лет сформировать, что тогда?
#11
by dmpl
А вообще, можно во временную таблицу выбрать все сочетания дат в конкретном отчете, и на основании этих сочетаний формировать временную таблицу с полями ДатаНачала, ДатаОкончания, КоличествоДней, чтобы лишний раз не соединять с кучей строк производственного календаря.
#12
by Cerera
производственный календарь обновляется раз в год. так же раз в год можно обновлять новый регистр... зато мнгновенно будет работать.
#16
by ChAlex
- цитата ".. будут все возможные комбинации дат и в качестве ресурса будет количество дней между ними, просчитанное заранее. " - вы представляете себе количество комбинаций скажем хотя бы за месяц? А за год? Не забудьте между 1-м и 5-м, 2-м и 5-м и т.д. Дурное дело конечно не хитрое ... :)
#18
by dmpl
Понимимаешь, тут надо будет сразу на все будущее время сформировать все возможные сочетания дат. Иначе потом будешь постоянно сражаться с нулями дней в отчете. Думаешь, копаться среди 13 с лишним млн. записей будет быстрее?
#19
by Cerera
на будущее невозможно ведь неизвестны заранее праздничные дни. ну и нули так и так выходят если произв календарь не заполнен за анализируемый период. ну можно оставлять регистр заполненным только на текущий квартал. просто такие отчеты как правило нужны для рассчета дней просрочки.
#22
by Cerera
ну пени считаются исходя из дней просрочки без учета праздничных дней и выходных.... и зарплата так же зависит от таких просрочек.
#24
by Cerera
а нам интересны дни просрочки в интервалах даже свыше одного дня поскольку бонусы менеджерам от них пляшут.
#26
by ChAlex
Вот вам примерно готовый запрос с получением выборки (без СКД) - дальше модифицируйте как угодно: ИЗ
#28
by dmpl
Производственный календарь можно заполнять частями, раз в год. Тут же придется его перезаполнять постоянно, когда в очередной раз ноль вылезет в каких-нибудь местах. Такой регистр если и делать - то с автозаполнением по факту использования данного сочетания в отчете. Т.е., нет нужного сочетания - посчитали и сохранили. Итого возвращаемся к .
#30
by DrShad
штраф и пеня разные понятия! либо выражайтесь общепринятыми, либо подробно излагайте свои подразумевания
#31
by Cerera
не спорю. можно и в отчете. просто время. просто в не доконца понял что имелось ввиду и по умолчанию подумал что та же идея.
#33
by Feanorko
Таки не понимаю, в чем проблема сделать вычисляемое поле и считать разность дат как душе угодно?
#34
by ChAlex
- получаете массив: требуемые исходные строки (началопериода, конецПериода еще какие-то реквизиты вам нужные, например мне нужен был заказ и т.п.) - и в моем случае количество секунд каждый день в интервале с учетом выходных, предпраздничных и т.п. (можете сделать просто 1 для рабочего, 0 - для выходно, в зависимости от потребности) - все - просчитайте итоги продолжительности по ключевым полям - и вся задача
#36
by dmpl
Время будет только при первом формировании отчета, когда такой регистр массово будет заполняться. Тут минус в одном - придется писать код вне СКД. Да и то смотреть надо, сколько времени в реале выйдет. Может и не стоит сохранять - и достаточно просто во временную таблицу поместить, тогда можно и одним запросом обойтись.
#37
by ChAlex
+ если последний подзапрос переписать в виде: И График.ДатаОкончания >= Календарь.ДатаКалендаря) КАК Т СГРУППИРОВАТЬ ПО Т.ДатаНачала,Т.ДатаОкончания То получаете вам нужные данные, в предположении что "Смена" - формировали 1 - для рабочего дня и 0 - для выходного. Усе!!
#38
by Cerera
ну не дело это... долго работают вычисляемые поля и это уже не запрос. а запрос переносим на другие отчеты... а как вычисляемое поле перенесёшь куда-нибудь помимо СКД?
#40
by Kashemir
Тяжелый запрос - быстро вряд ли будет работать, для этого надо как минимум добавить ограничение на максимальную острочку платежа в календарных днях
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Как посчитать разницу между выбранными начальной и конечной датами периода?
- Вычислить количество месяцев между двумя датами.
- Как вычислить количество дней между датами.
- Новый способ расчета в ЗУП
- Вычислить количество месяцев между датами. (Delphi)
- Расчет % внутри колонки (функция Вычислить / Вычислить выражение)
В этой группе 1С
- Проброс USB на терминал.
- v7: ошибка при создание OLEDBData
- Сбиваются привязки в УТ док ЧекККМ
- багтрекер для 1с-ника
- Заполнение ТЧ данными из запроса
- v7: Пакетная Печать
- v7: ТиС 77 Существует ли обработка - надо снять галку в договорах "Контроль кредита"
- Вызов функции как на клиенте так и на сервере
- Компонента Chartui
- Почта в 1С не работает!
- Альфа-авто - зарплата ПОМОГИТЕ
- v7: Картинка с прозрачным фоном
- Отчет о розничных продажах бух 2.0
- ЗУП: шаблон проводки у удержания (проводка по НУ)
- Доработка результата работы СКД перед выводом
- ошибка sdbl соединение с базой не удерживается
- v7: Неверное имя реквизита!
- настройка отчета "Справка об исполнительской дисциплине""
- Где в конфигураторе можно изменить первую цифру в штрих коде?
- ЗУП: Миграционные карты