Как добавить рабочие дни к дате

Задача добавление рабочих дней к дате (добавить рабочие дни к дате) встречается довольно часто. И штатно должна решаться с помощью стандартного функционала БСП — «Производственный календарь». Например так:

Функция ДобавитьКДатеРабочиеДни(ДатаНач,ЧислоРабочихДней) экспорт
    Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
                 |    ВЫБОР
                 |        КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня = &РабочийДень
                 |                ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = &ПредпраздничныйДень
                 |            ТОГДА 1
                 |        ИНАЧЕ 0
                 |    КОНЕЦ КАК ЧислоРабочихДней,
                 |    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаКалендаря
                 |ПОМЕСТИТЬ ТЗ
                 |ИЗ
                 |    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
                 |ГДЕ
                 |    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНач И &ДатаКон
                 |;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |ВЫБРАТЬ
                 |    ТЗ.ДатаКалендаря,
                 |    СУММА(ТЗ1.ЧислоРабочихДней) КАК ЧислоРабочихДней
                 |ПОМЕСТИТЬ ТЗНакопл
                 |ИЗ
                 |    ТЗ КАК ТЗ
                 |        ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ1
                 |        ПО (ТЗ1.ДатаКалендаря <= ТЗ.ДатаКалендаря)
                 |
                 |СГРУППИРОВАТЬ ПО
                 |    ТЗ.ДатаКалендаря
                 |;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |ВЫБРАТЬ
                 |    МАКСИМУМ(ТЗ.ДатаКалендаря) КАК ДатаКалендаря
                 |ИЗ
                 |    ТЗНакопл КАК ТЗ
                 |ГДЕ
                 |    ТЗ.ЧислоРабочихДней = &ЧислоРабочихДней";
    Запрос.УстановитьПараметр("ДатаНач",             ДатаНач);
    ЧислоНедель = Цел(ЧислоРабочихДней/5+0.5);
    ЧислоВыходныхДней = ЧислоНедель*2;
    МаксимальноеКоличествоПраздничныхДнейПодряд = 8; //РождественскиеКаникулы
    ДатаКон = ДатаНач+(ЧислоВыходныхДней+ЧислоРабочихДней+МаксимальноеКоличествоПраздничныхДнейПодряд)*24*60*60;
    Запрос.УстановитьПараметр("ДатаКон",ДатаКон);
    Запрос.УстановитьПараметр("ЧислоРабочихДней",ЧислоРабочихДней);
    Запрос.УстановитьПараметр("РабочийДень",         Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий);
    Запрос.УстановитьПараметр("ПредпраздничныйДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный);
    Выборка = Запрос.Выполнить().Выбрать();
    Результат = 0;
    Если Выборка.Следующий() Тогда
        Результат = КонецДня(Выборка.ДатаКалендаря)+1; 
    Конецесли;    
    Возврат Результат;
КонецФункции  

Однако не всё же не все конфигурации содержат производственный календарь. Например почему-то обделено Делопроизводство 2.0. Что-бы не городить огород,, решил задачу «в лоб», без учёта праздничных дней — просто проверяю выпадение даты на субботу-воскресенье. В моём случае этого хватило.

Функция ДобавитьКДатеРабочиеДни(ДатаПроверки,дней)
    добавлено=0;
	пока добавлено<>дней цикл
	  ДатаПроверки=ДатаПроверки+86400;	         
	  Если ДеньНедели(ДатаПроверки) <> 6 ИЛИ ДеньНедели(ДатаПроверки) <> 7 Тогда
		  добавлено=добавлено+1;
	  конецесли;	  
     конеццикла;	
  	Возврат ДатаПроверки;
КонецФункции
добавить рабочие дни к дате

Другие статьи по теме 1С, можно почитать тут

Продвинутая отправка почты из консоли

Есть множество статей как отправить почту из консоли терминала Linux. Но в основной своей массе, это всё касается уже настроенного почтового сервера. А если нужно отправить почту используя настройки SMTP с авторизацией, указанием кодировки и вложением в виде файла? Их есть у меня (с). Ниже пример:

echo "Test text" | mail -e 'set content_type=text/html' -v -S sendcharsets=utf-8,iso-8859-1 -s "Результат тестирование" -S smtp="асываo.ru:587" -S ssl-verify=ignore -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user="vlg1-Noreply@interrao.ru" -S smtp-auth-password='ываывываы' -S from=noreply@ывывсывс.ru ывсывсыв@сывасывсыв.ru </var/tmp/res.html

Этот пример вышлет письмо в кодировке UTF-8, со вложенным файлом res.html. Авторизация по логину-паролю, с шифрованием start SSL.

как отправить почту из консоли терминала Linux

Другие статьи на эту тему тут