При записи объекта справочник запускается куча сложных процессов
Здравствуйте! Новичок в программировании. Прошу отнестись с пониманием.
Написал обработчик для загрузки справочника "Партнеры" из Ексель. Загрузка работает, но очень долго. Запустил ее через отладчик, оказывается при выполнении метода ПартнерыОбъект.Записать(); обращается ко множеству встроенных процедур, назначение которых сложно или даже невозможно для моего понимания. В связи с чем возникают вопросы. 1) как можно оптимизировать код, чтобы она работал быстрее и не запускал или запускал по минимуму встроенные процедуры и функции. 2) если я с помощью подобного кода загрузил в базу справочники номенклатуру, контрагенты, партнеры не привело ли это к непоправимым последствиям в самой базе? Версия 1С:Предприятие 8.3 (8.3.15.1830); Управление торговлей, редакция 11 (11.4.11.71).
Ниже привожу сам код обработки.
Написал обработчик для загрузки справочника "Партнеры" из Ексель. Загрузка работает, но очень долго. Запустил ее через отладчик, оказывается при выполнении метода ПартнерыОбъект.Записать(); обращается ко множеству встроенных процедур, назначение которых сложно или даже невозможно для моего понимания. В связи с чем возникают вопросы. 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
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(4) Да.
Сначала переходит на процедуру призаписи, потом Функция ПараметрыСинхронизацииКлючей(), Процедура ПередЗаписью(Отказ), ПодготовитьДанныеДляСинхронизацииКлючей(Объект, Параметры) Экспорт, и так открывается около 30 различных модулей. Причем на некоторых процедурах останавливается на циклов 20. И пошагово эту операцию пройти не хватает терпения.
Сначала переходит на процедуру призаписи, потом Функция ПараметрыСинхронизацииКлючей(), Процедура ПередЗаписью(Отказ), ПодготовитьДанныеДляСинхронизацииКлючей(Объект, Параметры) Экспорт, и так открывается около 30 различных модулей. Причем на некоторых процедурах останавливается на циклов 20. И пошагово эту операцию пройти не хватает терпения.
1) Если конфигурация штатная, то
2)
Главное, чтобы все обязательные реквизиты внутри справочников были заполнены.
НовыйПартнер.ОбменДанными.Загрузка=Истина;
как писали выше. Остальное имхо лучше не трогать.
2)
если я с помощью подобного кода загрузил в базу справочники номенклатуру, контрагенты, партнеры не привело ли это к непоправимым последствиям в самой базе?
Главное, чтобы все обязательные реквизиты внутри справочников были заполнены.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот