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

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

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

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

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

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




Свежие комментарии