|
Управляемое приложение. Создание номенклатуры | ☑ | ||
---|---|---|---|---|
0
DrLivsey
12.12.11
✎
16:20
|
Есть периодическая задача по созданию существенных (более 20 тыс) новых номенклатурных позиций.
В архитектуре "Обычное приложение" всё грузится шустро. В архитектуре "Управляемое приложение" после создания некоего количества элементов наблюдаются усиливающиеся тормоза. Порядок создания 1. функция с директивой "на клиенте" собирает структуру со всем параметрами для создания. 2. вызывается функцию с директивой "на сервере", которая из модуля объекта обработки вызывает функцию с директивой "на сервере", которая собственно уже и создает элемент. Всё это вызывается для каждой строки считываемого файла. Или надо переделать что файл считывается в некую структуру и отправляется "на сервер" и уже там всё создается? |
|||
1
Defender aka LINN
12.12.11
✎
16:23
|
"Всё это вызывается для каждой строки считываемого файла." - расстрелять.
Передай файл на сервер и делай там с ним что хочешь. |
|||
2
fyn
12.12.11
✎
16:37
|
(1) наверное такое решение было принято для отображения текущего состояния процесса , но в целом согласен - расстрелять
|
|||
3
DrLivsey
12.12.11
✎
16:42
|
Процесс смотреть не нужно.
Файл Excel, считывается через COMОбъект("ADODB.CONNECTION") Поподробнее про передачу на сервер можно? То, что построчно надо переделать согласен, предполагал так и поступить, интересен способ передачи. |
|||
4
Defender aka LINN
12.12.11
✎
16:42
|
(2) Проживут без отображения, ничего страшного :)
|
|||
5
Amra
12.12.11
✎
16:44
|
(3) Массив масиввов например)
|
|||
6
fyn
12.12.11
✎
16:44
|
(3) если на сервере есть офис, то и парсите его на сервере )
|
|||
7
Defender aka LINN
12.12.11
✎
16:44
|
(3) Сейчас будет ВНЕЗАПНО:
|
|||
8
DrLivsey
12.12.11
✎
16:46
|
(6) и (7) На сервере офиса нет и не будет, ибо он там не нужен.
Так что придется передавать массив (или структуру) из структур. |
|||
9
Defender aka LINN
12.12.11
✎
16:47
|
(8) Можно ТЗ заполнить, например.
|
|||
10
DrLivsey
12.12.11
✎
16:49
|
Таблица значений не выйдет
Доступность: Сервер, толстый клиент, внешнее соединение. |
|||
11
fyn
12.12.11
✎
16:52
|
(8) в веб-клиенте тоже не факт, что всегда будет офис
|
|||
12
Gisborn
12.12.11
✎
16:58
|
Прочитай в COMSafeArray и его передай на сервер:
Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок)); Данные = Область.Value.Выгрузить(); |
|||
13
Defender aka LINN
12.12.11
✎
17:11
|
(10) Зато ТаблицаФормы есть
|
|||
14
DrLivsey
12.12.11
✎
18:02
|
Всем спасибо.
Переписал с отправкой на сервер результатов считывания всего файла и разбора этих результатов уже на сервере. Всё заработало шустро. |
|||
15
zavsom
12.12.11
✎
18:28
|
у меня вопрос: написал для СРМ обработку загрузки из эксель файла контрагентов, деаю все то же самое для конфы УТ 11.0.6.9 - не запускается - ЧЯДНТ ? стал переписывать под управляемое приложение - ругется на всем вот пример:
Перем ЗнЯч1,ЗнЯч2,ЗнЯч3,ЗнЯч4, ЗнЯч5,ЗнЯч6; Процедура ВыборФайла(Элемент) ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбора.Фильтр = "Файл данных (*.xls,*.xlsx)|*.xls;*.xlsx"; ДиалогВыбора.Расширение = "xls"; ДиалогВыбора.Заголовок ="Выберите файлы для загрузки"; ДиалогВыбора.ПредварительныйПросмотр = Ложь; ДиалогВыбора.ИндексФильтра = 0; ДиалогВыбора.ПолноеИмяФайла = Элемент.Значение; ДиалогВыбора.ПроверятьСуществованиеФайла = Ложь; ДиалогВыбора.МножественныйВыбор = Ложь; Если ДиалогВыбора.Выбрать() Тогда Элемент.Значение = ДиалогВыбора.ПолноеИмяФайла; КонецЕсли; КонецПроцедуры Процедура ИмяНачалоВыбора(Элемент, СтандартнаяОбработка) ВыборФайла(Элемент); КонецПроцедуры Процедура КнопкаВыполнитьНажатие(Кнопка) Товар = Справочники.Номенклатура; ЕдИзм = Справочники.ЕдиницыИзмерения; Попытка Excel = Новый COMОбъект("Excel.Application"); Excel.WorkBooks.Open(фИмяФайлаИсточника); Состояние("Обработка файла Microsoft Excel..."); ExcelЛист = Excel.Sheets(1); Исключение Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel."); КонецПопытки; НазвЭл=""; Производитель=""; ПроизводительНомер=""; Комментарии=""; Комментарии2=""; Комментарии3=""; СчетчикЗагрузки=0; Кол_воСтрок=конТЧ-начТЧ+1; Для инд1=1 По Кол_воСтрок Цикл ЗнЯч1=СокрЛП(Строка(ExcelЛист.Cells(начТЧ+инд1-1,П1).Value)); Если ЗначениеЗаполнено(ЗнЯч1)=1 Тогда НазвЭл=ЗнЯч1; КонецЕсли; ЗнЯч2=СокрЛП(Строка(ExcelЛист.Cells(начТЧ+инд1-1,П2).Value)); Если ЗначениеЗаполнено(ЗнЯч2)=1 Тогда Производитель=ЗнЯч2; КонецЕсли; ЗнЯч3=СокрЛП(Строка(ExcelЛист.Cells(начТЧ+инд1-1,П3).Value)); Если ЗначениеЗаполнено(ЗнЯч3)=1 Тогда ПроизводительНомер=ЗнЯч3; КонецЕсли; ЗнЯч4=СокрЛП(Строка(ExcelЛист.Cells(начТЧ+инд1-1,П4).Value)); Если ЗначениеЗаполнено(ЗнЯч4)=1 Тогда Комментарии=ЗнЯч4; КонецЕсли; ЗнЯч5=СокрЛП(Строка(ExcelЛист.Cells(начТЧ+инд1-1,П5).Value)); Если ЗначениеЗаполнено(ЗнЯч5)=1 Тогда Комментарии2=ЗнЯч5; КонецЕсли; ЗнЯч6=СокрЛП(Строка(ExcelЛист.Cells(начТЧ+инд1-1,П6).Value)); Если ЗначениеЗаполнено(ЗнЯч6)=1 Тогда Комментарии3=ЗнЯч6; КонецЕсли; НайденнаяСсылка = Товар.НайтиПоНаименованию(НазвЭл); Если НайденнаяСсылка = Товар.ПустаяСсылка() Тогда Сообщить("Товара с таким наименованием """ + НазвЭл + """ еще нет, будет создан"); НовыйОбъект = Товар.СоздатьЭлемент(); НовыйОбъект.Наименование = НазвЭл; //*** запишем единицу измерения НайденнаяСсылка1 = ЕдИзм.НайтиПоНаименованию("шт"); Если НайденнаяСсылка1 = ЕдИзм.ПустаяСсылка() Тогда Сообщить("Такой единицы - шт - нет "); Иначе НовыйОбъект.ЕдиницаИзмерения=НайденнаяСсылка1.Ссылка; КонецЕсли; НовыйОбъект.Записать(); Иначе Сообщить("Товар такой есть в базе уже! "+НазвЭл); КонецЕсли; состояние(инд1); СчетчикЗагрузки=СчетчикЗагрузки+1; НазвЭл=""; Производитель=""; ПроизводительНомер=""; Комментарии=""; Комментарии2=""; Комментарии3=""; КонецЦикла; Excel.WorkBooks.Close(); Excel = 0; КонецПроцедуры |
|||
16
zavsom
12.12.11
✎
18:31
|
а вот тот же пример под управляемые формы:
Перем ЗнЯч1,ЗнЯч2,ЗнЯч3,ЗнЯч4, ЗнЯч5,ЗнЯч6; &НаКлиенте Процедура ВыборФайла(Элемент) ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбора.Фильтр = "Файл данных (*.xls,*.xlsx)|*.xls;*.xlsx"; ДиалогВыбора.Расширение = "xls"; ДиалогВыбора.Заголовок ="Выберите файлы для загрузки"; ДиалогВыбора.ПредварительныйПросмотр = Ложь; ДиалогВыбора.ИндексФильтра = 0; ДиалогВыбора.ПолноеИмяФайла = Элемент.Значение; ДиалогВыбора.ПроверятьСуществованиеФайла = Ложь; ДиалогВыбора.МножественныйВыбор = Ложь; Если ДиалогВыбора.Выбрать() Тогда Элемент.Значение = ДиалогВыбора.ПолноеИмяФайла; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Команда1(Команда) // Вставить содержимое обработчика. //Сообщить("Нажали кнопку"); Предупреждение(" Нажали на кнопку "); Товар = Справочники.Номенклатура; ЕдИзм = Справочники.ЕдиницыИзмерения; Попытка Excel = Новый COMОбъект("Excel.Application"); Excel.WorkBooks.Open(фИмяФайлаИсточника); Состояние("Обработка файла Microsoft Excel..."); ExcelЛист = Excel.Sheets(1); Исключение Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel."); КонецПопытки; НазвЭл=""; Производитель=""; ПроизводительНомер=""; Комментарии=""; Комментарии2=""; Комментарии3=""; СчетчикЗагрузки=0; Кол_воСтрок=конТЧ-начТЧ+1; Для инд1=1 По Кол_воСтрок Цикл ЗнЯч1=СокрЛП(Строка(ExcelЛист.Cells(начТЧ+инд1-1,П1).Value)); Если ЗначениеЗаполнено(ЗнЯч1)=1 Тогда НазвЭл=ЗнЯч1; КонецЕсли; ЗнЯч2=СокрЛП(Строка(ExcelЛист.Cells(начТЧ+инд1-1,П2).Value)); Если ЗначениеЗаполнено(ЗнЯч2)=1 Тогда Производитель=ЗнЯч2; КонецЕсли; ЗнЯч3=СокрЛП(Строка(ExcelЛист.Cells(начТЧ+инд1-1,П3).Value)); Если ЗначениеЗаполнено(ЗнЯч3)=1 Тогда ПроизводительНомер=ЗнЯч3; КонецЕсли; ЗнЯч4=СокрЛП(Строка(ExcelЛист.Cells(начТЧ+инд1-1,П4).Value)); Если ЗначениеЗаполнено(ЗнЯч4)=1 Тогда Комментарии=ЗнЯч4; КонецЕсли; ЗнЯч5=СокрЛП(Строка(ExcelЛист.Cells(начТЧ+инд1-1,П5).Value)); Если ЗначениеЗаполнено(ЗнЯч5)=1 Тогда Комментарии2=ЗнЯч5; КонецЕсли; ЗнЯч6=СокрЛП(Строка(ExcelЛист.Cells(начТЧ+инд1-1,П6).Value)); Если ЗначениеЗаполнено(ЗнЯч6)=1 Тогда Комментарии3=ЗнЯч6; КонецЕсли; НайденнаяСсылка = Товар.НайтиПоНаименованию(НазвЭл); Если НайденнаяСсылка = Товар.ПустаяСсылка() Тогда Сообщить("Товара с таким наименованием """ + НазвЭл + """ еще нет, будет создан"); НовыйОбъект = Товар.СоздатьЭлемент(); НовыйОбъект.Наименование = НазвЭл; //*** запишем единицу измерения НайденнаяСсылка1 = ЕдИзм.НайтиПоНаименованию("шт"); Если НайденнаяСсылка1 = ЕдИзм.ПустаяСсылка() Тогда Сообщить("Такой единицы - шт - нет "); Иначе НовыйОбъект.ЕдиницаИзмерения=НайденнаяСсылка1.Ссылка; КонецЕсли; НовыйОбъект.Записать(); Иначе Сообщить("Товар такой есть в базе уже! "+НазвЭл); КонецЕсли; состояние(инд1); СчетчикЗагрузки=СчетчикЗагрузки+1; НазвЭл=""; Производитель=""; ПроизводительНомер=""; Комментарии=""; Комментарии2=""; Комментарии3=""; КонецЦикла; Excel.WorkBooks.Close(); Excel = 0; КонецПроцедуры &НаКлиенте Процедура фИмяФайлаИсточникаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) // Вставить содержимое обработчика. ВыборФайла(Элемент); КонецПроцедуры а вот какие ошибки пишет сразу же при синтаксис контроле: {Форма.Форма.Форма(30,16)}: Переменная не определена (Справочники) Товар = <<?>>Справочники.Номенклатура; (Проверка: Тонкий клиент) {Форма.Форма.Форма(31,16)}: Переменная не определена (Справочники) ЕдИзм = <<?>>Справочники.ЕдиницыИзмерения; (Проверка: Тонкий клиент) тут я вообще приуныл - ниче не понимаю... |
|||
17
zavsom
13.12.11
✎
11:04
|
гз
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |