ДатаЗапретаПоОписанию (БСП)

Автор: 1С
ОбщийМодуль.ДатыЗапретаИзмененияСлужебный
БСП

Дата запрета по описанию. Возвращает дату запрета, рассчитанную по описанию относительной даты запрета.

// Возвращает дату запрета, рассчитанную по описанию относительной даты запрета.
//
// Параметры:
//  ОписаниеДатыЗапрета - Строка - содержит описание относительной даты запрета.
//  ДатаЗапрета         - Дата - абсолютная дата, полученная из регистра.
//  НачалоДня           - Дата - текущая дата сеанса на начало дня.
//                      - Неопределено - вычислить автоматически.
//
Функция ДатаЗапретаПоОписанию(ОписаниеДатыЗапрета, ДатаЗапрета, НачалоДня = '00010101') Экспорт
	
	Если Не ЗначениеЗаполнено(ОписаниеДатыЗапрета) Тогда
		Возврат ДатаЗапрета;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(НачалоДня) Тогда
		НачалоДня = НачалоДня(ТекущаяДатаСеанса());
	КонецЕсли;
	
	Сутки = 60*60*24;
	КоличествоДнейРазрешения = 0;
	
	ВариантДатыЗапрета    = СтрПолучитьСтроку(ОписаниеДатыЗапрета, 1);
	КоличествоДнейСтрокой = СтрПолучитьСтроку(ОписаниеДатыЗапрета, 2);
	
	Если ЗначениеЗаполнено(КоличествоДнейСтрокой) Тогда
		ОписаниеТипа = Новый ОписаниеТипов("Число");
		КоличествоДнейРазрешения = ОписаниеТипа.ПривестиЗначение(КоличествоДнейСтрокой);
	КонецЕсли;
	
	Если ВариантДатыЗапрета = "КонецПрошлогоГода" Тогда
		ТекущаяДатаЗапрета    = НачалоГода(НачалоДня)          - Сутки;
		ПредыдущаяДатаЗапрета = НачалоГода(ТекущаяДатаЗапрета) - Сутки;
		
	ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоКвартала" Тогда
		ТекущаяДатаЗапрета    = НачалоКвартала(НачалоДня)          - Сутки;
		ПредыдущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаЗапрета) - Сутки;
		
	ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоМесяца" Тогда
		ТекущаяДатаЗапрета    = НачалоМесяца(НачалоДня)          - Сутки;
		ПредыдущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаЗапрета) - Сутки;
		
	ИначеЕсли ВариантДатыЗапрета = "КонецПрошлойНедели" Тогда
		ТекущаяДатаЗапрета    = НачалоНедели(НачалоДня)          - Сутки;
		ПредыдущаяДатаЗапрета = НачалоНедели(ТекущаяДатаЗапрета) - Сутки;
		
	ИначеЕсли ВариантДатыЗапрета = "ПредыдущийДень" Тогда
		ТекущаяДатаЗапрета    = НачалоДня(НачалоДня)          - Сутки;
		ПредыдущаяДатаЗапрета = НачалоДня(ТекущаяДатаЗапрета) - Сутки;
	Иначе
		Возврат '00030303'; // Неизвестный формат.
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ТекущаяДатаЗапрета) Тогда
		СрокРазрешения = ТекущаяДатаЗапрета + КоличествоДнейРазрешения * Сутки;
		Если Не НачалоДня > СрокРазрешения Тогда
			ТекущаяДатаЗапрета = ПредыдущаяДатаЗапрета;
		КонецЕсли;
	КонецЕсли;
	
	Возврат ТекущаяДатаЗапрета;
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ОписанияДатЗапрета (БСП)

ОбновитьРазделыДатЗапретаИзменения (БСП)

Запрет выгрузки в КД по дате запрета редактирования

ПриЗаполненииРазделовДатЗапретаИзменения (БСП)

РассчитанныеДатыЗапретаИзменения (БСП)

ОткрытьДатыЗапретаЗагрузкиДанных (БСП)

УточнитьНастройкуДатыЗапретаПриИзменении (БСП)

ОбновитьОтображениеДатыЗапретаПриИзменении (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз