|
Как элемент данных справочного характера в 1С сделать предопределенным , who respawn, Фокусник, END, Волшебник, vbus, DiMel_77, CepeLLlka, VaganovSP, Bigbro, Spyke, alexxx961503, ivanov-i-i, Metman
| ☑ | ||
---|---|---|---|---|
0
VaganovSP
04.04.25
✎
08:37
|
Новая статья.
В своей статье Сергей Ваганов, эксперт в области разработки прикладных решений на платформе 1С:Предприятие, преподаватель-методист CORS Academy и автор курса «Разработчик 1С с нуля до профессионала» ( https://cors.su/kurs-razrabotchik-1s-s-nulya-do-professionala/ ), разбирает тонкости работы с предопределенными элементами: Знакома ситуация? Вы пишете код, в котором обращаетесь к элементам справочников через НайтиПоКоду() или НайтиПоНаименованию()... А потом пользователь меняет наименование - и всё, ваш код перестаёт работать 😱 😊 В новой статье от преподавателя CORS Academy Сергея Ваганова разбираем элегантное решение этой проблемы: 🔵 Как избавиться от хардкода в своих проектах 🔵 Почему обращение к элементам по имени - самый надёжный способ 🔵 Что такое предопределенные элементы и как их использовать 🔵 Практический пример с пошаговыми инструкциями и скриншотами 🔵 Готовый код для внешней обработки, который поможет вам работать с предопределенными элементами ☺️ Читайте статью в блоге: https://cors.su/eto-interesno/kak-element-dannyh-spravochnogo-haraktera-v-1s-sdelat-predopredelennym/?utm_source=telegram&utm_medium=social&utm_campaign=element&clckid=f3923aa9 Смотрите видео: https://vkvideo.ru/video-210707080_456239198 |
|||
1
Мультук
гуру
04.04.25
✎
08:55
|
Мне особенно вот это место понравилось
У справочника «ВидыЦен» в свойстве «Обновление предопределенных данных» указываем вариант «Не обновлять автоматически», таким образом в конфигурации предопределенный элемент будет существовать, а в информационной базе система связанный с ним элемент данных добавлять не будет. Так как большинство 1С-погроммистов своей головой не думают, а данный совет можно спроецировать на любые справочники, то ... {улыбаемся и машем} ? Я ведь верно думаю ? |
|||
2
Kongo2019
04.04.25
✎
09:08
|
А что еще кто-то не настучал себе по лбу граблями при обращении к элементам справочников через НайтиПоКоду() или НайтиПоНаименованию()?
Я так пару раз хорошо попал, отучился. |
|||
3
Прохожий
04.04.25
✎
09:17
|
Давно же уже изобретен РС.СвойРегистрДляПодстановки (Ключ,Значение).
И не надо нигде копаться.. |
|||
4
Прохожий
04.04.25
✎
09:19
|
При 500-600 значениях вряд ли нужно делать предопределенные. Даже при 50 уже задумчиво. Разве что преимущество что на клиенте можно якобы на сервер не ходить а напрямую к предопределенному обращаться.
|
|||
5
Somebody
04.04.25
✎
09:19
|
(2) аналогично. на поиск по GUID, его,чай, не поменяют.
|
|||
6
VaganovSP
04.04.25
✎
10:04
|
(3) Верно. Это тоже один из правильных вариантов решения данной проблемы.
|
|||
7
Kigo_Kigo
04.04.25
✎
10:15
|
чета нет такой шляпы
"ИмяПредопределенныхДанных" Для команды «СделатьПредопределенным» прописываем код, который получает объект информационной базы для выбранного элемента, изменяет значение в стандартном реквизите «ИмяПредопределенныхДанных» и записывает внесенные изменения. или это на какой версии платформы появилось? |
|||
8
maxab72
04.04.25
✎
10:25
|
(7) 8.3.3
Записать ИмяПредопределенныхДанных объекту. |
|||
9
ЕRPe
04.04.25
✎
12:41
|
(0) Решение адовое, что как бы намекает нам о полезности подхода. Правильное решение через константу, справочник, ПВХ видимо не интересно и слишком просто.
|
|||
10
Rovan
гуру
04.04.25
✎
11:06
|
(0) мы решили эту проблему так:
создаем в расширении СправочникПредопределенныхЗначений с реквизитом Значение |
|||
11
petr_ivanov
naïve
04.04.25
✎
11:16
|
Почему нельзя обращаться по имени - понятно. А по коду-то почему? Он же по своей сути должен быть уникальным и неизменным. Иначе зачем он вообще нужен, если его менять можно (да и какой смысл его менять вообще - ридонли сделать, имхо)
|
|||
12
Irbis
04.04.25
✎
11:18
|
(11) Потому что если только можно что-то сделать не так, то рядовой пользователь обязательно сделает не так. Природа давно обгнала погромистов в производстве тупых пользователей.
|
|||
13
Rovan
гуру
04.04.25
✎
11:20
|
(11) потому что на основе этогог цф создали новую базу и начали там вводить вручную элементы и значит коды там могут быть другие
|
|||
14
shuhard
04.04.25
✎
11:23
|
(11)[Он же по своей сути должен быть уникальным и неизменным]
чё за бред, в типовых у половины справочников нет кода |
|||
15
Мультук
гуру
04.04.25
✎
11:23
|
(11)
1) Должен ? Вы наверное, просто не умеете еще делать одинаковы коды. А вот 1С умеет. Особенно при обновлении. И ничего её (1С) не смущает 2) А что делать со справочниками (привет УТ/ЕРП), где длина кода = 0 Нет кодов. Совсем нет. (12) +1. |
|||
16
Irbis
04.04.25
✎
11:37
|
(14) Код есть, просто его не показывают, не дают с ним работать и не строют на нём бизнес-логику.
но дел можно наворотить и без изменения кода. В анамнезе есть разбор полётов, когда резко попёрли продажи коллекционного вина в одном лабазе. Там просто разовую номенклатуру товаровед "переименовал" в спички или ещё что-то ширпотребное. |
|||
17
shuhard
04.04.25
✎
11:28
|
(16) есть код при нулевой длине - чё куришь ?
|
|||
18
DiMel_77
04.04.25
✎
11:49
|
(1) Вы тут не правы. Признак "Обновление предопределенных данных" = "Не обновлять автоматически" - это должен быть приоритетный вариант установки. И сделано это для того, чтобы в базах УРБД не формировались автоматом новые элементы справочника с другой ссылкой.
+ Довольно часто делаются решения где используется "Мастер база" для ведения НСИ и раздача этих НСИ осуществляется централизовано. |
|||
19
Bigbro
04.04.25
✎
11:37
|
целая статья и видео про предопределенные элементы в конфиге и их привязку к элементам ИБ?
|
|||
20
СвинТуз
04.04.25
✎
11:40
|
(19)
+1 Круто. Но долго. |
|||
21
d4rkmesa
04.04.25
✎
11:42
|
(1) Тогда, странно почему в типовых зачастую предопределенные данные "включаются" только когда нужно.
|
|||
22
PLUT
04.04.25
✎
11:46
|
я по уникальному идентификатору обычно обращаюсь
прям в коде пишу .получитьсцылку(новый уникальныйидентификатор(блаблабла)) //неведомаяйобанаяфигня (обычно код + наименование на сейчас) даже если переименуют биороботы - сцылка неизменная |
|||
23
Мультук
гуру
04.04.25
✎
11:57
|
(18)
"Опять 1С в ЕРП накосячили. Авто поставили." {сарказм} Или что ? В примере ВидыЦен -- типовой справочник. У меня в этом справочнике в не менее типовой ЕРП 2.5 стоит "Авто". В статье (второй раз цитировать не буду) автор предлагает это "исправить"
|
|||
24
DiMel_77
04.04.25
✎
12:00
|
(23) Если установить признак = "Авто" - это конечно решает проблему создания подчиненных узлов https://its.1c.ru/db/metod8dev/content/5367/hdoc , но как это решит проблему тиражного решения с использованием базы "НСИ"? Как это решит проблему отключения функционала функциональной опцией, где добавляемые элементы нужны только при определенных настройках и т.п.?
|
|||
25
Мультук
гуру
04.04.25
✎
12:27
|
(24)
Без понятия. Я не создаю, не создавал и уже наверное не буду создавать тиражные решения. Я просто указываю на то, что неофиты начнут "портить" типовые. Люди, которые создают тиражные решения, надеюсь, используют свой мозг. |
|||
26
lucky_
04.04.25
✎
12:38
|
(0) "Сергей Ваганов, эксперт в области разработки прикладных решений на платформе 1С:Предприятие". дальше сразу представляется что-то пафосно-изящное и неочевидное.
но нет, эксперт в области разработки рассказывает своим "благодарным" читателям то, что гуглится по первой ссылке, и решений по этой ссылке будет больше, чем у эксперта. |
|||
27
maxab72
04.04.25
✎
12:53
|
"Я просто указываю на то, что неофиты начнут "портить" типовые."
Это было, есть и будет всегда. В начале 90-х, когда компьютерных журналов была куча, среди них был неплохой журнальчик по железу "Монитор". В одном из номеров они опубликовали статью "Как перепрошить БИОС самому в домашних условиях". С подробной инструкцией. Статья заканчивалась строчкой мелким шрифтом ("продолжение следует"). Следующий номер (вышел через месяц) открывался письмом главного редактора, где он извинялся перед теми читателями, что не дочитав до конца статью, принялись стирать свои БИОСы. А далее шло окончание статьи, где было рассказано, как установить новую прошивку на чистую микросхему и она начиналась словами: "После очистки НЕ выключать комп!.." |
|||
28
Garykom
гуру
04.04.25
✎
13:00
|
(0) А этот преподаватель может ответить на вопрос:
Как программно кодом перебрать предопределенные (получить все их имена) у справочника? |
|||
29
Garykom
гуру
04.04.25
✎
13:00
|
(28)+ Даже если реально элемента(ов) в справочнике (с соответствующим ИмяПредопределенныхДанных) нет
|
|||
30
maxab72
04.04.25
✎
13:02
|
(28) Это же элементарно! Длина имени метаданных не может превышать 80 символов, для имен метаданных могут использоваться только определенные символы. Составляем все возможные комбинации и через попытку их проверяем!
|
|||
31
Garykom
гуру
04.04.25
✎
13:13
|
(30) а ты хорош!
|
|||
32
PLUT
04.04.25
✎
13:16
|
||||
33
lucky_
04.04.25
✎
13:56
|
(30) если предположить, что определённых символов (учитывая заглавные и строчные буквы 2х алфавитов) приблизительно 150, то:
(150*80-1)! __________ (150-1)! -80! нужен хороший кампухтер. возможно, его скоро изобретут. |
|||
34
DiMel_77
04.04.25
✎
14:01
|
(28) Кстати интересная задача (если имеется ввиду чтение объектов метаданных напрямую, а не метод ПолучитьИменаПредопределенных()).
Для серверных баз задача в (32) решается элементарно, а вот с файловыми ХЗ как. |
|||
35
VaganovSP
04.04.25
✎
14:31
|
(11) У Кода длина может быть равна нулю.Кривые ручки пользователя могут залезть в код. При обмене коды могут быть разные. При обновлении могут появиться записи с одинаковыми кодами. Это только основные проблемы.
|
|||
36
VaganovSP
04.04.25
✎
14:37
|
(22) Это тоже хардкод чистой воды, который работает только в одной базе. А если у вас есть база для тестирования, отладки, поиска ошибок, которую можно создать разыми способами и в некоторых случаях GUID будет в них уже другой.
|
|||
37
VaganovSP
04.04.25
✎
14:40
|
(23) Я не предлагаю так делать в типовых конфигурациях, я только демонстрирую возможности платформы, а там каждый сам для себя решает, где и какие механизмы использовать. Ведь у вас может быть нетиповой справочник, над которым вы можете хозяйничать как вашей душе угодно. ;)
|
|||
38
VaganovSP
04.04.25
✎
14:45
|
(28) К чему такой список?
|
|||
39
lucky_
04.04.25
✎
14:46
|
(29) ПолучитьИменаПредопределенных() вернёт имена.
только что проверил. (создал предопределнный, потом грохнул его через удалить()) при том что скуль их (элементы) не видит. |
|||
40
PLUT
04.04.25
✎
14:51
|
(36) чойта вдруг хардкод?
если база для тестирования на основе продуктивной - то объекты (документы/справочники и прочая муть) сериализацией переносятся один в один между базами (с сохранением ГУИДов) Естественно, если сцылка есть, а объекта нет - в режыме предприятия будет <блаблабла> Объект не найден. но тоже можно дотащить сериализацией в тестовую. она же тестовая |
|||
41
VaganovSP
04.04.25
✎
15:03
|
(28) Получить имена можно.
|
|||
42
PLUT
04.04.25
✎
15:05
|
(41) вот не лень было целую обормотку писать с одной кнопкой :)
"консоль кода" жы есть для таких случаев и не одна |
|||
43
VaganovSP
04.04.25
✎
15:07
|
(40) Поэтому я вам и пояснил, базы могут быть для тестирования созданы по-разному, в одном случае GUID будет совпадать, а в другом нет. А то, что вы не столкнулись еще с такой бедой при обращении к GUID, это вопрос времени. Предупрежден — вооружен.
|
|||
44
VaganovSP
04.04.25
✎
15:08
|
(42) Все для вас, 2 минуты лишнего времени не жалко ;)
|
|||
45
VaganovSP
04.04.25
✎
15:09
|
(41) Метаданные.Справочники.ВидыЦен.ПолучитьИменаПредопределенных();
|
|||
46
PLUT
04.04.25
✎
15:14
|
(43) ну вы же про предопределенные пишете
вместо поиска по коду/наименованию - использую ГУИД ну так вот, "предопределенные" они должны быть везде одинаковыми. в продуктивной, в тестовых (в рамках одной пофигурации, даже если есть РИБ) так вот как можно столкнуться с такой бедой, я ума не приложу :) Предупрежден — вооружен. спасибо за заботу канешн. а вы |
|||
47
VaganovSP
04.04.25
✎
16:35
|
(46) Описываю самый простой случай. Имеется копия информационной базы, в ней создаем предопределенный элемент. Делаем выгрузку конфигурации в cf. Загружаем cf в боевую конфигурацию (в ту, из которой делали копию). Теперь в информационных базах у предопределенных элементов GUID разный.
P/S Стаж на форму не смотрю, я ко всем одинаково с уважением отношусь, независимо от стажа. И к вам в том числе с уважением отношусь. И не важно, какой у меня стаж на этом форуме. В этой статье я не разбираю взаимоотношения, в этой статье хочу рассказать о нюансах работы с предопределенными данными.
|
|||
48
PLUT
04.04.25
✎
16:46
|
(47) и часто вы так из копий в продуктив cf загружаете?
или просто для примера, когда ГУИДы могут стать разными? я последний раз никогда так делал из вашего примера |
|||
49
VaganovSP
04.04.25
✎
17:35
|
(48) Вы же написали: «Так вот как можно столкнуться с такой бедой, я ума не приложу» (47).
Я вам привел один из случаев, чтобы вы убедились, что такое возможно. Конечно, так делать не надо. Спросили, я вам доказал, что такое возможно. Зачем вы пытаетесь меня задеть строчками: «и часто вы так из копий в продуктив cf загружаете?» Вы же сами спросили пример, я его привел, и это не значит, что я так делаю. |
|||
50
PLUT
04.04.25
✎
18:01
|
(49) вы конечно большой молодец
Я просто от такого примера немного в ах.е с загрузкой из cf Поэтому и спросил - вы |
|||
51
Garykom
гуру
04.04.25
✎
18:06
|
(47) Это прекрасно что УИД разный (писать "GUID" в понятиях 1С не совсем верно)
Это так и задумано и вполне логично работает И разный УИД не у предопределенных, а у элементов справочника (или иных метаданных), которые установлены в качестве предопределенных Сам УИД предопределенных (и других метаданных в конфе) тоже может быть разный и доставлять проблемы при работе с несколькими хранами и ручном переносе между ними В случае обмена РИБ, миграция предопределенных при обновлениях конф доставляет много лулзов. Например приколы с разными элементами у которых одинаковое ИмяПредопределенныхДанных Или после обмена предопределенным (в ПБ) становится другой элемент, а при новом обновлении конфы (через ЦБ) снова другой |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |