1с рабочие дни в запросе
Добавить к дате рабочие дни (Запрос)
Специальные предложения
А вот так не проще?
ВЫБРАТЬ МАКСИМУМ(ТребуемаяДата)
ИЗ (
ВЫБРАТЬ ПЕРВЫЕ 5
ДанныеПроизводственногоКалендаря.Дата КАК ТребуемаяДата
ИЗ
РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
ГДЕ
ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь.Код = «РФ»
И ДанныеПроизводственногоКалендаря.ВидДня В (ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий), ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
И ДанныеПроизводственногоКалендаря.Дата > &ТекущаяДата
УПОРЯДОЧИТЬ ПО
Дата
) КАК РабочиеДаты
Обновление 21.06.18 10:30
См. также
Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо
В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.
12.12.2020 4233 Eugen-S 23
Инкремент, модуль и прочая магия, которая скрыта под символом «?»
21.10.2021 6687 SeiOkami 38
Полезные примеры СКД, ч.2
Еще несколько примеров решения задач в СКД.
06.04.2021 10379 Neti 8
Обзор полезных методов БСП 3.1.4
25.03.2021 38920 rayastar 51
Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)
27.01.2016 85424 Serginio 115
Звуковое управление в 1С 8.3
В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.
16.03.2021 7039 velemir 33
Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions
28.12.2020 8744 comol 31
Базовые вещи БСП, которые облегчат жизнь программисту 1С
В данной публикации я опишу полезные процедуры и функции модуля общего назначения библиотеки стандартных подсистем, обязательные к использованию любым программистом 1С.
30.08.2020 19821 quazare 34
Использование программных перечислений, ч.1: строковые константы Промо
Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?
10.12.2016 41005 unichkin 74
Форма выбора (подбор) в управляемых формах
Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.
08.05.2020 75403 user5300 19
Программная работа с настройками СКД
Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.
27.01.2020 64316 ids79 26
[СКД] Программное создание схемы компоновки данных
Сделаем отчет на СКД полностью программно, без использования макета «схема компоновки данных».
15.01.2020 43011 John_d 22
Вспомогательные инструкции в коде 1С Промо
Помогаем редактору кода 1С помогать нам писать и анализировать код.
15.10.2018 35972 tormozit 106
Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения
Собрал информацию о событиях/подписках/расширениях в одном месте.
30.12.2019 34635 kuzyara 38
25.12.2019 8376 brooho 19
Полезные процедуры и функции для программиста
Все мы пишем программный код и часто используем процедуры, облегчающие его написание. Ниже приведена выборка таких полезных процедур и функций.
07.10.2019 39387 HostHost 41
Оформление и рефакторинг сложных логических выражений Промо
В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.
20.09.2012 82735 tormozit 131
Таблица значений. Нюансы
Обзор некоторых аспектов использования общеизвестного инструмента 1С.
01.10.2019 52404 Yashazz 56
[Шпаргалка] Программное создание элементов формы
Программное создание практически всех популярных элементов формы.
06.09.2019 100144 rpgshnik 75
Агрегатные функции СКД, о которых мало кто знает
Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.
05.09.2019 76667 ids79 56
Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо
Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.
11.07.2007 54225 tormozit 51
Регистры бухгалтерии. Общая информация
Общая информация о внутреннем устройстве регистров бухгалтерии.
05.09.2019 46005 YPermitin 25
Три костыля. Сказ про фокусы в коде
Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.
03.09.2019 30084 YPermitin 81
Иерархия без «В ИЕРАРХИИ»
Говорится о том, как эффективно представлять иерархию в СУБД, как получать и использовать эти представления при решении задач в запросной технике. Уточняются и дополняются запросы из статьи «Уровни, глубина, прародители, циклы и аналоги запросом» [https://infostart.ru/public/160707/].
22.08.2019 14943 ildarovich 24
Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо
Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки
10.09.2017 51005 tormozit 74
Отслеживание выполнения фонового задания
Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.
17.08.2019 44812 ids79 22
Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив
Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.
08.08.2019 149485 ids79 75
Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.
02.08.2019 59893 avalakh 26
Выгрузка документа по условию Промо
Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий. А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.
25.04.2019 17954 m-rv 3
Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.
26.07.2019 104061 ids79 16
Обработчики событий при записи объектов. Зачем и что за чем?
Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта. Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.
Добавление к датам рабочих дней в запросе
Задача
Дана таблица «Исходные даты» с колонками:
«Прибавить рабочих дней».
Нужно получить таблицу «Результат» с колонками:
«Прибавить рабочих дней»;
«Дата добавлены рабочие дни».
Запрос
Нужно пояснить применение конструкции:
«ДОБАВИТЬКДАТЕ(ИсходныеДаты.ДатаОтсчета, ДЕНЬ, ИсходныеДаты.ПрибавитьРабочихДней * 2 + 10)»
Назовём её «Глубина поиска».
Это конец периода, в котором мы ищем дату «Дата добавлены рабочие дни».
«Дата отсчета» = 01.07.2015.
«Прибавить рабочих дней» = 5.
Искомая дата ( «Дата добавлены рабочие дни» ) = 08.07.2015;
Глубина поиска в таком случае равна 21.07.2015.
Тоесть мы ищем дату 08.07.2015 и интервале между 01.07.2015 и 21.07.2015. И находим.
Потому что максимальное количество выходных подряд в году равно примерно 10 и соотношение рабочих и выходных дней примерно 2 к 1.
Таким образом должно работать для всех случаев.
Есть аналогичная публикация:
Отличие моей:
1) Сделано для БП 3.0;
2) Сделано для нескольких дат (задаётся в таблице, а не параметром);
3) Значительно более эффективный запрос.
Скачать файлы
Специальные предложения
Обновление 31.07.15 19:19
Код открыт Не указано
См. также
FormCodeGenerator Программная доработка форм. Часть 2 (Режим работы «Режим сравнения форм») на примере ERP 2.5 Промо
Данная публикация является продолжением описания функционирования обработки «FormCodeGenerator » в режиме сравнения форм и генерирования кода на основании сравнения. Подходит для перевода уже доработанных форм с интерактивной доработки на программную. Данный режим работы обработки снизит издержки при дальнейших обновлениях конфигураций.
21.12.2020 9728 27 huxuxuya 11
Интерактивная справка по объектам 1С (подключаемое расширение)
База знаний, подключаемая к объектам основной базы. Пополняется интерактивно, формируется в виде статей прямо в 1С (текст, картинки, таблицы, ссылки). Есть возможность прикрепления файлов, привязки к объектам 1С, возможности рейтинга и комментирования пользователями.
29.09.2020 15438 80 sapervodichka 45
Конвейер проверки качества кода
Jenkinsfile для выполнения проверки качества кода. Собирает информацию с АПК, EDT и BSL-LS. Сопоставляет ошибки с гит-репозиторием, выгруженным ГитКонвертором. Отправляет в Сонар.
04.09.2019 37439 27 Stepa86 46
Вам нравятся запросы в 1С?
Речь не только о том, что простейший запрос с «легальным» оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать «в нагрузку» к тексту запроса. Все эти «Новый Запрос», «УстановитьПараметр» и последующие пляски с обработкой результата. Пора с этим заканчивать!
03.07.2019 28207 7 m-rv 91
[Расширение] Контроль отрицательных остатков по регистру бухгалтерии при проведении Промо
Расширение позволяет без изменений конфигурации проверять остатки по регистру бухгалтерии при проведении каждого документа и запрещает проведение при появлении отрицательных остатков после проведения.
17.08.2015 54565 170 ekaruk 32
Отправка электронной почты с помощью локального почтового клиента из 1С, развернутой под удаленным рабочим столом
Решение для интерактивной (нажал-отредактировал) отправки электронных писем и печатных форм через почтовый клиент (Thunderbird, Outlook) находящийся на локальном компьютере, из конфигурации 1С, развернутой под удаленным рабочим столом (RDP, remote-app). Подходит также для локального развертывания 1С. Представлен пример быстрой интеграции с конфигурациями «Управление торговлей 10.3», «Управление производственным предприятием 1.3», «Комплексная автоматизация 1.1», «Бухгалтерия предприятия 2.0».
21.09.2018 30885 24 stvorl 1
Работа с публикациями «Инфостарт»
Работа с рублевыми публикациями на сайте «Инфостарт»: ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.
13.09.2018 28948 14 RocKeR_13 16
HTTP Сервисы: Путь к своему сервису. Часть 3
Продолжение статьи «HTTP Сервисы: Путь к своему сервису. Часть 2». В предыдущих частях мы использовали только Get, в этой части поговорим о других методах и длительных операциях.
27.08.2018 55087 68 dsdred 17
ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ («001», «Новый товар») Промо
Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.
01.06.2018 37110 96 m-rv 58
Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции
09.08.2018 36735 31 informa1555 30
Работа с данными выбора
17.07.2018 67765 25 kalyaka 17
Еще раз о рабочих днях. Быстрый способ расчета в запросах
Работа с производственными календарями, рабочими графиками часто встречается в практике разработки. Большинство задач можно свести к двум: 1) Добавить к дате (отнять от даты) некоторое количество рабочих дней и 2) найти разницу в рабочих днях между двумя датами. Несмотря на кажущуюся простоту, в этих задачах достаточно подводных камней, как методических, так и технологических. Естественно эта тема не была обойдена вниманием разработчиков типовых конфигураций и членов нашего сообщества. Простой поиск дает несколько результатов:
На мой взгляд, предлагаемые решения обладают теми или иными недостатками. В их числе:
Предлагаю свой вариант решения.
Постановка задачи:
Предположим, на предприятии ведется учет выполняемых работ. Каждая работа выполняется целое число дней, всегда начинается в начале дня, а заканчивается через несколько дней в конце дня. Продолжительность работ может быть от 1 дня, до нескольких лет (важность условия этого будет упомянута ниже). Необходимо иметь инструмент, позволяющий выполнять расчеты дат начала, окончания работ, продолжительностей работ, временных промежутков между работами. Все расчеты выполнять в рабочих днях. Решение должно позволять использование его в запросах.
Решение:
Решение поставленной задачи неожиданно получилось довольно простым.
Для учета рабочих графиков (производственных календарей) используем вспомогательный регистр сведений:
Регистр необходимо заполнить на весь период, в пределах которого будут производится расчеты.
Теперь для нахождения разницы дат нам надо в регистре найти два числа, соответствующие этим датам и определить их разницу. Для добавления к дате некоторого числа рабочих дней, надо в регистре найти соответствующее дате число, добавить к нему число рабочих дней, и по результату найти в регистре соответствующую дату рабочего дня. Осталось учесть упомянутые выше сложности и получим следующее:
Примеры использования
Как видим запросы получаются довольно простыми, не используются ни временные таблицы, ни группировки с агрегатными функциями, ни постобработка. Ничего не мешает производить расчет в запросе для нескольких записей. В прилагаемом файле реализован пример отчета по выполненным работам: дана дата начала, предполагаемая плановая продолжительность работы и фактическая дата завершения, определяется плановая дата завершения и отставание факта от плана.
Может возникнуть вопрос: оправдано ли с точки зрения производительности использование дополнительного регистра такой структуры, ведь при изменении флага рабочего/выходного дня надо пересчитывать все записи с большей датой? Я считаю, что вполне. Во-первых, изменение производственного календаря происходит обычно не чаще одного раза в месяц, а полный пересчет и сохранение набора записей за 100 лет(
40000 записей) по выбранному графику занимает считанные секунды. А во-вторых, выгода от использования быстрого массового расчета как правило с лихвой перекроет все время, потраченное на предварительную подготовку.
А что же БСП?
Опытный разработчик, использующий БСП, может сказать: «Так ведь в БСП реализовано почти что то же самое!». Да, действительно в БСП есть аналогичный регистр:
UPD 25.06.2019:
К статье приложена информационная база, в которой реализован описанный функционал, примеры отчетов, а также процедура заполнения и пересчета регистра.
1С рабочие дни в запросе
Разрабатывая некий функционал в 1С, бывает, необходимо посчитать количество рабочих дней после какой-то даты.
В этой статье примеры кода и запросы в которых считается количество рабочих дней:
Код, при вычислении определяет только по дню недели, викидывая выходные. Праздники не учитывает!
В запросе, с использованием производственного календаря и учетом всех праздников:
Еще один вариант, в котором допустим, что:
2) В документе Реализация заданы поля Дата и ОтсрочкаДней. Тогда:
Собственно, если календарь содержит и праздничные дни, то можно добавить секцию ГДЕ, и там отобрать только рабочие дни. В секции ГДЕ можно отобрать и интересующий календарь, если ведется несколько календарей.
Появилась необходимость посчитать количество рабочих дней за период, но не с учетом всех праздников, а просто выкинув субботы и воскресенья. Решил обойтись без использования производственного календаря.
Если все же нужно вычислить рабочие дни без праздников и выходных, по данным производственного календаря, то функция ЧислоРабочихДней, которая есть в некоторых конфигурациях (воспользуйтесь глобальным поиском) очень сэкономит вам время.
Итак получился вот такой код, чисто арифметика без запросов к БД:
Постановка задачи:
Есть таблица, в которой указаны дата возникновения долга и допустимое количество дней просрочки в рабочих днях. Для простоты добавим сам документ в таблицу.
04.03.2015 | 90 | |
Док 2 | 04.03.2015 | 5 |
Док 3 | 04.03.2015 | 10 |
Док 4 | 05.03.2015 | 60 |
В результате должны получить таблицу вида
Дата возникновения долга | Кол-во дней отсрочки | Дата возникновения просроченного долга |
---|---|---|
Док 1 | 04.03.2015 | 90 |
Док 2 | 04.03.2015 | 5 |
Док 3 | 04.03.2015 | 10 |
Док 4 | 05.03.2015 | 60 |
Первоначально был сделан отчет на СКД, куда помещался внешний набор данных. Но, посидев-покурив, решили сварганить запрос. И вот о нем и расскажу вам.
Реализация:
Первоначальные данные получаются следующим куском кода
Само собой получим Регламентированный производственный календарь.
Здесь необходимо установить параметр «ВидДня» (значения перечисления Рабочий и Предпраздничный). Далее соединяем таблицу календаря саму с собой и получаем индекс даты (т.е. порядок следования записей) в нашей таблице
Тут соединим таблицу ВТ и ВТ_РеглКалендарьСИндексами для того, что бы узнать какой индекс будет у нашей даты возникновения долга. Дополнительно добавим индексацию по расчетному полю для дальнейших соединений.
Здесь приведу результаты промежуточной таблицы для наглядности.
04.03.2015 | 90 | 1 293 | |
Док 2 | 04.03.2015 | 5 | 1 293 |
Док 3 | 04.03.2015 | 10 | 1 293 |
Док 4 | 05.03.2015 | 60 | 1 294 |
Здесь колонка “Индекс даты долга” показывает индекс поля “Дата возникновения долга” в таблице ВТ_РеглКалендарьСИндексами.
Далее мы можем получить результат ” Дата возникновения просроченного долга ” для каждой даты долга с учетом дней просрочки. Для этого соединим две таблицы.
Здесь условие соединения означает, что мы хотим получить только ту дату из таблицы ВТ_РеглКалендарьСИндексами, у которой разница Индекса регламентированного календаря и Индекса даты долга будет равно именно количеству дней отсрочки.
Результирующая таблица выглядит следующим образом:
Как прибавить разное количество банковских/рабочих дней в запросе на каждую дату возникновения долга
Постановка задачи:
Есть таблица, в которой указаны дата возникновения долга и допустимое количество дней просрочки в рабочих днях. Для простоты добавим сам документ в таблицу.
Ссылка | Дата возникновения долга | Кол-во дней отсрочки |
---|---|---|
Док 1 | 04.03.2015 | 90 |
Док 2 | 04.03.2015 | 5 |
Док 3 | 04.03.2015 | 10 |
Док 4 | 05.03.2015 | 60 |
В результате должны получить таблицу вида
Ссылка | Дата возникновения долга | Кол-во дней отсрочки | Дата возникновения просроченного долга |
---|---|---|---|
Док 1 | 04.03.2015 | 90 | |
Док 2 | 04.03.2015 | 5 | |
Док 3 | 04.03.2015 | 10 | |
Док 4 | 05.03.2015 | 60 |
Первоначально был сделан отчет на СКД, куда помещался внешний набор данных. Но, посидев-покурив, решили сварганить запрос. И вот о нем и расскажу вам.
Реализация:
Первоначальные данные получаются следующим куском кода
Само собой получим Регламентированный производственный календарь.
Здесь необходимо установить параметр «ВидДня» (значения перечисления Рабочий и Предпраздничный). Далее соединяем таблицу календаря саму с собой и получаем индекс даты (т.е. порядок следования записей) в нашей таблице
Тут соединим таблицу ВТ и ВТ_РеглКалендарьСИндексами для того, что бы узнать какой индекс будет у нашей даты возникновения долга. Дополнительно добавим индексацию по расчетному полю для дальнейших соединений.
Здесь приведу результаты промежуточной таблицы для наглядности.
Ссылка | Дата возникновения долга | Кол-во дней отсрочки | Индекс даты долга |
---|---|---|---|
Док 1 | 04.03.2015 | 90 | 1 293 |
Док 2 | 04.03.2015 | 5 | 1 293 |
Док 3 | 04.03.2015 | 10 | 1 293 |
Док 4 | 05.03.2015 | 60 | 1 294 |
Здесь колонка «Индекс даты долга» показывает индекс поля «Дата возникновения долга» в таблице ВТ_РеглКалендарьСИндексами.
Далее мы можем получить результат » Дата возникновения просроченного долга » для каждой даты долга с учетом дней просрочки. Для этого соединим две таблицы.
Здесь условие соединения означает, что мы хотим получить только ту дату из таблицы ВТ_РеглКалендарьСИндексами, у которой разница Индекса регламентированного календаря и Индекса даты долга будет равно именно количеству дней отсрочки.
Результирующая таблица выглядит следующим образом: