|
v7: Перебор реквизитов справочника в 1с.7.7 | ☑ | ||
---|---|---|---|---|
0
Denshu
06.04.18
✎
12:23
|
Добрый день. Есть некоторый справочник в нем куча реквизитов. Я получаю некоторую информацию из текстового документа, информация следующего вида "НаименованиеРеквизитаСправочника" - "Значение". Затем мне это значение нужно воткнуть в справочник. Что-то типо того ЭлементСправочника[НаименованиеРеквизитаСправочника] = "Значение". Подскажите как такое реализуется на 7.7?
|
|||
1
cincout
06.04.18
✎
12:25
|
УстановитьАтрибут(<?>,);
Синтаксис: УстановитьАтрибут(<ИмяРеквизита>,<Значение>) Назначение: Установить значение реквизита по имени идентификатора. Параметры: <ИмяРеквизита> - строковое выражение, содержащее имя реквизита, как оно задано в конфигураторе. <Значение> - выражение, содержащее устанавливаемое значение реквизита. |
|||
2
SleepyHead
гуру
06.04.18
✎
12:26
|
Спр = СоздатьОбъект("Справочник.ХХХ");
Спр.Новый(); ... Спр.УстановитьАтрибут(ИмяРеквизита, Значение); //в синтакис помощнике еще и не такое есть |
|||
3
Denshu
06.04.18
✎
12:27
|
Здорово, спасибо мужики
|
|||
4
zavsoms
06.04.18
✎
12:29
|
перебрать элементы справочника
Спр = СоздатьОбъект("Справочник.Такойто"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 Цикл Спр.Реквизит1 = значениепеременной; Спр.Записать(); КонецЦикла |
|||
5
Denshu
06.04.18
✎
12:31
|
(4) не, мне реквизиты надо, а не элементы =)
|
|||
6
Zmich
06.04.18
✎
12:34
|
(3). Только тебе нужно соответствие с типами. Не все же реквизиты типа "Строка"
|
|||
7
Denshu
06.04.18
✎
12:39
|
(6) Все реквизиты типа строка, так что не нужно
|
|||
8
ПегийЛунь
06.04.18
✎
12:51
|
СпрСотр = Метаданные.Справочник(“Сотрудники”);
КолвоРеквизитов = СпрСотр.Реквизит(); Для Ном=1 to КолвоРеквизитов Цикл СпрРекв = СпрСотр.Реквизит(Ном); Идентификатор = СпрРекв.Идентификатор(); ПолныйИдентификатор = СпрРекв.ПолныйИдентификатор(); Синоним = СпрРекв.Синоним(); Комментарий = СпрРекв.Комментарий(); Тип = СпрРекв.Тип(); //Тут "строка" Длина = СпрРекв.Длина(); Точность = СпрРекв.Точность(); ... и так далее |
|||
9
aka AMIGO
06.04.18
✎
12:53
|
Есть такая штука: Спр.НайтиПоРеквизиту(...);
|
|||
10
Zmich
06.04.18
✎
12:56
|
(9). Для всех реквизитов не получится, там какая-то галочка должна быть установлена в конфигураторе, насколько я помню.
|
|||
11
zavsoms
06.04.18
✎
12:59
|
(10) галочка = Сортировать по реквизиту
|
|||
12
aka AMIGO
06.04.18
✎
13:06
|
(10) А, точно!
|
|||
13
ПегийЛунь
06.04.18
✎
13:08
|
В рот мне скобки!
Процедура Сформировать() СпрСотр = Метаданные.Справочник("Сотрудники"); КолвоРеквизитов = СпрСотр.Реквизит(); Для Ном=1 to КолвоРеквизитов Цикл СпрРекв = СпрСотр.Реквизит(Ном); Тип = СпрРекв.Тип;//Тут "строка" Если Тип="Строка" Тогда Идентификатор = СпрРекв.Идентификатор; Если Идентификатор="МестоРождения" Тогда Сообщить("Ага!"); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
14
MWWRuza
гуру
06.04.18
✎
13:12
|
Чего-то каких-то сложностей нагородили...
Создаем объект нужного справочника: Спр = СоздатьОбъект("Справочник.НужныйСправочник"); А дальше, в зависимости от задачи, позиционируемся на нужном элементе справочника: Если бежим по строкам текста, и создаем новые элементы справочника: Для Сч = 1 По Текст.КоличествоСтрок() Цикл Тут, в зависимости от задачи, либо ищем его из имеющихся элементов справочника одним из методов: Спр.НайтиЭлемент(), НайтиПоКоду(), НайтиПоНаименованию(), НайтиПоРеквизту()) Иесли нашли = 1 Тогда Просто присваиваем нужному реквизиту нужное значение спомощью "=". Так: Спр.НужныйРеквизит = НужноеЗначение; Спр.Записать(); Либо, создаем новый: Спр.Новый(); И дальше, просто присваиваем через равно значения реквизитам, на элементе мы при создании нового уже спозиционированы: Спр.НужныйРеквизит = НужноеЗначение; Спр.Записать(); Если надо бежать по справочнику, то все то-же самое, только перебираем его элементы: Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() = 1 Цикл Присвоение значений реквизитам все так-же, через "=". |
|||
15
Zmich
06.04.18
✎
13:16
|
(14). Спр.НужныйРеквизит - как сработает, если конкретно известно только название этого реквизита, заданное в некой строке? Так что (1) и (2) правы и автору этого оказалось достаточно, т.к. все реквизиты у него типа "Строка".
|
|||
16
Aleksey
06.04.18
✎
13:16
|
Выборка не собъется после записи в цикле?
|
|||
17
MWWRuza
гуру
06.04.18
✎
13:35
|
(16)Не собъется. Если элементов много, то можно делать в транзакции:
НачатьТранзакцию(); Сч = 0; В цикле: Сч = Сч + 1; Если Сч%500 = 0 Тогда // Где 500 шаг, через который фиксируется транзакция. можно поиграть с этим параметром, для получения лучшей производительности. ЗафиксироватьТранзакцию(); НачатьТранзакцию(); Послецикла: ЗафиксироватьТранзакцию(); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |