Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Перебор реквизитов справочника в 1с.7.7

v7: Перебор реквизитов справочника в 1с.7.7
Я
   Denshu
 
06.04.18 - 12:23
Добрый день. Есть некоторый справочник в нем куча реквизитов. Я получаю некоторую информацию из текстового документа, информация следующего вида "НаименованиеРеквизитаСправочника" - "Значение". Затем мне это значение нужно воткнуть в справочник. Что-то типо того ЭлементСправочника[НаименованиеРеквизитаСправочника] = "Значение". Подскажите как такое реализуется на 7.7?
 
 
   cincout
 
1 - 06.04.18 - 12:25
УстановитьАтрибут(<?>,);
Синтаксис:
УстановитьАтрибут(<ИмяРеквизита>,<Значение>)
Назначение:
Установить значение реквизита по имени идентификатора.
Параметры:
<ИмяРеквизита> - строковое выражение, содержащее имя реквизита, как оно задано в конфигураторе.
<Значение> - выражение, содержащее устанавливаемое значение реквизита.
   SleepyHead
 
2 - 06.04.18 - 12:26
Спр = СоздатьОбъект("Справочник.ХХХ");
Спр.Новый();

...

Спр.УстановитьАтрибут(ИмяРеквизита, Значение);

//в синтакис помощнике еще и не такое есть
   Denshu
 
3 - 06.04.18 - 12:27
Здорово, спасибо мужики
   zavsoms
 
4 - 06.04.18 - 12:29
перебрать элементы справочника

Спр = СоздатьОбъект("Справочник.Такойто");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл

     Спр.Реквизит1 = значениепеременной;
     Спр.Записать();
КонецЦикла
   Denshu
 
5 - 06.04.18 - 12:31
(4) не, мне реквизиты надо, а не элементы =)
   Zmich
 
6 - 06.04.18 - 12:34
(3). Только тебе нужно соответствие с типами. Не все же реквизиты типа "Строка"
   Denshu
 
7 - 06.04.18 - 12:39
(6) Все реквизиты типа строка, так что не нужно
   ПегийЛунь
 
8 - 06.04.18 - 12:51
СпрСотр = Метаданные.Справочник(“Сотрудники”);
КолвоРеквизитов = СпрСотр.Реквизит();
Для Ном=1 to КолвоРеквизитов Цикл
СпрРекв = СпрСотр.Реквизит(Ном);
Идентификатор = СпрРекв.Идентификатор();
ПолныйИдентификатор = СпрРекв.ПолныйИдентификатор();
Синоним = СпрРекв.Синоним();
Комментарий = СпрРекв.Комментарий();
Тип = СпрРекв.Тип();//Тут "строка"

Длина = СпрРекв.Длина();
Точность = СпрРекв.Точность();
... и так далее
   aka AMIGO
 
9 - 06.04.18 - 12:53
Есть такая штука: Спр.НайтиПоРеквизиту(...);
   Zmich
 
10 - 06.04.18 - 12:56
(9). Для всех реквизитов не получится, там какая-то галочка должна быть установлена в конфигураторе, насколько я помню.
 
 Рекламное место пустует
   zavsoms
 
11 - 06.04.18 - 12:59
(10) галочка = Сортировать по реквизиту
   aka AMIGO
 
12 - 06.04.18 - 13:06
(10) А, точно!
   ПегийЛунь
 
13 - 06.04.18 - 13:08
В рот мне скобки!
Процедура Сформировать()
СпрСотр = Метаданные.Справочник("Сотрудники");
КолвоРеквизитов = СпрСотр.Реквизит();
Для Ном=1 to КолвоРеквизитов Цикл
    СпрРекв = СпрСотр.Реквизит(Ном);
    Тип = СпрРекв.Тип//Тут "строка"

    Если Тип="Строка" Тогда
        Идентификатор = СпрРекв.Идентификатор;
        Если Идентификатор="МестоРождения" Тогда
            Сообщить("Ага!");
        КонецЕсли;
    КонецЕсли;
    
КонецЦикла;
КонецПроцедуры
   MWWRuza
 
14 - 06.04.18 - 13:12
Чего-то каких-то сложностей нагородили...

Создаем объект нужного справочника:
Спр = СоздатьОбъект("Справочник.НужныйСправочник");

А дальше, в зависимости от задачи, позиционируемся на нужном элементе справочника:
Если бежим по строкам текста, и создаем новые элементы справочника:
Для Сч = 1 По Текст.КоличествоСтрок() Цикл
Тут, в зависимости от задачи, либо ищем его из имеющихся элементов справочника одним из методов:
Спр.НайтиЭлемент(), НайтиПоКоду(), НайтиПоНаименованию(), НайтиПоРеквизту())
Иесли нашли = 1 Тогда
Просто присваиваем нужному реквизиту нужное значение спомощью "=". Так:
Спр.НужныйРеквизит = НужноеЗначение;
Спр.Записать();
Либо, создаем новый:
Спр.Новый();
И дальше, просто присваиваем через равно значения реквизитам, на элементе мы при создании нового уже спозиционированы:
Спр.НужныйРеквизит = НужноеЗначение;
Спр.Записать();
Если надо бежать по справочнику, то все то-же самое, только перебираем его элементы:
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Присвоение значений реквизитам все так-же, через "=".
   Zmich
 
15 - 06.04.18 - 13:16
(14). Спр.НужныйРеквизит - как сработает, если конкретно известно только название этого реквизита, заданное в некой строке? Так что (1) и (2) правы и автору этого оказалось достаточно, т.к. все реквизиты у него типа "Строка".
   Aleksey
 
16 - 06.04.18 - 13:16
Выборка не собъется после записи в цикле?
   MWWRuza
 
17 - 06.04.18 - 13:35
(16)Не собъется. Если элементов много, то можно делать в транзакции:
НачатьТранзакцию();
Сч = 0;

В цикле:
Сч = Сч + 1;
Если Сч%500 = 0 Тогда  // Где 500 шаг, через который фиксируется транзакция. можно поиграть с этим параметром, для получения лучшей производительности.

ЗафиксироватьТранзакцию();
НачатьТранзакцию();
Послецикла:
ЗафиксироватьТранзакцию();

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует