Как исправить ошибку «Для проверки запрета изменения не найдены источники данных» при добавлении документа

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке в современных конфигурациях на базе Библиотеки стандартных подсистем (БСП) программисты часто сталкиваются с ситуацией, когда после добавления нового документа в механизм дат запрета изменения система продолжает выдавать ошибку: «Для проверки запрета изменения не найдены источники данных для таблицы...». Проблема коварна тем, что даже после выполнения всех шагов согласно официальной документации, ошибка может не исчезнуть. В этой статье мы подробно разберем, как правильно интегрировать свой объект в этот механизм и что делать, если стандартные действия не помогают.

Разбор архитектуры механизма проверки

Для начала проанализируем ситуацию: почему 1С вообще ищет «источники данных»? Механизм дат запрета в БСП спроектирован универсально. Вместо того чтобы жестко прописывать проверку в каждом документе, используется подписка на событие. Когда срабатывает событие ПередЗаписью, система обращается к специальному реестру (внутреннему кэшу), чтобы понять: по какой дате проверять этот документ, по какому разделу (например, по Организации или Складу) и включена ли вообще для него проверка.

Если система выдает ошибку о ненайденных источниках, это означает, что в программном коде или в базе данных отсутствует связка между метаданными вашего документа и правилами извлечения даты/раздела. Выясним причину по шагам.

Шаг 1. Регистрация в подписке на событие

Первым делом проверим базовые настройки метаданных. Ваш новый документ должен быть включен в состав типов соответствующей подписки. Рассмотрим подробнее:

  1. Найдем в дереве метаданных подписку на событие ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента (название может незначительно отличаться в разных версиях БСП, например, ПроверитьДатуЗапретаИзмененияПередЗаписью).
  2. Откроем свойство Состав этой подписки.
  3. Убедимся, что напротив нашего документа ДокументОбъект.ИмяМоегоНетиповогоДокумента стоит галочка.

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

Шаг 2. Определение полей в переопределяемом модуле

Теперь перейдем к программной части. Система должна знать, откуда брать дату для проверки. Разберем по шагам работу в общем модуле ДатыЗапретаИзмененияЛокализация (или в некоторых версиях ДатыЗапретаИзмененияПереопределяемый).

Нам необходимо найти процедуру ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения. Именно здесь мы регистрируем наш документ. Рассмотрим пример кода, который необходимо добавить:


Процедура ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения(ИсточникиДанных) Экспорт

	// Добавление нашего документа в список проверяемых
	Описание = ИсточникиДанных.Добавить();
	Описание.Таблица = "Документ.ИмяМоегоНетиповогоДокумента";
	
	// Указываем, какой реквизит отвечает за дату (обычно "Дата")
	Описание.Дата = "Дата"; 
	
	// Если проверка должна идти в разрезе организаций, указываем поле
	Описание.Раздел = "Организация"; 
	
КонецПроцедуры

Проанализируем ситуацию, если реквизиты называются иначе. Например, если дата запрета должна проверяться не по дате документа, а по дате отгрузки, мы пишем: Описание.Дата = "ДатаОтгрузки";. Если поле Раздел не заполнено, система будет применять общую дату запрета для всей информационной базы к этому документу.

Шаг 3. Внедрение в форму объекта

Чтобы пользователь видел предупреждение еще до момента записи (например, блокировка элементов формы), необходимо внести изменения в модуль формы документа. Посмотрим на пример вызова в обработчике ПриЧтенииНаСервере:


&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	
	// Вызов стандартного механизма БСП
	ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
	
КонецПроцедуры

Этот вызов важен не только для интерфейса, но и для корректной инициализации параметров проверки в текущем сеансе. Если этот вызов пропущен, ошибка «источники не найдены» может возникать при попытке интерактивного изменения данных.

Шаг 4. Критическая стадия — обновление кэша и идентификаторов

Чаще всего ошибка сохраняется именно потому, что система «не видит» обновленный код. Механизм БСП очень сильно полагается на справочник Идентификаторы объектов метаданных. Рассмотрим, что нужно сделать, чтобы принудительно обновить систему:

  1. Обновление идентификаторов: запустите конфигурацию с параметром командной строки /С ЗапуститьОбновлениеИнформационнойБазы. Это заставит БСП перечитать структуру метаданных и зарегистрировать ваш новый документ в системных таблицах.
  2. Очистка серверного кэша: иногда требуется перезапуск службы 1С:Предприятия или очистка папки config в профиле пользователя на сервере, так как старый список источников данных может "застрять" в оперативной памяти.
  3. Программное обновление: вы можете запустить внешнюю обработку и выполнить следующий код для обновления настроек:

// Принудительное обновление параметров дат запрета
ДатыЗапретаИзменения.ОбновитьВсеНастройки();
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();

Выясним причину, почему это помогает. БСП при проверке обращается к кэшированным значениям в Параметрах сеанса. Если вы добавили код в модуль, но не обновили параметры сеанса или идентификаторы, функция поиска источников вернет пустое значение, что и приведет к нашей ошибке.

Шаг 5. Проверка прав доступа

Если даже после всех манипуляций ошибка не уходит, проверим права доступа. Для работы механизма дат запрета у пользователя должны быть права на чтение регистра сведений ДатыЗапретаИзменения и на чтение метаданных самого документа. Если механизм пытается проверить дату, но из-за ограничений RLS или отсутствия прав на реквизит «Дата» или «Организация» не может получить значение — он может выдать сообщение о ненайденном источнике.

Убедитесь, что ваш новый документ включен в соответствующие роли доступа (например, «ПолныеПрава» или специализированные роли для работы с документами).

Итоги и рекомендации

Мы рассмотрели полный цикл интеграции документа в подсистему дат запрета. Подытожим последовательность действий:

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

← На главную