Дата запрета редактирования на два дня Розница

В Рознице решили сделать запрет редактирования не на один, а на два дня. По умолчанию доступен только один день:

Структура регистра выглядит так:

И вариант даты запрета задается строкой в описании даты запрета:

В модуле ДатыЗапретаИзмененияСлужебныйКлиентСервер я нашел следы попыток прошлого программиста добавит свои варианты дата запрета:

&Вместо("РасчетДатыЗапрета")
Функция РС_РасчетДатыЗапрета(Знач ВариантДатыЗапрета, Знач ТекущаяДатаНаСервере)

	Сутки = 60*60*24;

	ТекущаяДатаЗапрета    = '00010101';
	ПредыдущаяДатаЗапрета = '00010101';

	Если ВариантДатыЗапрета = "КонецПрошлогоГода" Тогда
		ТекущаяДатаЗапрета    = НачалоГода(ТекущаяДатаНаСервере) - Сутки;
		ПредыдущаяДатаЗапрета = НачалоГода(ТекущаяДатаЗапрета)   - Сутки;

	ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоКвартала" Тогда
		ТекущаяДатаЗапрета    = НачалоКвартала(ТекущаяДатаНаСервере) - Сутки;
		ПредыдущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаЗапрета)   - Сутки;

	ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоМесяца" Тогда
		ТекущаяДатаЗапрета    = НачалоМесяца(ТекущаяДатаНаСервере) - Сутки;
		ПредыдущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаЗапрета)   - Сутки;

	ИначеЕсли ВариантДатыЗапрета = "КонецПрошлойНедели" Тогда
		ТекущаяДатаЗапрета    = НачалоНедели(ТекущаяДатаНаСервере) - Сутки;
		ПредыдущаяДатаЗапрета = НачалоНедели(ТекущаяДатаЗапрета)   - Сутки;

	ИначеЕсли ВариантДатыЗапрета = "ПредыдущийДень" Тогда
		ТекущаяДатаЗапрета    = НачалоДня(ТекущаяДатаНаСервере) - Сутки;
		ПредыдущаяДатаЗапрета = НачалоДня(ТекущаяДатаЗапрета)   - Сутки;
	ИначеЕсли ВариантДатыЗапрета = "ПозавчерашнийДень" Тогда
		ТекущаяДатаЗапрета    = НачалоДня(ТекущаяДатаНаСервере) - Сутки*2;
		ПредыдущаяДатаЗапрета = НачалоДня(ТекущаяДатаЗапрета)   - Сутки*2;
	КонецЕсли;	


	Возврат Новый Структура("Текущая, Предыдущая", ТекущаяДатаЗапрета, ПредыдущаяДатаЗапрета);

КонецФункции
&Вместо("ОписанияДатЗапрета")
Функция РС_ОписанияДатЗапрета()
	
	Список = Новый Соответствие;
	Список.Вставить("",                      НСтр("ru = 'Не установлена'"));
	Список.Вставить("ПроизвольнаяДата",      НСтр("ru = 'Произвольная дата'"));
	Список.Вставить("КонецПрошлогоГода",     НСтр("ru = 'Конец прошлого года'"));
	Список.Вставить("КонецПрошлогоКвартала", НСтр("ru = 'Конец прошлого квартала'"));
	Список.Вставить("КонецПрошлогоМесяца",   НСтр("ru = 'Конец прошлого месяца'"));
	Список.Вставить("КонецПрошлойНедели",    НСтр("ru = 'Конец прошлой недели'"));
	Список.Вставить("ПредыдущийДень",        НСтр("ru = 'Предыдущий день'"));
	Список.Вставить("ПозавчерашнийДень",        НСтр("ru = 'Позавчерашний день'"));

	Возврат Список;

КонецФункции

Но самое смешное, что этот же код дублировался и в ДатыЗапретаИзмененияСлужебный.ДатаЗапретаПоОписанию, поэтому эти изменения ни на что не влияли.

Причем вторая строка в описании даты запрета — это на сколько дней отложить:

В итоге решили с клиентом, что запрет на один день будет обозначать запрет на два дня, расширил модуль:

&Вместо("ДатаЗапретаПоОписанию")
Функция РС_ДатаЗапретаПоОписанию(ОписаниеДатыЗапрета, ДатаЗапрета, НачалоДня)
	Результат = ПродолжитьВызов(ОписаниеДатыЗапрета, ДатаЗапрета, НачалоДня); 

	
	//из первой строки описания даты запрета
	ВариантДатыЗапрета    = СтрПолучитьСтроку(ОписаниеДатыЗапрета, 1);
	Если ВариантДатыЗапрета = "ПредыдущийДень" Тогда
		Результат   = НачалоДня(НачалоДня)          - 2*3600*24; //двое суток
	КонецЕсли;
	
	Возврат Результат;
КонецФункции

В итоге все работает как надо, можно проверить проведя документ:

Опять 1С опозорилась с дублированием одинакового кода в нескольких модулях. Ну сколько же можно…

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *