gifts2017

Советы разработчику : стоит ли добавлять свои ресурсы в типовые регистры сведений?

Опубликовал megatrend - (megatrend) в раздел Программирование - Теория программирования

Статья посвящена тому, как в последних релизах типовых конфигураций фирмы 1С старательно очищаются ресурсы регистров сведений, добавленные сторонним разработчиком.

До недавних пор я считал, что добавление "своих" ресурсов в типовой регистр сведений (при совпадении измерений и при логической совместимости добавляемого ресурса и регистра сведений) является правилом хорошего тона. По крайней мере, так меня учили в Учебном Центре 3 при фирме 1С.

Но недавно жизнь заставила внести коррективы в эту точку зрения.

Всё началось после обновления 1С Зарплаты и управления персоналом, кажется, версии 2.5.16 на версию 2.5.19.

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

Нет, сами шаблоны не пропали - была только очищена ссылка на шаблон. Равно как и было очищено число выплаты аванса (которое также было мной добавлено в регистр сведений Учётная политика по персоналу организации в качестве ресурса).

Я засомневался. Полез в код, и в обработке обновления информационной базы обнаружил там следующее, что повергло меня в лёгкий шок :

 

// Процедура заполняет порядок списания фактических отпусков в учетной политике по персоналу
//
Процедура ЗаполнитьПорядокСписанияФактическихОтпусков() Экспорт

   
Запрос = Новый Запрос;
   
Запрос.Текст =
   
"ВЫБРАТЬ
    |    УчетнаяПолитикаПоПерсоналуОрганизаций.Организация КАК Организация,
    |    УчетнаяПолитикаПоПерсоналуОрганизаций.ПроверкаШтатногоРасписания,
    |    УчетнаяПолитикаПоПерсоналуОрганизаций.ЕдиныйНумераторКадровыхДокументов,
    |    УчетнаяПолитикаПоПерсоналуОрганизаций.ПоказыватьТабельныеНомераВДокументах,
    |    УчетнаяПолитикаПоПерсоналуОрганизаций.ПроставлятьАвтоматическиДатуОзнакомленияВКадровыхПриказах
    |ПОМЕСТИТЬ ВТ_Организации
    |ИЗ
    |    РегистрСведений.УчетнаяПолитикаПоПерсоналуОрганизаций КАК УчетнаяПолитикаПоПерсоналуОрганизаций
    |ГДЕ
    |    УчетнаяПолитикаПоПерсоналуОрганизаций.ПорядокСписанияФактическихОтпусков = ЗНАЧЕНИЕ(Перечисление.ПорядокСписанияФактическихОтпусков.ПустаяСсылка)
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    Организация
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ВЫБОР
    |        КОГДА Док.Организация.ГоловнаяОрганизация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)
    |            ТОГДА Док.Организация
    |        ИНАЧЕ Док.Организация.ГоловнаяОрганизация
    |    КОНЕЦ КАК Организация
    |ПОМЕСТИТЬ ВТ_Документы
    |ИЗ
    |    Документ.НачислениеОтпускаРаботникамОрганизаций КАК Док
    |ГДЕ
    |    Док.Проведен
    |    И Док.Организация В
    |            (ВЫБРАТЬ РАЗЛИЧНЫЕ
    |                ВТОрганизации.Организация
    |            ИЗ
    |                ВТ_Организации КАК ВТОрганизации)
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    Организация
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТ_Организации.Организация,
    |    ВЫБОР
    |        КОГДА ВТ_Документы.Организация ЕСТЬ NULL
    |            ТОГДА ЗНАЧЕНИЕ(Перечисление.ПорядокСписанияФактическихОтпусков.КадровымиПриказами)
    |        ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ПорядокСписанияФактическихОтпусков.РасчетнымиДокументами)
    |    КОНЕЦ КАК ПорядокСписанияФактическихОтпусков,
    |    ВТ_Организации.ПроверкаШтатногоРасписания,
    |    ВТ_Организации.ЕдиныйНумераторКадровыхДокументов,
    |    ВТ_Организации.ПоказыватьТабельныеНомераВДокументах,
    |    ВТ_Организации.ПроставлятьАвтоматическиДатуОзнакомленияВКадровыхПриказах
    |ИЗ
    |    ВТ_Организации КАК ВТ_Организации
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Документы КАК ВТ_Документы
    |        ПО ВТ_Организации.Организация = ВТ_Документы.Организация"
;

   
НаборЗаписей = РегистрыСведений.УчетнаяПолитикаПоПерсоналуОрганизаций.СоздатьНаборЗаписей();
   
НаборЗаписей.ОбменДанными.Загрузка = Истина;

   
Выборка = Запрос.Выполнить().Выбрать();
    Пока
Выборка.Следующий() Цикл
       
НаборЗаписей.Отбор.Организация.Установить(Выборка.Организация);
       
ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Выборка);
       
НаборЗаписей.Записать();
       
НаборЗаписей.Очистить();
    КонецЦикла;

КонецПроцедуры

 

Несколько необычно для процедуры ЗаполнитьПорядокСписанияФактическихОтпусков() наличие у неё побочного эффекта : очистка всех ресурсов регистра сведений, которые явно не поименованы в запросе.

Но мои сомнения окончательно развеялись, когда я понял, что при изменении учётной политики по персоналу (Обработка.НастройкаПараметровУчета.Модуль объекта) снова происходит очистка всех ресурсов регистра сведений, добавленных сторонним разработчиком :

 

НаборЗаписей = РегистрыСведений.УчетнаяПолитикаПоПерсоналуОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Организация.Установить(Организация);
НоваяЗапись = НаборЗаписей.Добавить();
ЗаполнитьЗначенияСвойств(НоваяЗапись, ФормаОбработки.мУчетнаяПолитикаПоПерсоналуОрганизаций);
НоваяЗапись.Организация = Организация;

 

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

Я не стал более сомневаться и создал свой регистр сведений, куда и поместил "свои" многострадальные ресурсы.

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Алексей Константинов (alexk-is) 08.09.10 17:52
(0) Программный код в статье можно раскрасить
2. Алексей (Alav) 08.09.10 20:17
В очередной раз писатели типовых показали что их код далеко не универсальный. И проще прикрутить свое сбоку, чем использовать типовые механизмы
3. Сергей Ожерельев (Поручик) 08.09.10 22:41
4. Ярослав Радкевич (WKBAPKA) 09.09.10 08:52
тю...логично... я бы делал также... и ничего они не очищают, а просто перезаписывают регистр... и откуда им знать, что кто то добавит свои ресурсы... ;)))
5. megatrend - (megatrend) 09.09.10 10:05
(1)
> Программный код в статье можно раскрасить
Спасибо, не знал о такой вещи.
7. Anatolii Karasev (KapasMordorov) 09.09.10 14:07
А счастье было так возможно ,
Так близко!.. Но судьба моя
Уж решена

Тестировать надо свои поделки, а не только пункт "Проверка конфигурации" жмакать.
8. megatrend - (megatrend) 09.09.10 14:20
(7) О каких "своих поделках" речь?
9. Anatolii Karasev (KapasMordorov) 09.09.10 14:31
Типовые конфигурации 1С объективно являются черными ящиками, т.к. ни к одной нет описания логической модели конфигурации.
Доступ к данным осуществляется непосредственно, а не через методы, поэтому изменения данных могуть быть в любом месте. Вывод: нужно тщательно отслеживать.

Логическая совместимость?
Хранить настройки обмена с банком в учетной политике по персоналу? Хм...
А почему не в учетной политике по НДФЛ? Состав измерений одинаковый.
10. megatrend - (megatrend) 09.09.10 19:10
(9) А что отслеживать-то? И как?
11. Anatolii Karasev (KapasMordorov) 09.09.10 23:24
12. Сергей Кучеров (СергейКа) 13.09.10 09:24
(0) Пришел в эту статью с форума поддержки :)
Мне не совсем понятно, на каких курсах учили добавлять собственные реквизиты в типовые объекты... Был на разных, ни разу не встречал...
А вообще, считаю что лучше добавить полностью свой объект, чем изменять типовой. И поддерживать работоспособность потом легче и проблем с пропажей данных не будет.
Делаю так еще с 7.5 и даже не спотыкался о такие "грабли". Мне в голову не приходило что кто-то может делать по другому...
13. leguza (leguza) 20.09.10 21:25
Кстати, на одном из курсов мне сказали, что сами разработчики утверждают, что ЗУП нельзя конфигурировать, а если очень хочется, то надо добавлять свои объекты
14. megatrend - (megatrend) 20.09.10 22:13
(13) И что это был за курс? Кто там был лектор? 8-)
Кстати, на форуме партнёров 1С прозвучал определённый ответ разработчиков ЗУП-а...
15. leguza (leguza) 20.09.10 22:37
"Конфигурирование платформы 8" Белоусов П.С.
16. Артур Король (kod_ura) 29.10.10 18:56
Такая же проблема в УПП, при записи контрагента стираются все "свои" данные из регистра контактная информация :|
megatrend; +1 Ответить
17. Vladimir S (voofka) 05.11.15 11:41
Огромное спасибо. Полезная информация.
megatrend; +1 Ответить