|
посоветуйте как заполнить реквизит | ☑ | ||
---|---|---|---|---|
0
dvrk
07.04.22
✎
07:15
|
привет, в справочнике пользователи есть реквизит, ссылающийся на другой справочник, мне нужно заполнить у всех пользователей этот реквизит, наименование этого реквизита = наименование пользователя, как это сделать? написать обработку, которая будет искать по наименованию и наименование = наименование пользователя?
|
|||
1
dvrk
07.04.22
✎
07:43
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Пользователи.Ссылка КАК Ссылка, | Пользователи.Наименование КАК Наименование, | Пользователи.СотрКАК Сотр |ИЗ | Справочник.Пользователи КАК Пользователи |ГДЕ | Пользователи.ПометкаУдаления = ЛОЖЬ"; Результат = Запрос.Выполнить().Выгрузить(); Для Каждого Польз из Результат Цикл Об = Польз.Ссылка.ПолучитьОбъект(); Сотрд = Справочники.Сотр.НайтиПоНаименованию(Об.Наименование); Об.СотрудникИзЗУП = Сотрд; Об.записать(); Сообщить("Записан " + Об); КонецЦикла; КонецПроцедуры |
|||
2
dvrk
07.04.22
✎
07:43
|
тип того?
|
|||
3
XLife
07.04.22
✎
07:49
|
позовите программиста
|
|||
4
dvrk
07.04.22
✎
07:53
|
(3) че не так написал?
|
|||
5
Kigo_Kigo
07.04.22
✎
08:38
|
если это одноразовая акция, то пойдет, но
Если Сотрд = Справочники.Сотр.НайтиПоНаименованию(Об.Наименование) тогда Иначе //Создать и записать |
|||
6
Ёпрст
07.04.22
✎
09:08
|
(5) И зачем это ? условие всегда ложь
|
|||
7
Ёпрст
07.04.22
✎
09:08
|
за исключением случая с повтором наименования
|
|||
8
Ryzeman
07.04.22
✎
09:39
|
(2) Да, всё правильно. 1с штатно не умеет записывать объекты кроме как перебором по одному, так что в цикле. Единственное что за экономию букв в переменных в приличных обществах в бубен бьют) Ну и если вдруг повторно надо будет запустить в запрос я бы добавил "И НЕ Пользователи.СотрудникИзЗУП = ЗНАЧЕНИЕ(Справочник.Сотр.ПустаяСсылка)
Ещё надо проверить уникальны ли у тебя наименования... |
|||
9
dvrk
07.04.22
✎
09:59
|
(8) так не даёт записать дубли
|
|||
10
dvrk
07.04.22
✎
10:02
|
(8) а про переменные - это разовая работа, дальше реквизит уже будет при создании элмента справочника заполняться
|
|||
11
Kigo_Kigo
07.04.22
✎
10:06
|
(6) (7)
Ну Сотрд = Справочники.Сотр.НайтиПоНаименованию(Об.Наименование) Если ЗначениеЗаполнено(Сотрд) тогда |
|||
12
Ёпрст
07.04.22
✎
10:10
|
(11) И ? Это условие всегда Истина
|
|||
13
Ёпрст
07.04.22
✎
10:11
|
еще подумай.
|
|||
14
Ryzeman
07.04.22
✎
10:13
|
(10) судя по реквизитам СотрКАК и справочнику "Сотр" у вас дефицит букв там острый) Попробуйте ctrl+пробел в отделе что ли...
|
|||
15
dvrk
07.04.22
✎
10:14
|
(14) это я его переименовал чтобы в глаза не бросался в топике именно, там нормально всё
|
|||
16
Ryzeman
07.04.22
✎
10:15
|
(15) Тогда ладно, беру свои слова назад)
|
|||
17
Kassern
07.04.22
✎
10:15
|
(12) почему вы решили, что всегда истина?
https://disk.yandex.ru/i/p35GM1ZzJZ4Zdw |
|||
18
Ёпрст
07.04.22
✎
10:17
|
(17) подумай
Возвращаемое значение: Тип: СправочникСсылка.<Имя справочника>, Неопределено. Ссылка на найденный элемент справочника. Если не существует ни одного элемента с требуемым наименованием, то будет возвращена пустая ссылка. Если для справочника наименование не задано (длина = 0) и поиск выполняется по полному соответствию, то будет возвращено Неопределено. |
|||
19
Ёпрст
07.04.22
✎
10:17
|
Неопределено там будет только для справочника с длиной наименования =0.
|
|||
20
Ёпрст
07.04.22
✎
10:18
|
Во всех остальных случаях там будет ссылка (не важно, пустая или найденная), которая всегда будет ЗначениеЗаполнено = истина.
|
|||
21
Kassern
07.04.22
✎
10:19
|
(0) Учитесь пользоваться запросами. Соедините левым соединением ваш справочник пользователей с сотрудниками. Свяжите их наименованиями в соединении. В отборе можете указать ЕстьNull(Сотрудники.Ссылка,"")="", тогда обрежутся строки пользователей, у которых наименование сотрудника совпадает с наименованием пользователя.
|
|||
22
dvrk
07.04.22
✎
10:19
|
(21) а чем мой вариант плох?
|
|||
23
Kassern
07.04.22
✎
10:20
|
(20) я вам только что скрин отправил, в котором пустая ссылка = ложь
|
|||
24
Kassern
07.04.22
✎
10:20
|
(20) вы вообще переходили по ссылке?)
|
|||
25
Ryzeman
07.04.22
✎
10:21
|
(20) Только что проверил - на пустую ссылку выдаёт ложь
|
|||
26
Kassern
07.04.22
✎
10:22
|
(22) не оптимальный. Вы обходите всех пользователей, не проверяя а нужно ли в них что-то менять. А если у вас половина пользователей уже имеет сотрудника? Смысл перезаписывать их. Поэтому проще сразу в запросе все сделать и проверить. А в выборке уже записать только нужные позиции
|
|||
27
Ryzeman
07.04.22
✎
10:22
|
||||
28
Kassern
07.04.22
✎
10:23
|
(25) незадокументированная фича)
Возвращаемое значение: Тип: Булево. Для значений типа Булево всегда возвращается Истина. Для значений типа Строка возвращается Истина, если в строке есть непробельные символы. Для массивов и коллекций возвращается Истина, если в них есть хотя бы 1 элемент. Для Неопределено и Null всегда возвращается Ложь. |
|||
29
dvrk
07.04.22
✎
10:23
|
(26) у меня ни у кого не заполнен реквизит этот
|
|||
30
Ryzeman
07.04.22
✎
10:24
|
(28) К слову, я этим даже как то раз пользовался. Но всё-таки предпочитаю явно проверять на пустую ссылку, если по логике возможно - в запросах
|
|||
31
Kassern
07.04.22
✎
10:24
|
(29) я вам просто указал на практику, как лучше делать. Сегодня вы раз запишите, завтра появится новый сотрудник, что делать будете?
|
|||
32
dvrk
07.04.22
✎
10:25
|
(31)у нового автоматом будет проставляться, но я понял о чем вы, спасибо
|
|||
33
Kigo_Kigo
07.04.22
✎
11:24
|
(12) (13) Да вот хрен там
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |