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

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

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

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

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

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

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

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

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

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

См. также

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

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

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

а по теме - помимо "свойств" есть ещё и "категории" - с их помощью легко организуются реквизиты объектов типа "булево".
плюс - в конфигурациях имеется обработка "ЗначенияСвойствОбъекта", которая имеет два удобных экспортных метода:
"ПрочитатьЗаполнитьСвойстваИЗначения" и "ЗаписатьЗначенияСвойств". При вызове обработки заполняете её реквизиты, вызываете эти методы - и будет вам счастье
3. Александр Андрющенко (anderson) 182 09.09.11 15:55 Сейчас в теме
(2) Это понятно, просто название статьи претендует на универсальность, а, к сожалению, в каждом конкретном случае приходиться извращаться по-своему
4. Doomino (Doomino) 52 09.09.11 16:09 Сейчас в теме
Собственно, пользователю полагается работать с документами и справочниками - и именно к этим объектам применимо понятие "реквизит". К регистрам напрямую я бы никакого пользователя не подпустила, на всякий случай:)
По-своему, это, конечно. Универсальных способов быть не может. Даже при решении описанной задачи не все удалось сделать так "изящно" - например, названия самих начислений пришлось переводить "на лету". Зато конфигурация осталась под замком.
5. Сергей (ildarovich) 4844 09.09.11 18:43 Сейчас в теме
Если известна ссылка на объект (ОбъектСсылка) и имя свойства (ИмяСвойства), то значение свойства можно получить одной строкой кода:
ЗначениеСвойства = РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Новый Структура("Объект, Свойство", ОбъектСсылка, ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(ИмяСвойства))).Значение;
Nuobu; biz-intel; brunen9; ivkor; zmaxp; +5 Ответить 1
6. Михаил Ражиков (tango) 466 09.09.11 20:51 Сейчас в теме
извинения, блин, приняты
7. Сергей Ожерельев (Поручик) 3492 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:)) 955 11.09.11 09:40 Сейчас в теме
А для чего в запросе строчка:
И ЗначенияСвойствОбъектов.Свойство.НазначениеСвойства = &НазначениеСвойства

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

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



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

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

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

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

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

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


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

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

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


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

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

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

А вставить приведенный в публикации запрос в готовый запрос отчета не представляет большого труда.
21. Оля Белозерова (XelOla) 14 16.05.12 08:32 Сейчас в теме
Жалко, что в документы не так легко добавляются реквизиты. И доп.свойства или категории справочника нельзя отобразить в документе без изменения.
22. Doomino (Doomino) 52 16.05.12 11:01 Сейчас в теме
Конечно, такой механизм всех проблем не решает, но частенько спасает. А что касается документов, то там, как правило, требуется справочник "Номенклатура", в нем есть характеристики, которые можно вывести в документы без изменений.
23. Эдуард Неженцев (ErrorEd88) 46 16.07.12 14:29 Сейчас в теме
А как после этого получать бабосы за обновления нетиповых?)
24. Doomino (Doomino) 52 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) 52 24.07.12 22:29 Сейчас в теме
(26) frc, Спасибо за совет, куда уж мы без столь ценных советов!
Программное добавление реквизитов на форму, конечно, прямо согласуется с условием "не изменяя конфигурацию"...
Но оставим иронию. В моей профессиональное практике свойства и категории занимают почетное место, пользуюсь этим методом достаточно часто. Всех проблем такой подход, конечно, не решает, но область применения очень широка. И вот ни разу я не столкнулась с ограничением в 50 символов. Ни разу!
28. Сергей Алферов (SunShinne) 592 03.08.16 12:46 Сейчас в теме
Соблазнился на заголовок, а тут всё банально... для начинающих пользователей )