Имя: Пароль:
1C
1С v8
Как получить все строковые реквизиты?
,
0 dart909
 
31.07.15
12:34
Добрый день, подскажите пожалуйста. Как можно получить значения всех строковых реквизитов объектов в конфигурации?
1 Волшебник
 
модератор
31.07.15
12:35
циклом
2 asady
 
31.07.15
12:35
(0) крутяк!
3 Timon1405
 
31.07.15
12:40
взять падавана, дать конфу, попросить посчитать. будет быстрее
4 Serg_1960
 
31.07.15
12:47
(3) Ты не понял. Автор хочет узнать все значения строковые (все наименования всех справочников, все комментарии во всех документах и т.д.) Я так его понял.
5 Волшебник
 
модератор
31.07.15
12:49
(4) Похоже на полнотекстовый поиск...
6 Провинциальный 1сник
 
31.07.15
12:53
(4) А в чем проблема, в цикле по метаданным формируем запросы, данные обрабатываем..
7 Fish
 
31.07.15
12:54
Главный вопрос: а зачем это нужно?
8 Serg_1960
 
31.07.15
12:54
Цикл по метаданным; определение типа; формирование текстов запросов в цикле; сами запросы; анализ полученных данных для комплексных типов.... и очень много, много, много, очень много, о-ч-е-н-ь  м-н-о-г-о времени, просто д-о-ф-и-г-и-щ-а много времени. Нет проблем.
9 dart909
 
31.07.15
12:54
(4) Нет стоп сорян ,ошибся. Я хочу узнать значения строковые только во всех справочниках/
10 dart909
 
31.07.15
12:56
(7) Ну есть обработка. В которое вводится некоторое строковое значение, и оно подставляется во все строковые реквизиты во всех справочниках?
11 dart909
 
31.07.15
12:56
(6) А как это сделать? примерно хотя бы
12 Serg_1960
 
31.07.15
12:57
(7) Велосипед изобретаем, альтернативу полнотекстовому поиску, не?
13 Smallrat
 
31.07.15
12:58
(10) о как
интересные задачи у людей
14 Fish
 
31.07.15
13:01
(11) Вложенными циклами.
15 Провинциальный 1сник
 
31.07.15
13:04
(13) Читал как-то описание резидентного вируса (еще времено ДОСа), который при посылке русского текста на принтер после каждой запятой вставлял нецензурный эпитет, переформатируя строку при необходимости. Наверное, что-то подобное требуется и сейчас.
16 Fish
 
31.07.15
13:04
(12) Не, тут похоже что-то более глобальное, судя по (9) и (10). Я так понял он хочет запихнуть некую строку во все строковые реквизиты всех справочников в конфе. Зачем это надо, так и осталось загадкой, с учётом, что наименование, да и код (как правило) - это тоже строковый реквизит :))
17 dart909
 
31.07.15
13:08
(16) Я стажер, у меня самописная простенькая конфа) Просто дали такое задание ,потренироваться
18 Лодырь
 
31.07.15
13:09
(17) Скажи что-нибудь уничижительное в адрес дающих абсолютно ненужные задачки.
19 Serg_1960
 
31.07.15
13:11
(11)
Для Каждого Справочник Из Метаданные.Справочники Цикл
   Для Каждого Реквизит Из Справочник.Реквизиты Цикл
      Если Реквизит.Тип.СодержитТип(...
20 Fish
 
31.07.15
13:14
(19) А если учесть, что у справочников могут быть ТЧ со строковыми реквизитами, то ещё парочку вложенных циклов надо :))
21 dart909
 
31.07.15
13:15
(20) нет обработать нужно только реквизиты) ТЧ не надо)
22 Fish
 
31.07.15
13:16
(21) Ну тогда проще.
23 dart909
 
31.07.15
13:19
(22) как в (19) ? Спасибо сделаю)
24 dart909
 
31.07.15
13:48
(19) СодержитТип(), а что в параметры передавать?
25 Encode
 
31.07.15
13:49
(24) Тип Типа Тип :)
26 dart909
 
31.07.15
13:59
(25) А как изменить значение реквизита на выбранное Просто Реквизит.Имя не доступно для записи
27 D_E_S_131
 
31.07.15
14:00
(24) Ну если записать новое строковое значение нужно не везде куда можно, а только туда, где уже строка записана, то можешь СодержитТип() не использовать, а проверять значение реквизита с помощью ТипЗнч().
28 dart909
 
31.07.15
14:02
(27) Ну у меня тип совпал а как теперь имя значения реквизита поменять/
29 D_E_S_131
 
31.07.15
14:03
(26) Выборка метаданных справочников, выборка элементов справочника, выборка реквизитов, проверка значений реквизитов элемента справочника, если есть строковое значение, то получение объекта справочника и запись нового значения в найденный реквизит.
30 dart909
 
31.07.15
14:09
(29) &НаКлиенте
Процедура Заполнить(Команда)
    ЗаполнитьДанными()
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьДанными()
    ПроверяемыйТип = Тип("Строка");
    Для каждого Справочник Из Метаданные.Справочники Цикл
        Для каждого Реквизит Из Справочник.Реквизиты Цикл
            Если Реквизит.Тип.СодержитТип(ПроверяемыйТип)  тогда
                а=Справочник.ПолучитьОбъект();
                Реквизит.Синоним = Объект.НовоеЗначениеРеквизитов;
            КонецЕсли    
        КонецЦикла    
    КонецЦикла
КонецПроцедуры
31 Fish
 
31.07.15
14:11
(30) Ты бы это, для начала хоть книжки какие почитал бы.
32 dart909
 
31.07.15
14:13
(31) Читаю(
33 Serg_1960
 
31.07.15
16:23
(26) Это метаданные - они не для того чтобы ты их изменял, а для того чтобы ты мог получить имена реквизитов, содержащих нужный тебе тип. Дальше тебе предстоит запомнить эти имена; сформировать динамически текст запроса, используя эти метаданные или выборкой пройтись по справочникам; получить ссылки; прочитать объекты; изменить значения реквизитов, обращаясь к ним по запомненным ранее метаданным; записать объекты...
34 D_E_S_131
 
31.07.15
17:17

стрНовоеЗначение = "ля-ля-ля";

Для каждого мдСпр Из Метаданные.Справочники Цикл

    СпрВыборка = Справочники[мдСпр.Имя].Выбрать();
    
    Для каждого СпрЭлемент Из СпрВыборка Цикл
    
        МассивРеквизитов = Новый Массив;
        
        Для каждого мдРеквизит Из мдСпр.Реквизиты Цикл
        
            ЗначениеРеквизита = СпрЭлемент[мдРеквизит.Имя];
            
            Если ТипЗнч(ЗначениеРеквизита) = Тип("Строка")
                И ЗначениеРеквизита <> стрНовоеЗначение Тогда
            
                МассивРеквизитов.Добавить(мдРеквизит.Имя);
            
            КонецЕсли;
        
        КонецЦикла;
        
        Если МассивРеквизитов.Количество() > 0 Тогда
        
            СпрОбъект = СпрЭлемент.ПолучитьОбъект();
            
            Для каждого ТекРеквизит Из МассивРеквизитов Цикл
            
                СпрОбъект[ТекРеквизит] =стрНовоеЗначение;
            
            КонецЦикла;
            
            СпрОбъект.Записать();
        
        КонецЕсли;
    
    КонецЦикла;

КонецЦикла;
35 Лодырь
 
01.08.15
16:35
Нафига ты для каждого элемента заново определяешь список строковых реквизитов? определи его 1 раз для нового типа. а потом уже иди по ним и меняй если надо.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.