При записи объекта справочник запускается куча сложных процессов

1. user1406028 22.07.20 07:26 Сейчас в теме
Здравствуйте! Новичок в программировании. Прошу отнестись с пониманием.
Написал обработчик для загрузки справочника "Партнеры" из Ексель. Загрузка работает, но очень долго. Запустил ее через отладчик, оказывается при выполнении метода ПартнерыОбъект.Записать(); обращается ко множеству встроенных процедур, назначение которых сложно или даже невозможно для моего понимания. В связи с чем возникают вопросы. 1) как можно оптимизировать код, чтобы она работал быстрее и не запускал или запускал по минимуму встроенные процедуры и функции. 2) если я с помощью подобного кода загрузил в базу справочники номенклатуру, контрагенты, партнеры не привело ли это к непоправимым последствиям в самой базе? Версия 1С:Предприятие 8.3 (8.3.15.1830); Управление торговлей, редакция 11 (11.4.11.71).
Ниже привожу сам код обработки.

&НаКлиенте

Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	  Режим = РежимДиалогаВыбораФайла.Открытие;
	  ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
	  ДиалогОткрытияФайла.Заголовок = "Выберите файл";
	  ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
	  ДиалогОткрытияФайла.Фильтр = "Табличный документ (*.xlsx) | *.xlsx";
	  
	  Оповещение = Новый ОписаниеОповещения("ЗавершениеВыбораФайлаЗагрузки", ЭтотОбъект);
	  ДиалогОткрытияФайла.Показать(Оповещение);	
	
КонецПроцедуры

&НаКлиенте
Процедура ЗавершениеВыбораФайлаЗагрузки(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
	
	Если ВыбранныеФайлы = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ПутьФайлаЗагрузки = ВыбранныеФайлы[0];
	
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьФайл(Команда)
	ЗагрузитьФайлНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьФайлНаСервере()
	
	тзДанные = ПрочитатьДанныеВТаблицуЗначений(ПутьФайлаЗагрузки);
	ЗагрузитьДанныеИзТаблицыЗначений(тзДанные);
	
КонецПроцедуры

&НаСервере
Функция ПрочитатьДанныеВТаблицуЗначений(ПутьФайлаЗагрузки)
	
	тзДанные = Новый ТаблицаЗначений;
	тзДанные.Колонки.Добавить("Наименование");
	тзДанные.Колонки.Добавить("Телефон");
	тзДанные.Колонки.Добавить("Номер");
	тзДанные.Колонки.Добавить("Тип");
		
	ВесьДокумент = Новый ТабличныйДокумент();
	ВесьДокумент.Прочитать(ПутьФайлаЗагрузки, СпособЧтенияЗначенийТабличногоДокумента.Значение);
	
	СтраницыДокумента = ВесьДокумент.Области;
	
	Если СтраницыДокумента.Количество() = 0 Тогда 
		Сообщить("В документе нет страниц");
		Возврат тзДанные;
	КонецЕсли;
	 		
	ТекущаяОбластьЯчеек = СтраницыДокумента[0];
	
	МаксКолонок = Мин(ВесьДокумент.ШиринаТаблицы, 100);
	МаксСтрок = ТекущаяОбластьЯчеек.Низ;
	
	Для Стр = 2 по МаксСтрок Цикл
		НоваяСтрока = тзДанные.Добавить();
		НоваяСтрока.Наименование = ВесьДокумент.Область(Стр,1).Текст;
		НоваяСтрока.Телефон= Строка(ВесьДокумент.Область(Стр,2).Текст);
		НоваяСтрока.Номер = Строка(ВесьДокумент.Область(Стр,3).Текст);
		НоваяСтрока.Тип = ВесьДокумент.Область(Стр,4).Текст;
				
	КонецЦикла;
	
	  Возврат тзДанные;
	
  КонецФункции
  
&НаСервере
Процедура ЗагрузитьДанныеИзТаблицыЗначений(Данные)
	
	Для каждого СтрокаТЗ Из Данные Цикл
		НовыйПартнер = Справочники.Партнеры.СоздатьЭлемент();
    	НовыйПартнер.Наименование = СтрокаТЗ.Наименование;
		НовыйПартнер.НаименованиеПолное = СтрокаТЗ.Наименование;
		НовыйПартнер.Клиент = Истина;
		Если Лев(СтрокаТЗ.Тип,3) = "Юри" Тогда
		//НовыйПартнер.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо;
		НовыйПартнер.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.Компания;
		Иначе //НовыйПартнер.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо;
		НовыйПартнер.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.ЧастноеЛицо;
		КонецЕсли;	
		Тел=НовыйПартнер.КонтактнаяИнформация.Добавить();
        тел.тип=Перечисления.ТипыКонтактнойИнформации.Телефон  ;
        Тел.Вид=Справочники.ВидыКонтактнойИнформации.ТелефонПартнера ;
        Тел.Представление= СтрокаТЗ.Телефон;
        тел.ВидДляСписка=Справочники.ВидыКонтактнойИнформации.ТелефонПартнера;
        тел.ЗначенияПолей="<КонтактнаяИнформация xmlns=""http://www.v8.1c.ru/ssl/contactinfo"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" Представление="""+СтрокаТЗ.Телефон+"""><Состав xsi:type=""НомерТелефона"" КодСтраны="""" КодГорода="""" Номер="""+СтрокаТЗ.Телефон+""" Добавочный=""""/></КонтактнаяИнформация>";
        тел.НомерТелефона=СтрокаТЗ.Телефон;
        тел.НомерТелефонаБезКодов=СтрокаТЗ.Телефон;
        НовыйПартнер.Записать();
	КонецЦикла;		
	
КонецПроцедуры
Показать
Прикрепленные файлы:
контрагенты пробный.xlsx
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. PowerBoy 3397 22.07.20 08:27 Сейчас в теме
НовыйПартнер.ОбменДанными.Загрузка=Истина;
НовыйПартнер.Записать();
alalsl; user1406028; darkultro37; zarankony; alex_bob; +5 Ответить
3. user1406028 22.07.20 08:59 Сейчас в теме
(2)
НовыйПартнер.ОбменДанными.Загрузка=Истина;

По большому счету ничего не изменилось.
4. ivanov_alex 91 22.07.20 09:54 Сейчас в теме
Справочник.Партнеры.Модуль.ПриЗаписи() смотрели?
6. user1406028 22.07.20 10:36 Сейчас в теме
(4) Да.
Сначала переходит на процедуру призаписи, потом Функция ПараметрыСинхронизацииКлючей(), Процедура ПередЗаписью(Отказ), ПодготовитьДанныеДляСинхронизацииКлючей(Объект, Параметры) Экспорт, и так открывается около 30 различных модулей. Причем на некоторых процедурах останавливается на циклов 20. И пошагово эту операцию пройти не хватает терпения.
5. darkultro37 10 22.07.20 10:18 Сейчас в теме
1) Если конфигурация штатная, то
НовыйПартнер.ОбменДанными.Загрузка=Истина;
как писали выше. Остальное имхо лучше не трогать.
2)
если я с помощью подобного кода загрузил в базу справочники номенклатуру, контрагенты, партнеры не привело ли это к непоправимым последствиям в самой базе?

Главное, чтобы все обязательные реквизиты внутри справочников были заполнены.
user1406028; +1 Ответить
7. user1406028 22.07.20 10:38 Сейчас в теме
(5) Но при 5000 партнеров обработка выполняется порядка 5 минут. А например универсальная обработка по загрузке грузит секунд за 15-20. Значит можно как так по другому это сделать?
8. user1406028 22.07.20 10:41 Сейчас в теме
И еще почему то наименования объектов справочников загружаемые моей обработкой не опознаются универсальным загрузчиком.
Оставьте свое сообщение

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