Имя: Пароль:
1C
 
Расчет даты в рабочих днях
0 NIGHTHUNTER
 
18.05.22
06:00
Конфигурация 1С:ERP Управление предприятием 2 (2.5.6.291) .

Подскажите пожалуйста. каким образом можно рассчитать реквизит До, по рабочим дням?
Используя рабочие даты для этого.

Я сделал пересчет обычными датами, числами, -       

Объект.До = ТекущаяДата() + (24*60*60) * Объект.СрокПредоставленияДокумента;

Что оказалось не правильным. И нужно в пересчете учитывать только рабочие дни.
1 Bigbro
 
18.05.22
06:02
используй календарь, в котором указано какие дни считать рабочими. (с) Ваш Кэп.
учти, что в разных регионах календари разные. если твоя задача теоретически может выполняться более чем в одной локации.
2 PuhUfa
 
18.05.22
06:44
И наверняка есть готовая функция для этого в общих модулях...
3 NIGHTHUNTER
 
18.05.22
06:44
(1) Как я понимаю этот календарь есть в конфигурации (0)? Как его использовать, я не знаю и узнаю.
Так же есть разные примеры, как это возможно делать. Но как это можно делать в моем случае?
Для одной территории. Везде рабочие дни одни. РФ. Думаю, я.
4 NIGHTHUNTER
 
18.05.22
06:45
(2) Я и хочу узнать какая? Так как они есть разные в разных конфигурациях.
И где то есть примеры самостоятельного этого пересчета. Высчитывая выходные дни, может и праздники.

Должен быть типовой для этого в конфигурации (0) .
5 VoditelKobyly
 
18.05.22
07:13
Посмотри есть ли у тебя в конфе функция ДатаПоКалендарю
6 NIGHTHUNTER
 
20.05.22
13:00
(5) Да, в ОбщемМодуле КалендарныеГрафики .

// Возвращает дату, которая отличается указанной даты ДатаОт на количество дней,
// входящих в указанный график или производственный календарь ГрафикРаботы.
//
// Параметры:
//     ГрафикРаботы    - СправочникСсылка.Календари
//                     - СправочникСсылка.ПроизводственныеКалендари - график или
//                    производственный календарь, который необходимо использовать для расчета даты.
//     ДатаОт            - Дата - дата, от которой нужно рассчитать количество дней.
//     КоличествоДней    - Число - количество дней, на которые нужно увеличить дату начала.
//     ВызыватьИсключение - Булево - если Истина, вызвать исключение в случае незаполненного графика.
//
// Возвращаемое значение:
//     Дата, Неопределено - дата, увеличенная на количество дней, входящих в график.
//                          Если выбранный график не заполнен, и ВызыватьИсключение = Ложь, возвращается Неопределено.
//
Функция ДатаПоКалендарю(Знач ГрафикРаботы, Знач ДатаОт, Знач КоличествоДней, ВызыватьИсключение = Истина) Экспорт
    
    Если Не ЗначениеЗаполнено(ГрафикРаботы) Тогда
        Если ВызыватьИсключение Тогда
            ВызватьИсключение НСтр("ru = 'Не указан график работы или производственный календарь.';
                                    |en = 'Work schedule or business calendar is not specified.'");
        КонецЕсли;
        Возврат Неопределено;
    КонецЕсли;
    
    ДатаОт = НачалоДня(ДатаОт);
    
    Если КоличествоДней = 0 Тогда
        Возврат ДатаОт;
    КонецЕсли;
    
    МассивДней = Новый Массив;
    МассивДней.Добавить(КоличествоДней);
    
    МассивДат = ДатыПоКалендарю(ГрафикРаботы, ДатаОт, МассивДней, , ВызыватьИсключение);
    
    Возврат ?(МассивДат <> Неопределено, МассивДат[0], Неопределено);
    
КонецФункции



Там разные есть функции. Они как то могут помочь?
7 Kassern
 
20.05.22
13:05
(6) там же все по-русски написано, вы не можете понять, что данный код делает?
8 NIGHTHUNTER
 
20.05.22
13:09
(7) У меня вечер. Я сейчас не могу информацию воспринимать.
Я так на будущее. Теперь в понедельник, буду это разбирать.
9 Kassern
 
20.05.22
13:11
(8) а как же выходные для саморазвития?
10 NIGHTHUNTER
 
20.05.22
13:22
(9) Где бы сил на это взять?
Выходные, я видимо буду в огороде проводить. Выбирать новую лопату. и тд.
Тут как то подряд, 2 сломались. Выкорчевывал куст.
11 NIGHTHUNTER
 
23.05.22
10:17
И эта конструкция

Объект.До = ТекущаяДата() + (24*60*60) * Объект.СрокПредоставленияДокумента;


И эта, дали одинаковый результат

    ГрафикРаботы   = Справочники.ПроизводственныеКалендари.НайтиПоКоду("РФ");
    ДатаОт         = ТекущаяДата();
    КоличествоДней = Объект.СрокПредоставленияДокумента;
    Объект.До      = КалендарныеГрафики.ДатаПоКалендарю(ГрафикРаботы, ДатаОт, КоличествоДней);


Как выявить, что КалендарныеГрафики.ДатаПоКалендарю, работает правильно ?
12 H A D G E H O G s
 
23.05.22
10:25
(11) Нужно копать дальше.
Вам хорошо, вы -сильный.
13 Ryzeman
 
23.05.22
10:26
выделяешь мышкой в коде "ДатаПоКалендарю", нажимаешь F12, нажимаешь [enter]. Сперва читаешь описание функции (большинство фукнций 1сников сносно описаны), если этого недостаточно - глазками пробегаешься по коду и смотришь что он делает. Заодно мотаешь на ус "как надо".
14 NIGHTHUNTER
 
23.05.22
11:36
(13)

В (6) ее листинг с описанием.
А в конфигурации в справочнике ПроизводственныеКалендари, есть два элемента.
http://joxi.ru/p27pgLvCL9jElA , у обоих код РФ.

    ГрафикРаботы   = Справочники.ПроизводственныеКалендари.НайтиПоКоду("РФ");
    ДатаОт         = ТекущаяДата();
    КоличествоДней = Объект.СрокПредоставленияДокумента;
    Объект.До      = КалендарныеГрафики.ДатаПоКалендарю(ГрафикРаботы, ДатаОт, КоличествоДней);

Я ищу по коду и передаю в функцию. Но на сколько это нормлаьно отрабатывает, я не знаю.

Производсвенный календарь это что то грандиозное http://joxi.ru/l2Zz3VEClBML02 . Как это. можно самому делать?

Хочется узнать, на сколько правильно отрабатывает функция (6). И нужно ли использовать ее? Может другую какую то? Там же есть разные.
15 Kassern
 
23.05.22
11:38
(14) "Производсвенный календарь это что то грандиозное" - ахах, производственный календарь, это всего лишь справочник, данные которого хранятся в регистре сведений простом. "Грандиозное" здесь лишь форма красивая с календариком)
16 Ryzeman
 
23.05.22
12:11
(14) У тебя на скрине не код, а наименование. В типовых код этого справочника уникален.

Ну и что ты в этом листинге увидел? Где значение, которое тебе функция возвращает? Ответь сам на вопрос - правильное или нет? Или может там ещё одна функция есть в которую надо посмотреть?