До недавних пор я считал, что добавление "своих" ресурсов в типовой регистр сведений (при совпадении измерений и при логической совместимости добавляемого ресурса и регистра сведений) является правилом хорошего тона. По крайней мере, так меня учили в Учебном Центре 3 при фирме 1С.
Но недавно жизнь заставила внести коррективы в эту точку зрения.
Всё началось после обновления 1С Зарплаты и управления персоналом, кажется, версии 2.5.16 на версию 2.5.19.
Неприятным сюрпризом стало то, что пользователи на следующий день не смогли отправить платёжные ведомости в банк : в учётной политике по персоналу организации стёрся шаблон выгрузки в банк, который был добавленным мной ресурсом этого регистра сведений.
Нет, сами шаблоны не пропали - была только очищена ссылка на шаблон. Равно как и было очищено число выплаты аванса (которое также было мной добавлено в регистр сведений Учётная политика по персоналу организации в качестве ресурса).
Я засомневался. Полез в код, и в обработке обновления информационной базы обнаружил там следующее, что повергло меня в лёгкий шок :
// Процедура заполняет порядок списания фактических отпусков в учетной политике по персоналу
//
Процедура ЗаполнитьПорядокСписанияФактическихОтпусков() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| УчетнаяПолитикаПоПерсоналуОрганизаций.Организация КАК Организация,
| УчетнаяПолитикаПоПерсоналуОрганизаций.ПроверкаШтатногоРасписания,
| УчетнаяПолитикаПоПерсоналуОрганизаций.ЕдиныйНумераторКадровыхДокументов,
| УчетнаяПолитикаПоПерсоналуОрганизаций.ПоказыватьТабельныеНомераВДокументах,
| УчетнаяПолитикаПоПерсоналуОрганизаций.ПроставлятьАвтоматическиДатуОзнакомленияВКадровыхПриказах
|ПОМЕСТИТЬ ВТ_Организации
|ИЗ
| РегистрСведений.УчетнаяПолитикаПоПерсоналуОрганизаций КАК УчетнаяПолитикаПоПерсоналуОрганизаций
|ГДЕ
| УчетнаяПолитикаПоПерсоналуОрганизаций.ПорядокСписанияФактическихОтпусков = ЗНАЧЕНИЕ(Перечисление.ПорядокСписанияФактическихОтпусков.ПустаяСсылка)
|
|ИНДЕКСИРОВАТЬ ПО
| Организация
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВЫБОР
| КОГДА Док.Организация.ГоловнаяОрганизация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)
| ТОГДА Док.Организация
| ИНАЧЕ Док.Организация.ГоловнаяОрганизация
| КОНЕЦ КАК Организация
|ПОМЕСТИТЬ ВТ_Документы
|ИЗ
| Документ.НачислениеОтпускаРаботникамОрганизаций КАК Док
|ГДЕ
| Док.Проведен
| И Док.Организация В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВТОрганизации.Организация
| ИЗ
| ВТ_Организации КАК ВТОрганизации)
|
|ИНДЕКСИРОВАТЬ ПО
| Организация
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_Организации.Организация,
| ВЫБОР
| КОГДА ВТ_Документы.Организация ЕСТЬ NULL
| ТОГДА ЗНАЧЕНИЕ(Перечисление.ПорядокСписанияФактическихОтпусков.КадровымиПриказами)
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ПорядокСписанияФактическихОтпусков.РасчетнымиДокументами)
| КОНЕЦ КАК ПорядокСписанияФактическихОтпусков,
| ВТ_Организации.ПроверкаШтатногоРасписания,
| ВТ_Организации.ЕдиныйНумераторКадровыхДокументов,
| ВТ_Организации.ПоказыватьТабельныеНомераВДокументах,
| ВТ_Организации.ПроставлятьАвтоматическиДатуОзнакомленияВКадровыхПриказах
|ИЗ
| ВТ_Организации КАК ВТ_Организации
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Документы КАК ВТ_Документы
| ПО ВТ_Организации.Организация = ВТ_Документы.Организация";
НаборЗаписей = РегистрыСведений.УчетнаяПолитикаПоПерсоналуОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.ОбменДанными.Загрузка = Истина;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписей.Отбор.Организация.Установить(Выборка.Организация);
ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Выборка);
НаборЗаписей.Записать();
НаборЗаписей.Очистить();
КонецЦикла;
КонецПроцедуры
Несколько необычно для процедуры ЗаполнитьПорядокСписанияФактическихОтпусков() наличие у неё побочного эффекта : очистка всех ресурсов регистра сведений, которые явно не поименованы в запросе.
Но мои сомнения окончательно развеялись, когда я понял, что при изменении учётной политики по персоналу (Обработка.НастройкаПараметровУчета.Модуль объекта) снова происходит очистка всех ресурсов регистра сведений, добавленных сторонним разработчиком :
НаборЗаписей = РегистрыСведений.УчетнаяПолитикаПоПерсоналуОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Организация.Установить(Организация);
НоваяЗапись = НаборЗаписей.Добавить();
ЗаполнитьЗначенияСвойств(НоваяЗапись, ФормаОбработки.мУчетнаяПолитикаПоПерсоналуОрганизаций);
НоваяЗапись.Организация = Организация;
В форме обработки явно создавалась структура мУчетнаяПолитикаПоПерсоналуОрганизаций, куда добавлялись только типовые ресурсы из регистра сведений.
Я не стал более сомневаться и создал свой регистр сведений, куда и поместил "свои" многострадальные ресурсы.