Полная копия элемента справочника не своими руками

27.04.16

Разработка - Универсальные функции

Копируем элемент справочника, элементы подчиненных справочников и записи регистров сведений, относящиеся к элементу. Одним движением.

Все выросло из чисто прикладной задачи - ускорить и упростить копирование элементов сложных справочников.

При копировании Номенклатуры нужно было воспроизвести единицы измерения, свойства, штрихкоды и т.д. Так как данные, относящиеся к предмету, раскиданы по подчиненным справочникам и регистрам сведений, пользователи весьма удивлялись, почему по кнопочке "создать элемент копированием" у них на форме копии заполненными оказывалась едва ли треть от привычных им сведений.

Чтобы не утомлять их объяснениями, почему в 1С все так сделано. я сел и написал функцию, которая скопирует практически все, что имеет отношение к объекту. Кроме, конечно, регистров накопления и расчета, а также регистров сведений, связанных с регистраторами.

На этом описательную часть считаю законченой. Собственно сама функция:

//Возвращает ссылку на копию элемента справочника
//При этом копируются элементы подчиненных справочников
//и записи независимых регистров сведений
//у которых владелец и ведущее измерение представлены ссылкой на возвращаемую копию.
//АРГУМЕНТЫ:
//    Ссылка (СправочникСсылка) - Ссылка на копируемый элемент
//    ИсключаяРеквизиты (Строка) - Список имен реквизитов, значения которых копировать не нужно.
//    стрНовыеРеквизиты (Структура) - Структура реквизитов и значений для их присвоения копии
Функция СоздатьПолнуюКопиюЭлементаСправочника(Ссылка, ИсключаяРеквизиты = "", стрНовыеРеквизиты = "") Экспорт
	
	НачатьТранзакцию();
	
	//Если нет владельцев тогда не присваиваем этот реквизит при копировании
	Если ссылка.Метаданные().Владельцы.Количество() = 0 и Найти(ИсключаяРеквизиты , "Владелец") = 0 Тогда
		ИсключаяРеквизиты = ИсключаяРеквизиты + ",Владелец";
	КонецЕсли;
	
	//Если не иерархический, но забыли исключить родителя
	Если НЕ ссылка.Метаданные().Иерархический и Найти(ИсключаяРеквизиты , "Родитель") = 0 Тогда
		ИсключаяРеквизиты = ИсключаяРеквизиты + ",Родитель";
	КонецЕсли;	
	
	//Если забыли исключить реквизиты доступные только для групп добавим в исключения и их
	Для Каждого Реквизит Из ссылка.Метаданные().Реквизиты Цикл
		Если Реквизит.Использование = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппы И Найти(ИсключаяРеквизиты , Реквизит.Имя) = 0 Тогда
			ИсключаяРеквизиты = ИсключаяРеквизиты + "," + Реквизит.Имя;	
		КонецЕсли;
	КонецЦикла;
	
	//Формируем список подчиненных справочников и массив их типов
	спПодчиненныхСправочников = Новый Массив;
	мТиповПодчиненныхСправочников = Новый Массив;
	Для Каждого Спр Из Метаданные.Справочники Цикл
		Если Спр.Владельцы.Содержит(ссылка.Метаданные()) Тогда
			спПодчиненныхСправочников.Добавить(Спр.Имя);
			мТиповПодчиненныхСправочников.Добавить(Тип("СправочникСсылка." + Спр.Имя));
		КонецЕсли;
	КонецЦикла;
	
	//Регистры сведений. Только там где наш элемент копирования может быть ведущим измерением. Запоминаем названия регистров и имена измерений.
	спРегистровСведений = Новый Соответствие;
	Для Каждого Рег Из МЕтаданные.РегистрыСведений Цикл		
		Для Каждого Измерение Из Рег.Измерения Цикл
			Если Измерение.Тип.СодержитТип(Тип("СправочникСсылка." + Ссылка.Метаданные().Имя)) И Измерение.Ведущее Тогда
				спРегистровСведений.Вставить(Рег.Имя, Рег.Измерения.Индекс(Измерение)); Прервать;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
	//Копируем необычно, чтобы легко исключить требуемые реквизиты 
	КопияСсылки = Справочники[ссылка.Метаданные().Имя].СоздатьЭлемент();
	НовыйКод = КопияСсылки.Код;
	ЗаполнитьЗначенияСвойств(КопияСсылки, Ссылка,,ИсключаяРеквизиты);
	КопияСсылки.Код = НовыйКод;
	
	//Если нужно присвоим нужные значения нужным реквизитам копии.
	Если ТипЗнч(стрНовыеРеквизиты) = Тип("Структура") Тогда
		ЗаполнитьЗначенияСвойств(КопияСсылки,стрНовыеРеквизиты);	
	КонецЕсли;

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

скопировать копия копия элемента скопировать подчиненные полностью скопировать скопировать все

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2669    0    John_d    8    

54

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4606    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3960    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8818    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16143    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7243    quazare    8    

109
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ZLENKO 398 27.04.16 16:00 Сейчас в теме
Автору риспект и уважуха! Полезная вещь!
NeLenin; nvl; user908312; chrnv; json; +5 Ответить
2. CaSH_2004 372 28.04.16 23:21 Сейчас в теме
(0) Странно, но я такой потребности за более чем 10 лет работы приходящим программистом не слышал. Более того в нормальных конторах просили затирать многие поля при копировании, а в некоторых даже в принципе запрещать что либо копировать! Т.к. заведение нового объекта копированием основная причина дублей и неправильных данных - ведь один раз неправильно заведенные данные потом копируются в неограниченном количестве. Такое удобство как копирование разрешается только для грамотного пользователя (у нас администратора базы) т.к. только он знает где и что потом нужно исправить, поэтому и нет удивления почему не все данные копируются.
Полагаю либо пользователи неграмотные либо автор либо очень специфичная вещь - очень часто после таких "оптимизаторов" приходишь в фирму и спрашиваешь -"а почему у вас вот это так заполняют, а это иначе?", и слышишь в ответ - "ну я не знаю", "так было", "так нам настроили".
С другой стороны это наш хлеб что кто-то допускает ошибки - после того как база вся переписана, забита хламом так что никто ничего не понимает, приходишь и люди на все согласны чтобы навели им порядок. Поэтому трудитесь дальше в том же духе если есть желание.
Но в общем для админов это наверное хорошая вещь если в нее добавить возможность чтобы при копировании вываливался список чего собственно будет создано чтобы можно было отметить галочками что требуется копировать - типа дерева значения. Да и за универсальность + бы поставил, но не проверив код воздержусь, а проверять как я говорю без интерактива создавая кучу хлама не имеет смысла.
user661255_lexxkrt; r2d255; Vasvas05; monkbest; Ta_Da; +5 1 Ответить
3. dddxddd 29.04.16 08:52 Сейчас в теме
(2) CaSH_2004, Раз вы работаете "приходящим" (без обид, ничего личного) программистом, значит Ваши клиенты сравнительно не большие предприятия, где копирование действительно больше вред чем польза.
В больших предприятиях, где различные части справочников заполняются разными специалистами (отвечающими за правильность своего набора реквизитов) иной раз и нельзя быстро создать новую запись иначе чем копированием. Поэтому говорить, что решение такое решение несет вред, это все равно, что ударив микроскопом по пальцам в попытке забить им гвоздь, заявить, что микроскопы несут вред и посему бесполезны. :-)
14. CaSH_2004 372 05.05.16 19:39 Сейчас в теме
(3) dddxddd, если заполняют разные специалисты то как один специалист может создать ее копированием? И для чего спрашивается если опять таки оно должно заполнятся разными специалистами? Уважаемый - вы противоречите сами себе.
(10) gigabyte_artur, в смысле дали? А мы типа просили? Еще раз повторюсь - более чем за 10 лет обслуживания несколько сотен разных клиентов разных сфер и размеров от 1 до 30 пользователей 1С я не разу не встречал такой потребности как и сам ее не испытывал, зато знаю чем заканчивается обычное копирование, а вы ратуете за групповое копирование обычным пользователем!.
Я не говорю что инструмент плох. Но давать его пользователю - крайне опасно, и нормальны программист/администратор не стал бы этого делать если только он хоть как то следит за базой. Никто не застрахован от ошибок - а вот результаты их придется устранять админу, а не пользователю. Так что и сам бы использовал такой инструмент только с указанными ранее интерактивными отметками что нужно копировать, а что нет. А получить "кота в мешке" на выходе - боже упаси.

15. ZLENKO 398 30.05.16 12:45 Сейчас в теме
(14) CaSH_2004, "более чем за 10 лет обслуживания несколько сотен разных клиентов разных сфер и размеров от 1 до 30 пользователей 1С я не разу не встречал такой потребности как и сам ее не испытывал"

Это не означает что такой потребности нет :-) Но соглашусь, что нужно такое достаточно редко.

"Но давать его пользователю - крайне опасно, и нормальны программист/администратор не стал бы этого делать если только он хоть как то следит за базой."

Все мужчины потенциально опасны, т.к. у них есть то чем они отличаются от женщин и этим они могут изнасиловать кого нибудь. Логика примерно такая же :-)
4. ixijixi 1775 29.04.16 09:13 Сейчас в теме
(2) CaSH_2004, присоединяюсь на счет интерактива. Вот это была бы весчь!
5. dusha0020 1103 29.04.16 09:15 Сейчас в теме
(2) CaSH_2004, (3) dddxddd, Интересная дискуссия получилась. И интересные мнения. Понятно, что раз я автор, то придерживаюсь точки зрения пользы от разработки, но...
Жизнь вообще не так однозначна как нам хотелось бы и в этом я сильно согласен с dddxddd. Видел я случаи захламленных баз и даже писал и использовал чужие удалялки дублей, но видел и другие ситуации, когда чтобы создать ту же номенклатуру с обложкой другого цвета приходилось тратить минут 10 времени. А таких позиций нужно создать 200 штук за 2 дня, чтобы поставить быстро на приход.
Инструмент не бывает хорош или плох в принципе - он бывает правильно или неправильно применен. Поэтому с кинутым тапком не согласен:)
О.Ж; InJey; NeLenin; user908312; mickey.1cx; Ta_Da; +6 Ответить
7. dour-dead 271 29.04.16 11:01 Сейчас в теме
(2) CaSH_2004,

Но в общем для админов это наверное хорошая вещь если в нее добавить возможность чтобы при копировании вываливался список чего собственно будет создано чтобы можно было отметить галочками что требуется копировать - типа дерева значения.


давным давно просили для 7/7 такое

http://infostart.ru/public/66284/
10. gigabyte_artur 04.05.16 11:35 Сейчас в теме
(2) CaSH_2004, господа, Вам дали инструмент. Ещё и бесплатно. Пользоваться им или нет - дело Ваше. Зачем же сразу столько высокомерия?

Я бы в такой ситуации написал для номенклатуры/контрагента/договора/%%ReferenceName%% свою функцию копирования, которая ведёт себя, как я задумал. Возможно, взяв за основу разработку автора.
6. DJDUH 17 29.04.16 10:25 Сейчас в теме
А более хитрым способом
ОбъектМетаданных.Скопировать()
- не?!)
8. Brawler 454 30.04.16 17:31 Сейчас в теме
(6) DJDUH, я думаю вы не поняли, что именно копируется в описанном способе автора.
Там помимо самого элемента справочника копируется и разная связанная информация.
Ну простой пример, сведения регистра сведений счета учета номенклатуры, если говорить о БУХии 2.0, 3.0 и баз пораньше.
По крайней мере так я понял.
Код не изучал опубликованный тут.
9. vec435 15 04.05.16 09:26 Сейчас в теме
хорошо бы еще в XML - в различные базы закинуть постобработкой
11. ikekoval 119 04.05.16 22:33 Сейчас в теме
Было приятно почитать. Спасибо автору за решение!
12. alex_sayan 05.05.16 12:53 Сейчас в теме
Режет глаза многократное использование
Ссылка.Метаданные()

надо было однократно поместить метаданные элемента в переменную, и работать с переменной, а не получать метаданные многократно.
Yashazz; корум; wowik; amon_ra; dusha0020; +5 Ответить
13. dusha0020 1103 05.05.16 13:23 Сейчас в теме
(12) puzakov, Конструктивная критика. Благодарю!
alex_sayan; +1 Ответить
16. monkbest 115 31.05.16 07:39 Сейчас в теме
Критика в комментах думаю уместна, т.к. много кто зайдет сюда, увидит, обрадуется и потащит процедуру к себе не подумав. А ведь действительно:
1. В УТ 10 при копировании штрихкод не копируется. А надо? Зачем две номенклатуры с одинаковым штрих кодом?
2. В Бух 2.0 счета учета не копируются. А надо? Если бухгалтер уверен, что там все однотипно, так может счета повесить на папку?
Собственно авторы типовой конфы, они ведь Вам не только структуру данных дают, но и методику работы.
корум; +1 Ответить
17. chrnv 04.10.17 02:01 Сейчас в теме
У меня твоей процедурой элемент справочника не копируется. Сваливается с ошибкой аля "Значение реквизита "код" не заполнено". Чуть-чуть "допилил".
А так, обработка полезная!

//Теперь запишется:)
Если не ЗначениеЗаполнено(КопияСсылки.Код) тогда
	КопияСсылки.УстановитьНовыйКод();
КонецЕсли;
КопияСсылки.Записать();
18. mikv 21.11.18 18:28 Сейчас в теме
Ребята я знаю что глупый вопрос, но немогу понять как применить и куда вставить эту функцию. Извините я только начинаю учится
19. eromashova 29.01.19 20:51 Сейчас в теме
Огромное спасибо автору.!!!
Применила в задаче создания новых номенклатур копированием имеющихся в определенной группе с изменением двух реквизитов-свойств. Руками довольно большое количество позиций создавать было бы утомительно... )
Спасибо!
20. serpent 67 23.05.19 13:33 Сейчас в теме
КАК заготовка хорошо. Пришлось доработать.
При копировании "Контрагента" Столкнулся с Подчиненным справочником Договора. Он оказался с ИЕРАРХИЕЙ.
Каталоги загружались а сами Элементы нет т.к. при копировании Элемента Спр. Договоры копировался и родитель от другого контрагента. Сильно заморачиваться не стал.

//А теперь создадим новые подчиненные элементы копированием и сопоставим их имеющимся у объекта копирования
    Для Каждого ПодчиненныйСправочник Из спПодчиненныхСправочников Цикл
        ВыборкаИзПодчиненногоСправочника = Справочники[ПодчиненныйСправочник].Выбрать(,Ссылка);
        Пока ВыборкаИзПодчиненногоСправочника.Следующий() Цикл
            ЗаписьСинхронизации = тСинхронизацииРеквизитов.Добавить();
			
			НовыйПодчиненныйЭлемент = ВыборкаИзПодчиненногоСправочника.Ссылка.Скопировать();
            НовыйПодчиненныйЭлемент.Владелец = КопияСсылки.Ссылка;//КопияСсылки.Ссылка
			Если ТипЗнч(НовыйПодчиненныйЭлемент.Ссылка) = Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда
				Если НовыйПодчиненныйЭлемент.ЭтоГруппа=Ложь Тогда
					//Обнуляем Родителя в Справочнике "Договоры", дальше руками.
					НовыйПодчиненныйЭлемент.Родитель = "";
				КонецЕсли;
			КонецЕсли;
			
			НовыйПодчиненныйЭлемент.Записать();
			
			ЗаписьСинхронизации.СтароеЗначение = ВыборкаИзПодчиненногоСправочника.Ссылка;
            ЗаписьСинхронизации.НовоеЗначение  = НовыйПодчиненныйЭлемент.Ссылка;
        КонецЦикла;
    КонецЦикла;
Показать
27. odn 01.03.22 15:32 Сейчас в теме
(20)
Действительно, функция не работает если имеется подчиненный справочник с иерархией, так как родитель копируется из элемента копирования.
21. DEG156 28 15.11.19 15:06 Сейчас в теме
Спасибо. Но сейчас у справочников есть табличные части и в данном коде они не прописаны и соответственно не копируются...
22. dusha0020 1103 16.11.19 13:00 Сейчас в теме
(21) Действительно метод ЗаполнитьЗначенияСвойств, применяемый для переноса реквизитов не заполняет табличные части приемника.
Но можете дополнить функцию чем-то типа:
Для Каждого ТЧ из Ссылка.Метаданные().ТабличныеЧасти Цикл КопияСсылки[ТЧ.Имя].Загрузить(Ссылка[ТЧ.Имя].Выгрузить()) КонецЦикла


Если надо добавьте проверку по имени табличной части перед переносом на отсутствие в списке исключаемых реквизитов.
Код открыт, так что конструктивные правки приветствуются:)
23. DEG156 28 18.11.19 09:04 Сейчас в теме
Добавил перед записью


Для Каждого ТаблЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл
		Для каждого СтрокаТЗ Из Ссылка[ТаблЧасть.Имя] Цикл 
			ЗаполнитьЗначенияСвойств(КопияСсылки[ТаблЧасть.Имя].Добавить(), СтрокаТЗ) 
		КонецЦикла;	
	КонецЦикла;
24. nvl 129 18.09.20 13:06 Сейчас в теме
Спасибо! Сильно пригодилось! Необходимо было одно из свойств затолкать в название, тем самым размножив справочник номенклатура, скопировав остальные реквизиты со свойствами. Таблицу значений я сделала со столбцами номенклатура, свойство, а дальше эта функция сильно помогла.
25. NeLenin 13 01.04.21 09:50 Сейчас в теме
Хорошая функция. Документы так тоже можно копировать. На днях нужно было что-то в этом духе, примерно как у (24), реализовал пока несколько проще. Забираю себе, как отличный пример работы с метаданными. Автору низкий поклон.
26. user1621493 01.07.21 15:15 Сейчас в теме
Огромное спасибо! Применила для создания новых элементов справочников Номенклатура, в случае приходования Оборудования.
28. smax 16.07.22 17:45 Сейчас в теме
(20) на примере статейБюджетов доработал создание подчиненных с учетом иерархии

 //А теперь создадим новые подчиненные элементы копированием и сопоставим их имеющимся у объекта копирования
    Для Каждого ПодчиненныйСправочник Из спПодчиненныхСправочников Цикл
        ВыборкаИзПодчиненногоСправочника = Справочники[ПодчиненныйСправочник].ВыбратьИерархически(,Ссылка);
        Пока ВыборкаИзПодчиненногоСправочника.Следующий() Цикл
            ЗаписьСинхронизации = тСинхронизацииРеквизитов.Добавить();
            
            НовыйПодчиненныйЭлемент = ВыборкаИзПодчиненногоСправочника.Ссылка.Скопировать();
            НовыйПодчиненныйЭлемент.Владелец = КопияСсылки.Ссылка;//КопияСсылки.Ссылка
            Если ТипЗнч(НовыйПодчиненныйЭлемент.Ссылка) = Тип("СправочникСсылка.СтатьиБюджета") Тогда
				Если не НовыйПодчиненныйЭлемент.Родитель.ПУстая() Тогда
					
					стрНовыйРодитель = тСинхронизацииРеквизитов.Найти(НовыйПодчиненныйЭлемент.Родитель,"СтароеЗначение");
					Если стрНовыйРодитель<>Неопределено Тогда
						НовыйПодчиненныйЭлемент.Родитель =  стрНовыйРодитель.НовоеЗначение;
					КонецЕслИ;	
                КонецЕсли;
            КонецЕсли;
            
            НовыйПодчиненныйЭлемент.Записать();
            
            ЗаписьСинхронизации.СтароеЗначение = ВыборкаИзПодчиненногоСправочника.Ссылка;
            ЗаписьСинхронизации.НовоеЗначение  = НовыйПодчиненныйЭлемент.Ссылка;
        КонецЦикла;
КонецЦикла;
Показать
29. Aleksey3A 23.05.23 17:06 Сейчас в теме
Спасибо огромное автору!
Оставьте свое сообщение