Обезличивание данных. Скрытие конфиденциальной информации. Нужна помощь

1. Varlant1n 13.10.20 16:32 Сейчас в теме
Здравствуйте, дорогие друзья форумчане! Я уже писал про это пару тем назад, но тема стала неинтересной никому и поэтому упала вниз, без ответов. Я в данный момент учусь 1С в копании, будучи на практике. И передо мной стоит задача сделать ОбщуюКоманду, которая при нажатии обезличит все данные и в справочниках и в документах и вообще везде. То есть после нажатия все данные должны превратиться во что-то по типу "Наименование1, Наименование2 и тд...." Я прекрасно знаю, что есть уже готовые обработки для данной задачи, но мне же поставили задачу сделать то самому в виде команды, чтобы была кнопка, при нажатии на которую произойдёт выше сказанное. Прошу вас помочь мне с решением данной задачи. Можете хотя бы в виде тегов написать план действий, который нужно сделать, что добиться этого. Заранее огромное спасибо. Буду очень благодарен!

Пока что я создал общую команду, в которой решил обойти метаданные.
Найденные решения
62. Varlant1n 23.10.20 12:00 Сейчас в теме
Если вдруг кому-то будет нужно, то вот решение данной задачи. Я внес пару изменений и вот, что получилось в итоге. И это работает. Я отказался от массива и решил менять наименования сразу же.

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

Показать
Terabaytus; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
34. spec8s 838 13.10.20 17:09 Сейчас в теме
Например так:

Процедура УбитьВсе()
	
	Для Каждого мСпр Из Метаданные.Справочники Цикл
		Выборка = Справочники[мСпр.Имя].Выбрать();
		Пока Выборка.Следующий() Цикл
			
			мОбъект = Выборка.ПолучитьОбъект();

			МассивСтандартныхРеквизитов = Новый Массив;
			Если мСпр.ДлинаКода > 0 Тогда
				МассивСтандартныхРеквизитов.Добавить(Новый Структура("Имя", "Код"));
			КонецЕсли;
			Если мСпр.ДлинаНаименования > 0 Тогда
				МассивСтандартныхРеквизитов.Добавить(Новый Структура("Имя", "Наименование"));
			КонецЕсли;
			ОчиститьДанные(мОбъект, МассивСтандартныхРеквизитов);

			ОчиститьДанные(мОбъект, мСпр.Реквизиты);
			
			Для Каждого мТабЧасть Из мСпр.ТабличныеЧасти Цикл
				Для Каждого СтрокаТЧ Из мОбъект[мТабЧасть.Имя] Цикл
					ОчиститьДанные(мОбъект, мТабЧасть.Реквизиты);
				КонецЦикла;
			КонецЦикла;
			
			мОбъект.ОбменДанными.Загрузка = Истина;
			мОбъект.Записать();
			
		КонецЦикла;
	КонецЦикла;
	
КонецПроцедуры

Процедура ОчиститьДанные(мОбъект, НаборРеквизитов)
	
	Для Каждого мРеквизит Из НаборРеквизитов Цикл
		
		Если ТипЗнч(мОбъект[мРеквизит.Имя]) = Тип("Строка") Тогда
			
			мОбъект[мРеквизит.Имя] = "авбгд";
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры
Показать
35. Varlant1n 13.10.20 17:33 Сейчас в теме
(34)
Процедура ОчиститьДанные(мОбъект, НаборРеквизитов)

Для Каждого мРеквизит Из НаборРеквизитов Цикл

Если ТипЗнч(мОбъект[мРеквизит.Имя]) = Тип("Строка") Тогда

мОбъект[мРеквизит.Имя] = "авбгд";

КонецЕсли;

КонецЦикла;

КонецПроцедуры
Показать


Что из этого у меня должно обрабатываться на сервере, а что на клиенте?
36. FatPanzer 13.10.20 17:34 Сейчас в теме
37. TODD22 19 13.10.20 17:39 Сейчас в теме
(35)на клиенте у вас данных нет. Они все на сервере.
38. spec8s 838 13.10.20 17:49 Сейчас в теме
Ну если в 1С такому не учат, то я не знаю, простите...
46. Varlant1n 20.10.20 09:23 Сейчас в теме
(34)
Друг, ещё раз привет! Я попробовал код, написанный тобою. Изменил только пару названий для удобства, но всё равно у меня не работает. И не выдает ошибку, а просто кнопка не работает.

&НаКлиенте
Процедура КнопкаСмерти(Команда)
	
	КнопкаСмертиНаСервере();
	
КонецПроцедуры

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

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

Показать
2. oleg-x 27 13.10.20 16:37 Сейчас в теме
Для начала надо определить данные, которые надо обезличить.
Далее искать по метаданным эти реквизиты (в шапке и в табличных частях) и заменять по алгоритму, опять же для каждых данных свой алгоритм.
3. user958326 13.10.20 16:38 Сейчас в теме
(2)
Он не поставил задачу обезличить их на всегда, а только видимость определенного пользователя
5. Varlant1n 13.10.20 16:39 Сейчас в теме
(3)Навсегда. Мне надо создать, так скажем, кнопку смерти, которая просто навсегда переименует все данные
7. user958326 13.10.20 16:42 Сейчас в теме
(5)
А не проще по кнопке смерти затирать данные базы полностью, это будет надежнее
39. dadel 19 13.10.20 17:54 Сейчас в теме
(5)Если это просто задача для тренировки, то да - тренируйтесь.
Но, у вас наверняка делаются бекапы базы этой? В них эта кнопка так же должна удалить\обезличить всю инфу?
23. oleg-x 27 13.10.20 16:54 Сейчас в теме
(3)
(2)
Он не поставил задачу обезличить их на всегда, а только видимость определенного пользователя

Найти в теме автора, сообщение о том что данные надо только скрыть для одного пользователя или вернуть их к исходному состоянию по нажатию другой кнопки.
25. user958326 13.10.20 16:56 Сейчас в теме
(23)
Так у него в вопросе вообще мало информации, чтобы и эти варианты исключать из условия задачи, может проще дождаться его уточнений, а не спамить советы по неполному тз?
4. Varlant1n 13.10.20 16:39 Сейчас в теме
(2)Каким образом определить какие данные? Мне надо, чтобы все данные в базе стали таковыми. Допустим, если это справочник Контрагенты, то все контрагенты там должны стать: Контрагент 1, Контрагент 2.
6. FatPanzer 13.10.20 16:40 Сейчас в теме
8. oleg-x 27 13.10.20 16:42 Сейчас в теме
(3) Чушь не неси. Обезличить данные для одного пользователя конечно можно, но это уже не команда и не обработка, а переписать конфигурацию. Задача именно обезличить базу, такое например надо, если надо отдать базу на тестирование или разработку.
11. user958326 13.10.20 16:45 Сейчас в теме
(8)
И как потом после тестирования вернуть данные назад? Ведь если алгоритм в "твоей чуши" задан в программном модуле, то его можно и отчитать имея доступ к базе полный
17. FatPanzer 13.10.20 16:49 Сейчас в теме
(11) Никак. А зачем? Обезличивается передаваемая копия...
ipoloskov; +1 Ответить
9. oleg-x 27 13.10.20 16:43 Сейчас в теме
(7) Если бы была такая задача, то 1С здесь вообще не нужен. Просто воспользоваться программой по затиранию данных или грохнуть диск.
10. alex_bob 246 13.10.20 16:43 Сейчас в теме
В 90е годы в одной оптовке, торгующей алкоголем видел в серверной охранника с пушкой, который должен был в случае маски-шоу стрелять в винт сервера.
user958326; dadel; oleg-x; +3 Ответить
15. user958326 13.10.20 16:47 Сейчас в теме
(10)
Вопрос как отреагировать должны на стрельбу маски? ))
24. TODD22 19 13.10.20 16:56 Сейчас в теме
(15)Этой бородатой байке уже много лет. Уже раз пять её слышал. Каждый 1сник должен рассказать историю о том как он в "суровые 90-е" ходил обслуживать компании где в серверной сидел специально обученный человек который должен был прострелить жёсткие диски при первом же шухере при первой опасности.
Только организации в этих историях меняются то банк, то строительная компания, то вот уже оптовка алкогольная...

1сный фольклор такой.
ipoloskov; +1 Ответить
27. user958326 13.10.20 16:57 Сейчас в теме
(24)
Там проще не стрелка, а хорошего бегуна нанимать, выдернул и в бега )
28. FatPanzer 13.10.20 16:59 Сейчас в теме
(27) "Летящий мяч быстрее бегущего футболиста" (С) Из кина какого-то...
30. user958326 13.10.20 17:01 Сейчас в теме
(28)
Стрелять по стреляющему в диск быстрее будут, чем по бегущему- таких полномочий точно в ордере нет, а вот при стрельбе- они появятся )
31. FatPanzer 13.10.20 17:03 Сейчас в теме
(30) Зато у бегущего диск целый, не простреленный.
Это просто вопрос цели и средств.
Не всегда те, кому интересен диск - это люди с ордерами.
32. user958326 13.10.20 17:06 Сейчас в теме
(31)
Те кто без ордеров работали по схеме джип-тетрадка-сейф, дисками они не пользовались и их не читали )
12. oleg-x 27 13.10.20 16:46 Сейчас в теме
(4) Если только наименования, то просто. Обойти все справочники и переименовать так
Наименование = ТипСправочника + " " + Сч;

Но как намекнули выше, есть и другие данные. ИНН, контактная информация, комментарии, дополнительные сведения.
13. user958326 13.10.20 16:47 Сейчас в теме
(12)
И как ты их потом возвращать к начальному состоянию будешь? Обратным алгоритмом? А тот от кого пытались скрыть информацию этот алгоритм не способен отчитать будет? )
20. FatPanzer 13.10.20 16:51 Сейчас в теме
(13) Элементарно... Или вообще не надо возвращать (обезличили копию для передачи на тестирование)... Или из секретных бэкапов по ссылкам (ссылки же не изменяются при изменении реквизитов)...
14. oleg-x 27 13.10.20 16:47 Сейчас в теме
(11) А ни как, это делается для того что бы не создавать демо базу.
В любом случае такая операция не возвратима, если в базе не ведется версионирование и это обойти можно.
16. user958326 13.10.20 16:48 Сейчас в теме
(14)
Если ведется версионирование, то какое это "скрытие" данных? )
21. FatPanzer 13.10.20 16:51 Сейчас в теме
(16) Одна строчка для убийства регистра версий.
40. dadel 19 13.10.20 17:56 Сейчас в теме
(16) Ещё лежат бекапы где-то...
41. user958326 13.10.20 19:09 Сейчас в теме
(40)
Видимо и бекапы надо убить кнопкой, раз скрыть надо окончательно и от всех
42. dadel 19 14.10.20 08:18 Сейчас в теме
(41)И диск отформатировать низкоуровневым форматом сразу тогда, что бы не восстановили.
Или Поставить триггер, который по кнопке из 1С включает привод нажатия на курок ружья :о))) Что бы быстро и надежно))) И охранник не нужен...
43. TODD22 19 14.10.20 11:05 Сейчас в теме
(42)
Или Поставить триггер, который по кнопке из 1С включает привод нажатия на курок ружья :о)))

С огнестрельным оружием не всё так просто, там и правила хранения и тд.

Сейчас используются электромагнитные устройства которые по нажатию на кнопку удаляют данные с диска или тонкие клиенты и сервер в другой стране. Когда то давно слышал что некие умельцы делали специальное отверстие в крышке жёсткого диска и приделывали пиропатрон который по нажатию на кнопку выстреливал во внутрь жёсткого диска абразивный металлический порошок, но это то же на уровне байки про охранника в серверной.
44. dadel 19 14.10.20 11:19 Сейчас в теме
(43)Так же в уже отдаленные времена у одних клиентов серверная стояла в газельке у офиса))).
Тут короче баек множество)))
48. DrBlack 24 21.10.20 09:27 Сейчас в теме
(44)
у одних клиентов серверная стояла в газельке у офиса

О-о-о... ithappens подъехал
45. user958326 14.10.20 17:26 Сейчас в теме
(42)
микроволновка надежнее
18. oleg-x 27 13.10.20 16:49 Сейчас в теме
(16) Перестань спамить тему не по делу.
19. user958326 13.10.20 16:50 Сейчас в теме
(18)
Аналогичное пожелание
22. user958326 13.10.20 16:53 Сейчас в теме
(18)
Перед тем как называть другие сообщения спамом, надо сначала более детально с ТЗ вопрошающего ознакомится, чтобы считать только свои советы истиной
26. oleg-x 27 13.10.20 16:57 Сейчас в теме
(25) И опять Вы пишите, лишь бы написать, но не читаете. Читайте сообщение (5)
29. user958326 13.10.20 17:00 Сейчас в теме
(26)
Если навсегда, то зачем алгоритмы? Просто любые содержательные поля и значения заменить на любое значение
33. Varlant1n 13.10.20 17:08 Сейчас в теме
(26)
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

ОбработкаКомандыНаСервере();

КонецПроцедуры

&НаСервере
Процедура ОбработкаКомандыНаСервере(ПараметрКоманды, ПараметрыВыполненияКоманды)

МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить("Справочники");

Для каждого Элем из МассивОбъектов Цикл
Для Каждого ТекОбъект из Метаданные[Элем] Цикл
Наименование = ТипСправочника + " " + Сч;
КонецЦикла;
КонецЦикла;


КонецПроцедуры


Не судите строго, я только учусь. Вот такого плана код мне нужен в Общей Команде?
47. Varlant1n 21.10.20 09:13 Сейчас в теме
Ребят, я доработал код и привел его к такому виду, но у меня идет не переименование названий, а просто рядом приписываются какие-то рандомные цифры. Я так понял, что это из-за того, что у меня берутся в массив не наименования реквизитов, а их синоним, но я не знаю, как это можно изменить.


&НаКлиенте
Процедура КомандаСмерти(Команда)
	
	КомандаСмертиНаСервере();
	
КонецПроцедуры

&НаСервере
Процедура КомандаСмертиНаСервере()
	
	Для каждого МетаданныеСправочника Из Метаданные.Справочники Цикл
			
			МассивСтандартныхРеквизитов = Новый Массив;
			
			Для каждого НаименованияРеквизита Из МетаданныеСправочника.Реквизиты Цикл
				
				МассивСтандартныхРеквизитов.Добавить(Новый Структура("Имя", НаименованияРеквизита.Имя));
				
			КонецЦикла;
					
		
		Выборка = Справочники[МетаданныеСправочника.Имя].Выбрать();
		Пока Выборка.Следующий() Цикл
			
			МетаданноеОбъект = Выборка.ПолучитьОбъект();
			
	
			ОбезличиваниеДанных(МетаданноеОбъект, МассивСтандартныхРеквизитов);
            ОбезличиваниеДанных(МетаданноеОбъект, МетаданныеСправочника.Реквизиты);
	
		КонецЦикла;
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура ОбезличиваниеДанных(МетаданноеОбъект, СтандартныеРеквизиты)
	
	х = 1;
	
	Для Каждого МетаданноеРеквизит Из СтандартныеРеквизиты Цикл
		
		Если ТипЗнч(МетаданноеОбъект[МетаданноеРеквизит.Имя]) = Тип("Строка") Тогда
			
			МетаданноеОбъект[МетаданноеРеквизит.Имя] = МетаданноеРеквизит.Имя + х;
			
			х = х + 1
			
		КонецЕсли;
		
	КонецЦикла;
	
	МетаданноеОбъект.Записать();
	
КонецПроцедуры
Показать
49. FatPanzer 21.10.20 09:28 Сейчас в теме
(47) Ужас.
Тебе надо переименовать просто наименования всех элементов и групп справочников. А не их реквизитов... Тебе не надо бегать по всем реквизитам, зачем?
Для Каждого МД Из Метаданные.Справочники Цикл
	Выборка = Справочники[ МД.Имя].Выбрать();
	Счетчик = 0;
	Пока Выборка.Следующий() Цикл
		СпрОбъект = Выборка.ПолучитьОбъект();
		СпрОбъект.Наименование = "Наименование " + XMLСтрока(Счетчик);
		СпрОбъект.ОбменДанными.Загрузка = Истина;
		СпрОбъект.Записать();
		Счетчик = Счетчик + 1;
	КонецЦикла;
КонецЦикла;
Показать


PS. Прошу прощения у гуру за использование выборки менеджера, но это нагляднее просто.
50. Varlant1n 21.10.20 09:33 Сейчас в теме
(49)
Для Каждого МД Из Метаданные.Справочники Цикл
ИмяТаблицы = МД.Имя;
Выборка = Справочники[ИмяТаблицы].Выбрать();
Счетчик = 0;
Пока Выборка.Следующий() Цикл
СпрОбъект = Выборка.ПолучитьОбъект();
СпрОбъект.Наименование = "Наименование " + XMLСтрока(Счетчик);
СпрОбъект.ОбменДанными.Загрузка = Истина;
СпрОбъект.Записать();
КонецЦикла;
КонецЦикла;


Дорогой друг, я не проверял твой способ, но что-то мне кажется, что у тебя будет переименовка всех элементов справочников в "Наименование". А в моём же случае, мне надо, чтобы, если это, допустим справочник Сотрудники, то было "Сотрудник 1, Сотрудник 2 и тд."...
51. FatPanzer 21.10.20 09:45 Сейчас в теме
(50) Ну так замени
СпрОбъект.Наименование = "Наименование " + XMLСтрока(Счетчик);
на
СпрОбъект.Наименование = МД.Синоним + XMLСтрока(Счетчик);
52. Varlant1n 21.10.20 09:50 Сейчас в теме
(51)
СпрОбъект.Наименование = МД.Синоним + XMLСтрока(Счетчик);


А если мне нужно не синоним, а само наименование. Потому что допустим справочник Валюты. Мне нужно, чтобы было Валюта 1, а не Валюты 1. Можно так?
53. FatPanzer 21.10.20 09:51 Сейчас в теме
(52)
Можно так?
Можно. Я не против. Если не нравится синоним - выбери любой свойство из метаданных, и используй именно его.
54. Varlant1n 21.10.20 10:31 Сейчас в теме
(53)
Это значит, что я должен обращаться к Представлению объекта?
То есть МД.Представление, до этого предварительно определив, что такое МД.Представление?
55. FatPanzer 21.10.20 10:39 Сейчас в теме
(54) Ничего ты никому не должен. Ты волен обращаться к чему угодно.
Открой синтакс-помощник, пройди по "Общие объекты - Работа с объектами метаданных - Объекты метаданных - Объект метаданных: Справочник - Свойства" и решай, что тебе больше подходит. Вполне возможно, что это и ОсновноеПредставление.
60. Varlant1n 21.10.20 11:33 Сейчас в теме
(49)
Привет ещё раз. Я тут подумал ещё раз над всем, что Вы посоветовали сделать. Но тут есть один момент. Допустим, если в базе есть не только Наименование, но есть ещё Наименование 2 или Наименование на английском, тогда Ваша процедура не работает. Я в принципе только поэтому и создавал массив с реквизитами всеми, чтобы потом их обрабатывать. Вот, что в итоге у меня получилось:

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



Да, процедура щас не работает почему-то, думаю щас над этим. Но логически, я всё же думаю, что так будет лучше. Да, я в этот раз отказался от массива, но всё равно обращаюсь ко всем реквизитам, а не конкретно к Наименованию
61. FatPanzer 21.10.20 11:40 Сейчас в теме
(60)
Допустим, если в базе есть не только Наименование, но есть ещё Наименование 2 или Наименование на английском, тогда Ваша процедура не работает.
Как и ваша. Тем более, что я не собирался за вас сделать всю работу. Я лишь показал более правильный скелет алгоритма работы с метаданными и ссылками.
Да, процедура щас не работает почему-то, думаю щас над этим.
Удачи!
Varlant1n; +1 Ответить
56. starjevschik 21.10.20 10:42 Сейчас в теме
А кому в итоге зачтут практику и заплатят зарплату?
57. FatPanzer 21.10.20 10:47 Сейчас в теме
(56) Ну человек хотя бы пытается что-то сделать самостоятельно. Добрался даже до коллекции метаданных.
58. starjevschik 21.10.20 10:48 Сейчас в теме
(57) ну то есть это = "на экзамене он даже взял ручку в руки".
Непонятно.
59. FatPanzer 21.10.20 10:50 Сейчас в теме
(58) Я сегодня добрый зачем-то ))) Но, это ненадолго...
Varlant1n; +1 Ответить
62. Varlant1n 23.10.20 12:00 Сейчас в теме
Если вдруг кому-то будет нужно, то вот решение данной задачи. Я внес пару изменений и вот, что получилось в итоге. И это работает. Я отказался от массива и решил менять наименования сразу же.

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

Показать
Terabaytus; +1 Ответить
63. antz 23.10.20 16:31 Сейчас в теме
(62) А зачем цикл по стандартным реквизитам, если нужно только наименование?
64. Varlant1n 23.10.20 16:46 Сейчас в теме
(63)Через цикл со стандартными реквизитами я меняю наименование, через условие если. Так как наименование как раз и хранится в стандартных реквизитах. А в цикле с обычными реквизитами, я ставлю условие Если = Тип("Строка"), так как в добавленных мною реквизитах наименования нет и там надо проверять по типу.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот