Понадобилось использовать обработку на опубликованной базе и тут начались проблемы:
- Классический выбор файла здесь не работает
- Прочитать файл просто так не получилось
- Пришлось отказаться от чтения при помощи Excel (типа универсальная была)
Поэтому пришлось использовать БСП, сохранять во временный файл и читать оттуда:
&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Фильтр = "Excel CSV (*.csv)|*.csv";
ДиалогВыбораФайла.МножественныйВыбор=Ложь;
ДиалогВыбораФайла.Заголовок = "Выберите файл";
ДиалогВыбораФайла.ПредварительныйПросмотр = Истина;
ДиалогВыбораФайла.ИндексФильтра = 0;
ПараметрыЗагрузки.Диалог = ДиалогВыбораФайла;
ОповещениеЗавершенияВыбораФайла = Новый ОписаниеОповещения("ВыборФАйлаЗавершение", ЭтотОбъект);
ФайловаяСистемаКлиент.ЗагрузитьФайлы(ОповещениеЗавершенияВыбораФайла, ПараметрыЗагрузки); //БСП
КонецПроцедуры
&НаКлиенте
Процедура ВыборФАйлаЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат<>Неопределено Тогда
ИмяФайла=Результат[0].ПолноеИмя;
АдресВХранилище=Результат[0].Хранение;
ПрочитатьФайлCSV(АдресВХранилище);
Элементы.Таблица.Обновить();
ДоступностьКнопкиСоздания();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПрочитатьФайлCSV(АдресВХранилище)
Данные = ПолучитьИзВременногоХранилища(АдресВХранилище);
ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("csv");
Данные.Записать(ИмяПромежуточногоФайла);
УдалитьИзВременногоХранилища(АдресВХранилище); //очищаем временное хранилище
оТаблица=Новый ТаблицаЗначений;
//очищаем таблицу и удаляем колонки
Таблица.Очистить();
оТаблица=Таблица.Выгрузить();
Разделитель=";";
ЗаголовкиИзПервойСтроки=Истина;
Текст = Новый ЧтениеТекста(ИмяПромежуточногоФайла);
//создадим колонки
ТекСтрока = Текст.ПрочитатьСтроку();
Если ТекСтрока <> Неопределено Тогда
МассивЗначений = СтрРазделить(ТекСтрока, Разделитель);
ИндексКолонки = 0;
Для Каждого ИмяКолонки Из МассивЗначений Цикл
ИмяКолонки = ?(ЗаголовкиИзПервойСтроки, "Кол"+ИндексКолонки, ИмяКолонки);
оТаблица.Колонки.Добавить(ИмяКолонки);
ИндексКолонки = ИндексКолонки + 1;
КонецЦикла;
Если ЗаголовкиИзПервойСтроки Тогда
ТекСтрока = Текст.ПрочитатьСтроку();
КонецЕсли;
КонецЕсли;
Пока ТекСтрока <> Неопределено Цикл // строки читаются до символа перевода строки
НоваяСтрока = оТаблица.Добавить();
МассивЗначений = СтрРазделить(ТекСтрока, Разделитель);
ИндексКолонки = 0;
Для Каждого ТекЗначение Из МассивЗначений Цикл
Попытка
ЗначениеЯчейки=Дата(ТекЗначение+":00");
Исключение
ЗначениеЯчейки=Число(СтрЗаменить(ТекЗначение," ",""));
КонецПопытки;
НоваяСтрока[ИндексКолонки] = ЗначениеЯчейки;
ИндексКолонки = ИндексКолонки + 1;
КонецЦикла;
ТекСтрока = Текст.ПрочитатьСтроку();
КонецЦикла;
//Возврат Результат;
Таблица.Загрузить(оТаблица);
//удаляем временный файл
Попытка
УдалитьФайлы(ИмяПромежуточногоФайла);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Мой механизм.Действие'"), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
Комментариев нет:
Отправить комментарий