Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 19:24

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

Автор Varlant1n, 13 окт 2020, 11:53

0 Пользователей и 1 гость просматривают эту тему.

IL2016

Цитата: MuI_I_Ika от 20 окт 2020, 18:02Видимо надо так: ТипЗнч(МетаданноеОбъект.Реквизиты[МетаданноеРеквизит.Имя])
нет, ошибка из-за того что в коде идет попытка сложить текст "1" с  числом 1.
а здесь нужна простая конкатенация строк.

по-мне , так этой проверки равно как и игру с массивами вовсе не нужны.



Поиск родных

Цитата: Varlant1n от 20 окт 2020, 12:17
не останавливается
я всё обсуждеиие не читал, но проще отлаживаться на  встроенным внутренним кодом конфигурации, а не внешней обработкой

Иначе - поищите , есть много обсужений - как отлаживать внешнеие вобработки

Если обработка внешняя, то надо искать временный файл, создаваемый обработкой после ее запуска,   нужно зайти отладчиком в него перед созданием экземпляра обработки

Просто найдите инструкции в инете, но зачем усложнять себе жизнь на ровном месте?!

Varlant1n

Цитата: IL2016 от 20 окт 2020, 19:33
Цитата: MuI_I_Ika от 20 окт 2020, 18:02Видимо надо так: ТипЗнч(МетаданноеОбъект.Реквизиты[МетаданноеРеквизит.Имя])
нет, ошибка из-за того что в коде идет попытка сложить текст "1" с  числом 1.
а здесь нужна простая конкатенация строк.

по-мне , так этой проверки равно как и игру с массивами вовсе не нужны.

Я тоже подумал об этом, так как в локальных переменных у меня берутся не наименовани реквизитов, а их синонимы. Как я могу в своём коде прописать код конкатенация строк? Спасибо заранее

antoneus

Строка с числом нормально складываются. Дело в том, что ТипЗнч(МетаданноеОбъект.Реквизиты[МетаданноеРеквизит.Имя]) не будет типом "Строка", он будет типом "ОбъектМетаданных".
Проверять надо так:

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

Varlant1n

Цитата: antoneus от 21 окт 2020, 09:17
Строка с числом нормально складываются. Дело в том, что ТипЗнч(МетаданноеОбъект.Реквизиты[МетаданноеРеквизит.Имя]) не будет типом "Строка", он будет типом "ОбъектМетаданных".
Проверять надо так:

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


antoneus

Тогда проверку впихнуть сразу сюда:

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


а в обезличивании убрать и сразу делать присваивание.

Varlant1n

Цитата: antoneus от 21 окт 2020, 09:28
Тогда проверку впихнуть сразу сюда:

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


а в обезличивании убрать и сразу делать присваивание.

То же самое

antoneus

Вот так не работает?

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

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


UPD: отредактировано.

Varlant1n

Цитата: antoneus от 21 окт 2020, 09:45
Вот так не работает?

Проверил, не работает, но и не выдаёт ошибки. То есть просто ничего не происходит при нажатии на кнопку.
Я чуток переделал код и отказался от массива, но всё равно у меня не происходит переименовка.


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


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

КонецЦикла;
КонецПроцедуры





IL2016

Varlant1n,
Вы сразу делаете на реальных объектах?
советую экспериментировать на косвенных данных, например ставить пометку на удаление.
легко обработкой поставить, легко обработкой снять.
данные не пострадают, а то ведь ваша задача изменить наименования!
а еще лучше сделать резервную копию.




Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск