gifts2017

Добавить реквизит, не изменяя конфигурацию

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

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

Заказчик поставил задачу - есть в организации сотрудники - иностранцы. Для них необходимо печатать расчетные листки на английском языке, поскольку русского они вовсе не знают. Вариант просто переводить русские буквы в латиницу (как это делает документ "Заявка на открытие счетов", например) отпал по той причине, что сотрудники у нас по приемуществу корейцы, и их фио так просто в латиницу не переведешь(их так просто даже не прочитаешь :)). К тому же, для названий должностей и подразделений желателен именно осмысленный перевод на английский язык, а не просто транслит.

Самый простой способ решения - добавить в соответствующие справочники ("Физ.лица", "Должности организаций", "Подразделения организаций") реквизит, и строить отчет по нему. Однако, ради такой мелочи делать конфигурацию нетиповой показалось нецелесообразным.

Я реализовавыла задачу для конфигурации "Зарплата и управление персоналом", но этот метод подойдет и в любую другую.

На помощь пришли "Свойства". Вот такой нехитрый запрос возвращает значание свойства для конкретного элемента справочника:

ВЫБРАТЬ
    ЗначенияСвойствОбъектов.Значение
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
    ЗначенияСвойствОбъектов.Свойство.Код = &Код
    И ЗначенияСвойствОбъектов.Объект = &Объект

Остальное - дело техники. Можно строить отчеты, использовать в печатных формах (эти же свойства я использовала потом для печати трудового договора на английском языке).

PS: казалось бы, что может быть проще. Однако, раз за разом сталкиваюсь с тем, что многие программисты забывают о такой возможности, вносят неоправданные изменения в конфигурации, усложняя их дальнейшее обновление. Встречаю такое и у новичков, которые, видимо, еще не изобрели этот велосипед; и у маститых "семерочников", которые, видимо, так привыкли. Так что скромно надеюсь, что кому-то это будет полезно.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Андрющенко (anderson) 09.09.11 15:30
А как быть с объектами, на формы которых не вынесены свойства? Или предлагаете пользователю лезть в регистр и править данные там?
2. SpiderRu (WolfKgn) 09.09.11 15:51
anderson пишет:

А как быть с объектами, на формы которых не вынесены свойства? Или предлагаете пользователю лезть в регистр и править данные там?

ничто не мешает сделать
а)внешнюю печатную форму
б)обработку заполнения таб.части
и в каком-нибудь из этих вариантов реализовать заполнение нужных свойств

а по теме - помимо "свойств" есть ещё и "категории" - с их помощью легко организуются реквизиты объектов типа "булево".
плюс - в конфигурациях имеется обработка "ЗначенияСвойствОбъекта", которая имеет два удобных экспортных метода:
"ПрочитатьЗаполнитьСвойстваИЗначения" и "ЗаписатьЗначенияСвойств". При вызове обработки заполняете её реквизиты, вызываете эти методы - и будет вам счастье
3. Александр Андрющенко (anderson) 09.09.11 15:55
(2) Это понятно, просто название статьи претендует на универсальность, а, к сожалению, в каждом конкретном случае приходиться извращаться по-своему
4. Doomino (Doomino) 09.09.11 16:09
Собственно, пользователю полагается работать с документами и справочниками - и именно к этим объектам применимо понятие "реквизит". К регистрам напрямую я бы никакого пользователя не подпустила, на всякий случай:)
По-своему, это, конечно. Универсальных способов быть не может. Даже при решении описанной задачи не все удалось сделать так "изящно" - например, названия самих начислений пришлось переводить "на лету". Зато конфигурация осталась под замком.
5. Сергей (ildarovich) 09.09.11 18:43
Если известна ссылка на объект (ОбъектСсылка) и имя свойства (ИмяСвойства), то значение свойства можно получить одной строкой кода:
ЗначениеСвойства = РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Новый Структура("Объект, Свойство", ОбъектСсылка, ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(ИмяСвойства))).Значение;
Nuobu; biz-intel; brunen9; ivkor; zmaxp; +5 Ответить 1
6. Михаил Ражиков (tango) 09.09.11 20:51
извинения, блин, приняты
7. Сергей Ожерельев (Поручик) 09.09.11 22:03
Ммдя. Полезная статья, слов нет. А это даже не читали.
Использование свойств объектов при доработке типовых конфигураций
http://infostart.ru/public/57375/

Модернизация механизма свойств категорий для типовых конфигураций (УТ, УПП)
http://infostart.ru/public/15843/

(5) Запросы в 8.Х наше всё.
Nuobu; dkprim; artbear; +3 Ответить
8. Александр (Aragorn) 10.09.11 14:46
да раскручивание свойств и категорий дает интересные мысли
9. Ю М (mtv:)) 11.09.11 09:40
А для чего в запросе строчка:
И ЗначенияСвойствОбъектов.Свойство.НазначениеСвойства = &НазначениеСвойства

Мне думается, что она лишняя.
10. Doomino (Doomino) 12.09.11 00:14
ildarovich пишет:

Если известна ссылка на объект (ОбъектСсылка) и имя свойства (ИмяСвойства), то значение свойства можно получить одной строкой кода:



Можно и так (просто запросы мне лично больше нравятся:). Только не нравится мне "НайтиПоНаименованию" - и поменяться это наименование "внезапно" может, и не уникально оно.
11. Doomino (Doomino) 12.09.11 00:16
mtv:),
Возможно. Осталось от реализации конкретной задачи. Но надо бы проверить уникальность кодов в справочнике свойств...
12. Роман Романов (romansun) 14.09.11 19:27
(10)

добавлю, что у НайтиПоНаименованию есть замечательный второй аргумент <Точное соответствие>, который по-умолчанию установлен в Ложь...

+ если когда-нить в базе будет заюзано РЛС на данной таблице, то все вот эти НайтиПоНаименованию, НайтиПоКоду и пр. в таком духе выдадут ошибку доступа к данным. Нужно будет переписывать на запрос с РАЗРЕШЕННЫЕ

посему
Поручик пишет:
Запросы в 8.Х наше всё.
:)
Doomino; Ish_2; +2 Ответить 1
13. Александр Крынецкий (echo77) 14.09.11 21:43
(9) Согласен - устанавливать отбор по НазначениеСовйства - на хер не надо

(0) В статье, кроме мысли о конкретном использовании свойств объектов ничего полезного
14. Damian (Damian) 14.09.11 22:31
В целом согласен с автором. Не так давно приходилось реализовать альтернативный подбор номенклатуры с пересчетом из штук в метры, а из метров в палеты.
Заюзав свойства, конфигурацию удалось оставить "под замком".
Борода, конечно, с теми конфигурациями, где свойства явно не видны на форме.
То есть придется пользователю помнить, что для установки дополнительного реквизита надо запустить обработку, а это, ох как неявно :)
Например, в "Бухгалтерии для Украины" для справочника "Номенклатура" какое-либо свойство придется устанавливать внешней обработкой (даже не заполнения табличных частей, поскольку у номенклатуры из табличных частей только "Единицы измерения"), что существенно усложняет жизнь пользователя и мою, когда мне скажут:
- У нас два товара. Один попадает в отчет, другой нет. В чем причина?
или, что еще хуже:
- Ваш отчет не работает! Два одинаковых товара неправильно попадают в отчет! Платить не будем!!!
15. Сергей (ildarovich) 15.09.11 02:33
(10) НайтиПоНаименованию или НайтиПоКоду - небольшая разница. Есть еще предопределенные элементы.

(12) А вот по-поводу запросов (в этой задаче) скажу так:
Наши люди на такси в магазин не ездят!


Использовать запрос для получения единственного значения? Сформировать запрос, определить текст, установить параметры, выполнить, выбрать? - Код получится громоздким, малоинформативным и, скорее всего, будет банально медленнее! - Не верите? - Проверьте сами!

Ну а уж если РЛС - тогда делать нечего, придется париться в этом "много букв".
16. Роман Романов (romansun) 15.09.11 22:16
ildarovich пишет:
Использовать запрос для получения единственного значения? Сформировать запрос, определить текст, установить параметры, выполнить, выбрать? - Код получится громоздким, малоинформативным и, скорее всего, будет банально медленнее! - Не верите? - Проверьте сами!
- Не верите? - Проверьте сами!

Ну а уж если РЛС - тогда делать нечего, придется париться в этом "много букв".


Дык, думаете я был рад, когда первый раз наткнулся? :) А еще повалилось куча кода, если не ошибаюсь, при открытии форм списков -там была какая-то раскраска в ПриПолученииДанных, ориентированная на ".Родитель". В целом, везде где идёт прямое или косвеннное обращение к данным прокажённой таблицы (всё, что влечет запрос к sql базе) - всё валится в красноту.

а шо поделаешь...
17. Alexey Pak (Alexey55) 16.09.11 12:35
18. Александр Иванов (dkprim) 17.09.11 08:39
полезность статьи сомнительна, весьма сомнительна.
19. Doomino (Doomino) 20.09.11 16:12
Почему запрос, а не напрямую? Я исходила из таких соображений. Едва ли значение свойства или категории понадобится кому-то само по себе. Зачем?
Вероятно, сей доп.реквизит должен будет попасть в отчет или в печатную форму. Для формирования и того и другого чаще всего используется запрос, в который можно добавить фрагмент, приведенный в статье, - и будет счастье.
brunen9; Анатолий50; +2 Ответить
20. lthmvbot (1cKiller) 14.05.12 09:12
Все правильно! Плюсую.

Использование ПВХ избавляет от необходимости создания кучи реквизитов.

А вставить приведенный в публикации запрос в готовый запрос отчета не представляет большого труда.
21. Оля Белозерова (XelOla) 16.05.12 08:32
Жалко, что в документы не так легко добавляются реквизиты. И доп.свойства или категории справочника нельзя отобразить в документе без изменения.
22. Doomino (Doomino) 16.05.12 11:01
Конечно, такой механизм всех проблем не решает, но частенько спасает. А что касается документов, то там, как правило, требуется справочник "Номенклатура", в нем есть характеристики, которые можно вывести в документы без изменений.
23. Эдуард Неженцев (ErrorEd88) 16.07.12 14:29
А как после этого получать бабосы за обновления нетиповых?)
24. Doomino (Doomino) 16.07.12 14:39
(23) ErrorEd88, Можно (чтобы не обидно) получать неплохие деньги за приведение конфы к типовой и перенос "ненужных реквизитов" в свойства и категории. И кучу дописанного функционала часто можно перенести в подписки на события, например. И получить на выходе типовую / практически типовую конфу. И решать действительно интересные задачи, вместо рутинного обновления форм вручную :)
25. Ak A (frc) 18.07.12 14:07
(4) Doomino,
да какой "Свойство" реквизит! так, набор предопределенных значений, список.
И как обойдете ограничение на строку в 50 символов в вашем свойстве, не правя конфу?
26. Ak A (frc) 18.07.12 14:15
(2) SpiderRu,
а по теме - помимо "свойств" есть ещё и "категории"

а еще есть регистры соответствий :)
(4) Doomino,
автор, покурите лучше, как Фиксин добавляет программно реквизиты в форму.
27. Doomino (Doomino) 24.07.12 22:29
(26) frc, Спасибо за совет, куда уж мы без столь ценных советов!
Программное добавление реквизитов на форму, конечно, прямо согласуется с условием "не изменяя конфигурацию"...
Но оставим иронию. В моей профессиональное практике свойства и категории занимают почетное место, пользуюсь этим методом достаточно часто. Всех проблем такой подход, конечно, не решает, но область применения очень широка. И вот ни разу я не столкнулась с ограничением в 50 символов. Ни разу!
28. Сергей Алферов (SunShinne) 03.08.16 12:46
Соблазнился на заголовок, а тут всё банально... для начинающих пользователей )
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа