Расчет банковских (рабочих) дней (Оригинальный способ)

Публикация № 338386

Разработка - Практика программирования

Банковские (рабочие) дни

Как я рассчитал количество банковских дней в конфигурации, в которой, как мне казалось, нет производственного календаря - в конфигурации "Бухгалтерия предприятия 2.0". Метод применим для совершенно любой конфигурации: в том числе для ЗУП, в которой имеется соответствующий календарь. (Позже из комментариев выяснилось, что календарь-таки есть.)

Началось все с того, что понадобилось рассчитать просроченную задолженность покупателей с учетом отсрочки платежа в 10-ть банковских дней. Задача ставится на конфигурации "Бухгалтерия предприятия 2.0". Задачу расчета просрочек я решил в короткие сроки благодаря Инфостарту. Оставалось только учесть банковские дни просрочек, а не календарные.

Я решил так, что банковские дни - это по сути то же самое, что и рабочие дни при пятидневке в производственном календаре. Производственный календарь я взял из конфигурации ЗУП. На рисунке 1 показан взятый из пользовательского режима график работы и сохраненный в табличный документ mxl (рис.1).

рис.1 График работы 2014 г

рис. 1. График работы в 2015 г, пятидневка, конфигурация ЗУП

Вторым шагом я сохранил данный календарь в формате таблиц 1С - *.mxl. Удалил лишние строки и колонки. Скопировал получившийся календарь в макет обработки (рис.2).

рис.2 Макет календаря в обработке

рис.2. Макет календаря в обработке

В результате макет календаря стал выглядеть так: в строках заданы месяцы, в колонках - дни (рис.3).

рис.3. Календарь: месяцы - это строки, дни - это колонки

рис.3. "Подготовленный формат" календаря: месяцы - это строки, дни - это колонки

В модуле обработки я создал функции: первая возвращает количество банковских (рабочих) дней в заданном периоде, вторая - проверяет, является ли заданный день банковским, третья - прибавляет заданное количество банковских дней к заданной дате. 

Функция ПолучитьКолБанкДней(ДатаНачала, ДатаОкончания) Экспорт

   
ОчереднойДень = НачалоДня(ДатаНачала);
   
КолБанкДней = 0;
    Пока
ОчереднойДень<=НачалоДня(ДатаОкончания) Цикл

       
Макет = ПолучитьМакет("Год" + Формат(Год(ОчереднойДень), "ЧГ=0"));
       
стр = Месяц(ОчереднойДень);
       
кол = День(ОчереднойДень);
       
Текст = Макет.Область(стр, кол, стр, кол).Текст;
       
КолБанкДней = КолБанкДней + ?(Текст = "8", 1, 0);

       
ОчереднойДень = ОчереднойДень + 24*3600;
    КонецЦикла;

   
Сообщить(КолБанкДней);

    Возврат
КолБанкДней;

КонецФункции

Функция
ПрибавитьКолБанкДней(НачальнаяДата, КолБанкДней) Экспорт

   
КонечнаяДата = НачальнаяДата;
    Пока
КолБанкДней>0 Цикл
       
КонечнаяДата = КонечнаяДата + 24*3600;
        Если
ЭтоБанковскийДень(КонечнаяДата) = Истина Тогда
           
КолБанкДней = КолБанкДней - 1;
        КонецЕсли;
    КонецЦикла;

    Возврат
КонечнаяДата;

КонецФункции

Функция
ЭтоБанковскийДень(ОчереднойДень) Экспорт

   
Макет = ПолучитьМакет("Год" + Формат(Год(ОчереднойДень), "ЧГ=0"));
   
стр = Месяц(ОчереднойДень);
   
кол = День(ОчереднойДень);
   
Текст = Макет.Область(стр, кол, стр, кол).Текст;
    Возврат ?(
Текст = "8", Истина, Ложь);

КонецФункции

К статье прикреплена обработка "Производственный календарь.epf", содержащая календари банковских (рабочих) дней в макетах за 2010-2015 год и вышеуказанные функции для тестирования.

Всем всего доброго и успехов в работе!

Центр автоматизации, г. Казань


См. также:

Как эффективно использовать Инфостарт NEW!

Список реализаций + структура подчиненности + реестр документов SALE'1sm

Список заказов поставщикам + структура подчиненности SALE'1sm

Список заказов покупателей + структура подчиненности SALE'1sm

Договоры для 1с-ника ТОП-скачиваний

Сетка расписания (Планировщик) нестанДАрт

Два механизма, которые ускорили работу бухгалтеров в 1С нестанДАрт

Мини-CRM для УТ 10.3

Расчет банковских (рабочих) дней нестанДАрт

Шаблоны кода в режиме 1С:Предприятие SALE'1sm

Доработка конфигурации Конвертация Данных

Планирование платежей. Прогнозирование прибылей и убытков

Ввод показателей план-факта БП 3.0 Know-how

Инвентаризация личного опыта Для новичков 1С

Большие запросы: взгляд на проблему нестанДАрт

Технология создания коммерческих разработок Know-how

Андроид-решение для создания заказов в 1С Know-how + нестанДАрт

Отчет Остатки и цены

Печать ценников с одной и двумя ценами 55х40, 100х60, 140х200

Загрузка данных о розничных продажах из магазинов Intimissimi (Интимиссими) и Calzedonia (Кальцедония)

Доработки обмена "УТ 10.3 - интернет-магазина Shop-Script"

Скачать файлы

Наименование Файл Версия Размер
Обработка ПроизводственныйКалендарь
.epf 17,70Kb
06.03.18
3
.epf 17,70Kb 3 Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. WhiteOwl 324 25.03.15 10:33 Сейчас в теме
2. vasyak319 137 25.03.15 10:41 Сейчас в теме
Жесткач. Хорошо, что современные машины делают по несколько миллиардов операций в секунду и их не убить даже такими алгоритмами.
3. Alien_job 172 25.03.15 11:02 Сейчас в теме
(2) vasyak319, да ладно - регламентные отчеты тоже свои настройки в макетах хранят. Хотя в циклах они их, конечно, не получают.
4. vasyak319 137 25.03.15 11:34 Сейчас в теме
(3) Alien_job,
Хотя в циклах они их, конечно, не получают

во-во. Кроме того, из тех настроек слова не выкинешь, там всё нужно, а тут целая простыня ради нескольких чисел, хотя всё, что необходимо для этого алгоритма, это список отклонений, т.е. субботы-воскресенья, которые считаются банковскими днями и остальные дни недели, которые такими не считаются, а таких отклонений в год десяток.
Плюс отдельная премия Дарвина за вычисление перебором дней (особенно клёво, когда начальная дата пустая - тогда это over 700 тыщ итераций), что, впрочем, вытекает из остальных косяков алгоритма.
корум; +1 Ответить
7. Rustig 1365 25.03.15 12:54 Сейчас в теме
(4) задача решается на файловой базе, период расчета неустойки три года: с начала 2013г по текущий день 2015 г включительно - летает "на ура!" - проблем с производительностью нет. по поводу мелких недочетов - тут каждый сам решает для себя - у меня дата начала не может быть пустой - изначально стоит проверка в другой процедуре. такие дела. за замечания спасибо: может быть другим пригодится.
8. Rustig 1365 25.03.15 13:21 Сейчас в теме
(4) ваше замечание заставило меня задуматься: почему же при таком алгоритме проблем с производительностью не возникает? Оказывается, это следует из специфики самой постановки задачи - расчета просрочек: условно говоря, просрочка считается от ДатыОтгрузки до ДатыСледующегоСобытия (или даты оплаты или даты следующей отгрузки). Таким образом для каждой реализации (отгрузки) возникшая пара "ДатаНачала"-"ДатаОкончания" является "коротким" периодом, то есть к примеру от 14.03.2014 до 23.03.2014 прошло 9 календарных дней - в этом периоде определяется 6 банковских дней. То есть по сути цикл в алгоритме состоит из 9 итераций - проверяем каждый день является ли он банковским. Еще раз спасибо за замечание!
10. vasyak319 137 25.03.15 14:26 Сейчас в теме
(8) просто у вас объём маленький, а современные машины сцуко быстрые, так что если алгоритм, который при нормальной реализации отработал бы за микросекунду, работает в тысячу раз медленнее, вы этого один чёрт не заметите. Но это всё равно плохо, потому что миллисекунда тут, миллисекунда там, а в итоге документы по полминуты проводятся.
И это не просто теория, мне постоянно приходится давать ускоряющего пинка кривым алгоритмам, которые на полупустых базах летали.
Кроме того, это сейчас ваша процедура используется исключительно для отсрочки 10 дней. Другая задача появится, где тоже нужны будут банковские дни, и вы её либо заново переписывать будете, либо она будет у вас тормозить.
9. Rustig 1365 25.03.15 13:50 Сейчас в теме
(4) для более сложных задач (многоитерационных алгоритмов) можно при открытии формы обработки формировать временную таблицу значений, вытаскивая сведения из макета, а потом использовать эту таблицу в запросах.
11. vasyak319 137 25.03.15 14:43 Сейчас в теме
(9) т.е. передавать весь массив данных серверу - пусть развлекается? Снова неоправданная жестокость. На самом деле, если у вас всё ограничено известным периодом (а у вас всё как минимум ограничено периодом, для которого у вас есть календари), то вычисление каждой отсрочки можно свести к разности двух элементов одного массива.
12. Rustig 1365 26.03.15 07:13 Сейчас в теме
(11) мне кажется не стоит сгущать тучи по поводу производительности, предлагаю решать проблемы по мере их поступления, а не прогнозировать плохую производительность в будущих задачах и предлагаю не смешивать с этой задачей проблему долгого проведения документов - совсем уж разные темы.
Тема этой статьи - заключается в том, в БП 2.0 надо было посчитать банковские дни. Я описал одну из возможных реализаций. На мой скромный взгляд, получилось оригинально. :)
13. vasyak319 137 26.03.15 11:31 Сейчас в теме
(12) кстати, вот мне это сразу показалось странным, но я вам поверил, что в БП 2.0 нет производственного календаря. Сейчас решил таки посмотреть - он там есть. Тогда зачем вообще это всё?
tano23; Alien_job; +2 Ответить
14. Rustig 1365 26.03.15 14:23 Сейчас в теме
(13) что за объект метаданных?
15. Rustig 1365 26.03.15 14:26 Сейчас в теме
(13), (14) есть такой - регистр сведений Регламентированный производственный календарь. Ну, отлично! что ж сказать? не знал, что такой есть.
5. AganinEvgeniy 2 25.03.15 11:56 Сейчас в теме
Идея и правда не плоха ... но согласен с Василием, легче выбирать 20 отклонений в год и плюсовать их к номеру дня недели или что-то подобное намудрить, чем перебором обходить 365 дней.
6. fzt 25.03.15 12:03 Сейчас в теме
А почему бы и нет. Идея довольно простая и конфа не снята с поддержки.
Как улучшить:
1) Формируем всю эту радость в екселе.
2) К xls файлам можно делать полноценные SQL запросы, через драйвер ODBC (в поставке любой винды).
Экономия кучи машинного времени.
16. b-dm 169 27.03.15 11:28 Сейчас в теме
А все равно публикация классная. Мне нпонравилось и решение и описание. Плюс.
17. DDos76 199 31.03.15 19:37 Сейчас в теме
Реально способ оригинальный. За способ поставил +!
Следующий этап - календарь будет храниться в экселе, сначала по OLE (Пардон COM) попробуем оттуда забирать.
К xls файлам можно делать полноценные SQL запросы, через драйвер ODBC (в поставке любой винды). - это не так интересно.
Если будет медленно - там и до PegExp рукой подать. Разбор файла .XLS средствами 1с так сказать.
С 1 Апреля!
dgolovanov; +1 Ответить
Оставьте свое сообщение

См. также

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 7 по 24 апреля 2020 г. Промо

На курсе вы получите практические навыки решения задач производительности 1С, в том числе характерных для высоконагруженных информационных систем (более 1000 пользователей). Подготовка к экзамену – только одна из составляющих курса. 70% слушателей приходят за знаниями, которые позволят расти и зарабатывать, делать сложные задачи на крупных проектах.

16450 рублей

Неиндексированные измерения регистров сведений. В помощь 1С:Эксперту

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Абонемент ($m) Прочие инструменты разработчика

Обработка показывает неиндексированные измерения регистров сведений, из-за которых случаются блокировки. Для любых баз 1С - на обычных и управляемых формах.

1 стартмани

07.01.2020    3613    12    Rustig    30       

Онлайн-курс «Практические аспекты внедрения регламентированного учета и расчета себестоимости в 1С:ERP на крупных промышленных предприятиях» с 20 апреля по 15 мая 2020 года. Промо

Курс рассчитан для подготовки экспертов по регламентированному учету и учету затрат для внедрения на крупных промышленных предприятиях с «исторически сложившимся» учетом

9000 рублей

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Вам нравятся запросы в 1С?

Инструменты и обработки Программист Конфигурация (md, cf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Практика программирования Разработка

Речь не только о том, что простейший запрос с "легальным" оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать "в нагрузку" к тексту запроса. Все эти "Новый Запрос", "УстановитьПараметр" и последующие пляски с обработкой результата... Пора с этим заканчивать!

1 стартмани

03.07.2019    14505    4    m-rv    86       

1C:Предприятие для программистов: Расчетные задачи (зарплата). Онлайн-интенсив с 01 по 17 июня 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, которые предназначены для автоматизации периодических расчетов, а именно - для расчета зарплаты. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей прикладного решения “1С:Зарплата и управление персоналом” и прочих прикладных решений, в которых реализован функционал расчета зарплаты.

4900 рублей

Доработки УТ 10.3, улучшающие работу пользователей

Статья Программист Внешняя обработка (ert,epf) v8 v8::ОУ УТ10 УУ Оптовая торговля Абонемент ($m) Обработка документов Рабочее место

Как показать прибыль по заказу, как показать прикрепленные файлы к документам - когда документов по заказу много, как показать расчет процентов по менеджерам - и все в одном окне УТ 10.3.

4 стартмани

26.04.2019    6331    7    Rustig    12       

DevOps для 1С. Онлайн-курс проходит с 16 апреля по 11 июня 2020 года. Промо

Данный онлайн-курс предусматривает изучение процессов DevOps, их применение при разработке на платформе 1С. В результате прохождения онлайн-курса вы сможете: настроить ПО необходимое для проведения проверок и тестирования, создавать сценарии тестирования и объединять их в комплексные процессы, создавать скрипты для автоматизации процессов DevOps.

12000 рублей

SALE! 10%

Как свернуть базу УТ 10.3

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::ОУ УТ10 Россия УУ Платные (руб) Свертка базы

Как свернуть УТ 10.3. Цель свертки - свернуть остатки по товарам и по взаиморасчетам с контрагентами.

1600 руб.

04.04.2019    11076    59    5       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Безопасная работа с транзакциями во встроенном языке

Статья Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования

Разбираемся с опасностями использования транзакций во встроенном языке 1С. Познаем ошибку "В данной транзакции уже происходили ошибки". Учимся защищаться от них.

1 стартмани

25.03.2019    23468    9    tormozit    44       

Сравнение запросов

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Инструментарий разработчика

На входе - два разных запроса и две выборки с одинаковыми полями. На выходе - итоговая таблица показывает расхождения между полученными результатами запросов.

2 стартмани

16.03.2019    7497    12    Rustig    31       

Базовый курс для начинающих 1С-программистов. Онлайн-интенсив со 2 июня по 2 июля 2020 г. Промо

Данный онлайн-курс является начальной ступенью по изучению базовых принципов программирования в системе “1С:Предприятие” и предназначен для обучения 1С-программированию “с нуля”.

4500-9500 рублей

Онлайн-курс «Автоматизация процессов управления МТО: методика сбора и формализации требований» с 1 апреля по 13 мая 2020 года. Промо

Цель курса - повысить полноту и качество сбора и формализации требований к автоматизации процессов управления материально-техническим обеспечением. Курс основан на процессном подходе, позволяет в полном объеме выявить и учесть все факторы, влияющие на специфику процессов управления МТО. Участники курса получают теоретические знания в области организации процессов управления МТО и готовый инструментарий для сбора и формализации требований по автоматизации этих процессов (шаблоны, опросники, модели).

40000 рублей

Счет на оплату с НДС 20%

Отчеты и формы Бухгалтер Внешняя обработка (ert,epf) v8 v8::ОУ БП2.0 УТ10 Оптовая торговля Абонемент ($m) Печатные формы документов

Счет на оплату с НДС 20% и уведомлением, что НДС изменится с 01.01.2019г.

1 стартмани

12.11.2018    9459    28    Rustig    13       

Элементы внедрения системы адресного хранения на программе "Кортес: Адресный склад"

Отчеты и формы Бизнес-аналитик Пользователь Руководитель проекта Внешний отчет (ert,erf) v8 КА1 УУ Учет ТМЦ Абонемент ($m) Управление проектом

С чего начать внедрение адресного хранения склада? Возможно ли проводить безбумажную инвентаризацию? Не понимаете, о чем я спрашиваю? - Объясню по порядку.

1 стартмани

12.11.2018    8494    16    Rustig    40       

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Проверка действительности паспортов, проверка ФЛ на негатив в ЗУП 3.1

Отчеты и формы Бухгалтер Внешняя обработка (ert,epf) v8 v8::СПР ЗУП3.x Россия Управление персоналом (HRM) Абонемент ($m) Бухгалтерские

Обработка проверки действительности паспортов физических лиц в 1С ЗУП 3.x. Обработка обращается к API сервису проверки паспортов и открытых реестров. При работе в демо режиме обращение к сервису происходит с задержкой в 2 секунды. Проверка ФЛ на негатив осуществляется по следующим открытым реестрам: реестр дисквалифицированных лиц, реестр массовых руководителей, реестр массовых учредителей, реестр лиц причастных к террористической деятельности, открытый реестр недействительных паспортов. Не работает в демо режиме.

1 стартмани

04.11.2018    12678    11    user718500    4       

Онлайн-интенсив "1C:Предприятие для программистов: Бухгалтерские задачи" с 22 июня по 8 июля 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, которые предназначены для решения задач бухгалтерского учета. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей прикладного решения “1С:Бухгалтерия” и прочих прикладных решений, в которых реализованы соответствующие механизмы для автоматизации бухгалтерских задач.

4900 рублей

Планирование платежей. Прогнозирование прибылей и убытков. Часть 1.

Отчеты и формы Бизнес-аналитик Руководитель проекта Архив с данными v8 v8::ОУ УТ10 УУ Финансовый учет и бюджетирование (FRP) Абонемент ($m) Финансовые

Планирование поступлений от клиентов, списаний налогов и оплат поставщикам. И как следствие - прогнозирование прибыли или убытков.

2 стартмани

21.10.2018    7252    1    Rustig    57       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Работа с публикациями "Инфостарт"

Инструменты и обработки Программист Архив с данными v8 УУ Абонемент ($m) Практика программирования О сообществе WEB

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    13695    12    RocKeR_13    16       

SALE! 10%

Доработки обмена "УТ 10.3 - интернет-магазина Shop-Script"

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::ОУ УТ10 УУ Оптовая торговля Розничная торговля Учет ТМЦ Платные (руб) WEB

Доработки типового обмена между УТ 10.3 и интернет-магазином Shop-Script на движке Webasyst: выгрузка нулевого количества товара, номенклатурных групп вместо групп номенклатуры и дополнительного описания номенклатуры.

1000 руб.

07.09.2018    6606    2    0       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Группировка товаров при печати чеков ККМ

Отчеты и формы Бухгалтер Внешняя обработка (ert,epf) v8 КА1 УТ10 БУ Кассовые операции Розничная торговля Абонемент ($m) Печатные формы документов ККМ

Товары группируются по своей иерархии товаров. Длина чека ККМ сокращается в разы. Общая сумма чека ККМ и общее количество товаров не изменяется.

2 стартмани

07.09.2018    6659    Rustig    13