Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
jediAlex
4 / 4 / 3
Регистрация: 12.07.2011
Сообщений: 468
1

Реализация собственной функции Excel РАБДЕНЬ на языке 1с

27.09.2017, 15:27. Просмотров 211. Ответов 3
Метки нет (Все метки)

Здравствуйте. Очень нужно реализовать алгоритм нахождения даты рабочего дня, отстоящей от указанной начальной даты на заданное количество рабочих дней, т.е. аналог функции EXCEL РАБДЕНЬ. Может кто сталкивался с такой задачей? Может есть у кого примеры? Помогите пожалуйста.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2017, 15:27
Ответы с готовыми решениями:

Excel создание собственной функции для выделения части текста в ячейки
Доброго дня всем. Прошу помощи в разрешении следующей задачи: Формирую много отчетов и для...

WebSecurity и реализация собственной авторизации в БД
Пытаюсь заставить работать методы WebSecurity с моей базой и с моими таблицами. Для этого в модели...

Реализация стандартной функции Excel ВЫБОР на VBA
Здравствуйте! Помогите пжлста реализовать стандарную функцию excel "ВЫБОР".

РАБДЕНЬ ЧИСТРАБДНИ в ACCESS
Всем привет! Столкнулся с проблемой: Не смог найти в интернете способ реализации следующего...

Написание собственной функции
Упрощенная задача из книги Дейтла. За стоянку до 3-х часов парковочный гараж запрашивает плату...

3
SonicQ
283 / 183 / 18
Регистрация: 20.02.2012
Сообщений: 918
28.09.2017, 10:39 2
jediAlex, вот делал когда-то

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Функция РасчетДнейСДаты(НачДата,КолвоДней,РабочиеДни=Ложь)  Экспорт
    
    РабочихДней = 0; 
    ОбычныхДней = 0;
    ДеньНедели  = 0;
    
    Пока РабочихДней < Число(КолвоДней) Цикл 
        ОбычныхДней = ОбычныхДней+ 1;          
       // определим день недели 
       ДеньНедели=ДеньНедели(НачДата+(ОбычныхДней*86400));           
       // если не выходной, то прошел еще один рабочий день 
        Если ДеньНедели < 6 Тогда
            РабочихДней=РабочихДней+1;
        КонецЕсли;
    КонецЦикла;
    
    Если РабочиеДни Тогда
        Возврат (НачДата + (ОбычныхДней*86400));
    Иначе
        Возврат (НачДата + (РабочихДней*86400));
    КонецЕсли;  
    
КонецФункции
Добавлено через 2 минуты
можно с помощью регистра

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
        // получим количество дней по отсрочке платежа
        ТолькоРабочие = Ложь;
        Если ВидыДней = Перечисления.ВидыДней.Рабочие Тогда
            ТолькоРабочие = Истина;     
        КонецЕсли;
        
        Запрос = Новый Запрос();
        Запрос.Текст = "ВЫБРАТЬ
        |   ДанныеПроизводственногоКалендаря.Дата КАК Дата
        |ПОМЕСТИТЬ ВТ_Даты
        |ИЗ
        |   РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
        |ГДЕ
        |   ДанныеПроизводственногоКалендаря.Дата >= &ДатаНачалаОтсчета
        |
        |ИНДЕКСИРОВАТЬ ПО
        |   Дата
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |   ВТ_Даты.Дата,
        |   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДанныеПроизводственногоКалендаря.Дата) КАК КоличествоДней
        |ПОМЕСТИТЬ ВТ_ДниИКоличества
        |ИЗ
        |   ВТ_Даты КАК ВТ_Даты
        |       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
        |       ПО ВТ_Даты.Дата >= ДанныеПроизводственногоКалендаря.Дата
        |ГДЕ
        |   ВЫБОР
        |           КОГДА &ТолькоРабочие
        |               ТОГДА ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
        |           ИНАЧЕ ИСТИНА
        |       КОНЕЦ
        |   И ДанныеПроизводственногоКалендаря.Дата >= &ДатаНачалаОтсчета
        |
        |СГРУППИРОВАТЬ ПО
        |   ВТ_Даты.Дата
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |   ВТ_ДниИКоличества.Дата КАК Дата,
        |   ВТ_ДниИКоличества.КоличествоДней
        |ИЗ
        |   ВТ_ДниИКоличества КАК ВТ_ДниИКоличества
        |ГДЕ
        |   ВТ_ДниИКоличества.КоличествоДней = &КоличествоДней
        |
        |УПОРЯДОЧИТЬ ПО
        |   Дата";
        Запрос.УстановитьПараметр("ТолькоРабочие",ТолькоРабочие);
        Запрос.УстановитьПараметр("ДатаНачалаОтсчета",ДатаНачалаОтсчета);
        Запрос.УстановитьПараметр("КоличествоДней",Число(ОтсрочкаПлатежа));
        
        Результат = Запрос.Выполнить().Выгрузить();
        Если Результат.Количество()<>0 Тогда
            Возврат Результат[0].Дата;
        КонецЕсли;
0
jediAlex
4 / 4 / 3
Регистрация: 12.07.2011
Сообщений: 468
28.09.2017, 10:42  [ТС] 3
Спасибо большое. А праздники учитывали дополнительно? В тексте функции не вижу.
0
SonicQ
283 / 183 / 18
Регистрация: 20.02.2012
Сообщений: 918
28.09.2017, 10:43 4
jediAlex, в первой функции нет, праздники не учитываются. Для учета праздников лучше использовать производственный календарь (второй вариант с регистром)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2017, 10:43

создание собственной функции
Даны натуральные числа n, a1,…,an, где n≤4000. Найти члены ak последовательности a1,…,an, которые...

Создание собственной функции
Даны натуральные числа m, n и целые числа A1,..., An; B1,..., Bm;C1,..., C10. Создать собственную...

Добавление собственной функции в Lazarus
Подскажите, куда необходимо писать собственные функции в lazarus пишу в procedureButtonClick...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru