Программа 1С ERP позволяет довольно гибко настраивать даты запрета редактирования данных, и в разрезе пользователей, и в разрезе разделов с объектами, однако этой гибкости иногда не хватает.

Версия программы 2.5.6.171.

Например, нужно настроить систему так, чтобы определённый пользователь мог изменять документы "Сверка взаиморасчётов" за прошлый год, хотя общая дата запрета редактирования данных установлена на начало текущего года.

Можно попытаться решить задачу, установив дату запрета для раздела. В программе есть раздел "Взаимозачеты и списания задолженности", и если установить для него дату запрета на начало прошлого года, то прошлогодние документы "Сверка взаиморасчётов" можно исправлять. Однако, в раздел "Взаимозачеты и списания задолженности" входят ещё документы "Взаимозачёт задолженности" и "Списание задолженности", а их править в прошлом периоде по условию задачи нельзя.

Видится несколько вариантов решения. Например, для раздела "Взаимозачеты и списания задолженности" доступна настройка даты запрета по объекту "Организация". Можно попробовать модифицировать конфигурацию таким образом, чтобы в качестве объекта выступал тип документа, и тогда можно настроить дату запрета только для сверок взаиморасчётов.

Либо другой вариант – попробовать создать новый раздел дат запрета изменения, в котором будет только документ "Сверка взаиморасчётов". Этим вариантом и займёмся.

В режиме "Предприятие", в плане видов характеристик "Раздел дат запрета изменения" создаём новый раздел и называем его "Сверки взаиморасчётов".

Нам понадобится уникальный идентификатор созданного элемента. Получить его можно, например, преобразовав его ссылку.

Далее, в режиме "Конфигуратор".

  • Общий модуль "ДатыЗапретаИзмененияПереопределяемый", процедура "ПриЗаполненииРазделовДатЗапретаИзменения(Разделы)".

Добавляем новый раздел:

Раздел = Разделы.Добавить();
Раздел.Имя  = "СверкиВзаиморасчётов";
Раздел.Идентификатор = Новый УникальныйИдентификатор("994c1ba2-b8d5-11e3-a975-bcaec55df92e");
Раздел.Представление = НСтр("ru = 'Сверки взаиморасчётов';
			    |en = 'Reconciliation of settlements'");
Раздел.ТипыОбъектов.Добавить(Тип("СправочникСсылка.Организации"));

Уникальный идентификатор указываем тот, что получили в режиме "Предприятие" для созданного раздела.

  • Общий модуль "ДатыЗапретаИзмененияУТ", процедура "ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения".

В этой процедуре мы добавляем документ "Сверка взаиморасчётов" в раздел "Сверки взаиморасчётов":

ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.СверкаВзаиморасчетов",   "Дата", "СверкиВзаиморасчётов", "Организация");
ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.СверкаВзаиморасчетов",   "Дата", "СверкиВзаиморасчётов", "Контрагент");

И нужно в этой же процедуре удалить документ из раздела "Взаимозачеты и списания задолженности", закомментировав соответствующие строки.

//ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.СверкаВзаиморасчетов",   "Дата", "ВзаимозачетыСписанияЗадолженности", "Организация");
//ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.СверкаВзаиморасчетов",   "Дата", "ВзаимозачетыСписанияЗадолженности", "Контрагент");

В результате мы можем настроить дату запрета редактирования по разделу "Сверки взаиморасчётов", в котором присутствует только один тип документов - "Сверка взаиморасчётов".

Есть и другие способы настройки подсистемы запрета изменения данных. Например, в общем модуле "ДатыЗапретаИзмененияУТ" есть процедура "ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения", она позволяет переопределять выполнение проверок запретов по произвольному условию.