Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
10 мая 2024, 12:16

Нужно знать!!! Стоит ли добавлять свои ресурсы в типовые регистры сведений???

Автор Myti, 15 сен 2010, 09:32

0 Пользователей и 1 гость просматривают эту тему.

Myti



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

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

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

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

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

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

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

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

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

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

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

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


---------------------------
Ссылка на оригинал http://mainboard.net.ru/2010/09/80/

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

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

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

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

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

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

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

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

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

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

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

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

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

Запись опубликована в рубрике Программное обеспечение с метками оптимизация. Добавьте в закладки постоянную ссылку.


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск