Есть расширение, в нем я загружаю данные из Excel но встретился с ошибкой когда файл расположен на
клиентской "тачке", а 1С на сервере...
как пофиксить эту тему ваще не понимаю, буду признателен за помощь в решении вопроса.
клиентской "тачке", а 1С на сервере...
{ЗагрузкаЗаказов Документ.ЗаказКлиента.Форма.ФормаСпискаДокументов.Форма(7)}: Ошибка при вызове метода контекста (Прочитать): Каталог не обнаружен 'C:\Users\Gordeev\Desktop\Новая папка\ОтчетОРТ.xlsx'
&НаСервере
Процедура MAD_ВыбратьПослеНаСервере(ИмяФайла)
ТабДок = Новый ТабличныйДокумент;
Попытка
ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Исключение
Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
x = 2; //начальная строка
Пока ТабДок.Область("R" + Строка(x) + "C1").Текст <> "" Цикл //будем читать строки пока есть данные в первой колонке
Строка = Новый Структура;
Попытка
Количество = Число(СокрЛП(ТабДок.Область("R" + Строка(x) + "C2").Текст));
Исключение
Количество = 0;
КонецПопытки;
Если Количество>0 Тогда
ПерваяКолонка = СокрЛП(ТабДок.Область("R" + Строка(x) + "C1").Текст);
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.НоменклатураН =ПерваяКолонка;
НоваяСтрока.Количество = Количество;
КонецЕсли;
//читаем строку
//работаем со строкой
x = x + 1;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура MAD_ВыбратьПосле(Команда)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
//Фильтр = НСтр("ru = 'Ексель'; en = 'Excel'")
//+ "(*.xlsx)|*.xlsx" + "(*.xls)|*.xls";
//ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите файл";
Если ДиалогОткрытияФайла.Выбрать() Тогда
МассивФайлов = ДиалогОткрытияФайла.ВыбранныеФайлы;
Для Каждого ИмяФайла Из МассивФайлов Цикл
//Элементы.Декорация3.Видимость = Истина;
ВыбФайл = Новый Файл(ИмяФайла);
Сообщить(ИмяФайла
+ НСтр("ru = '; Размер = '; en = '; Size = '")
+ ВыбФайл.Размер());
Таблица.Очистить();
Адрес = "";
//ПоместитьФайлВВремХранилище(Адрес, ИмяФайла);
MAD_ВыбратьПослеНаСервере(ИмяФайла);
КонецЦикла;
Иначе
Предупреждение(НСтр("ru = 'Файл(ы) не выбран!'; en = 'File(s) not selected!'"));
КонецЕсли;
КонецПроцедуры
Показатькак пофиксить эту тему ваще не понимаю, буду признателен за помощь в решении вопроса.
По теме из базы знаний
- Загрузка заказов из Excel в 1С:Бухгалтерию 8
- Загрузка заказа поставщику из печатной формы счет (XLS)
- Загрузка данных из Excel для 1С: Бухгалтерия предприятия 8
- Выгрузка - Загрузка заказов покупателей / счетов в УПП - EXCEL c историей по квартальным продажам
- Автоматическая обработка файлов по расписанию для загрузки номенклатуры из Excel. Универсальная обработка для запуска других связанных обработок - загрузка файла из Интернета по протоколу http(s), ftp. Доступно скачивание за стартмани.
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Описание = Новый ОписаниеОповещения("ЗакончитьВыборФайла", ЭтотОбъект);
НачатьПомещениеФайла(Описание,,,Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ЗакончитьВыборФайла(Результат, Адрес, Имя, ДопПараметры) Экспорт
Если Результат Тогда
ИмяФайла = Имя;
АдресХранения = Адрес;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗагрузку(Команда)
Оповещение = Новый ОписаниеОповещения("НачатьВыполнениеЗагрузки", ЭтаФорма);
ПоказатьВопрос(Оповещение, "Выполнить загрузку данных из файла """ + ИмяФайла + """ ?", РежимДиалогаВопрос.ДаНет, , , "Начало загрузки");
КонецПроцедуры
&НаКлиенте
Процедура НачатьВыполнениеЗагрузки(Результат, Параметры) Экспорт
Если НЕ Результат = КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
РезультатЗагрузки = ВыполнитьЗагрузкуНаСервере(АдресХранения);
Если ТипЗнч(РезультатЗагрузки) = Тип("Строка") Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = РезультатЗагрузки;
Сообщение.Поле = "ИмяФайла";
Сообщение.Сообщить();
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВыполнитьЗагрузкуНаСервере(АдресХранения)
Если Не ЭтоАдресВременногоХранилища(АдресХранения) Тогда
Возврат "Ошибка чтения файла";
КонецЕсли;
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранения);
ИмяФайла = ПолучитьИмяВременногоФайла(".xls");
ДвоичныеДанные.Записать(ИмяФайла);
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
УдалитьФайлы(ИмяФайла);
Если ТабличныйДокумент.Области.Количество() = 1 Тогда
ОбластьЛиста = ТабличныйДокумент.ПолучитьОбласть(ТабличныйДокумент.Области[0].Имя);
Иначе
Возврат "Ошибка чтения файла";
КонецЕсли;
///// ну дальше сами
КонецФункции
Показать&НаКлиенте
Процедура ВыполнитьЗагрузку(Команда)
Оповещение = Новый ОписаниеОповещения("НачатьВыполнениеЗагрузки", ЭтаФорма);
ПоказатьВопрос(Оповещение, "Выполнить загрузку данных из файла """ + ИмяФайла + """ ?", РежимДиалогаВопрос.ДаНет, , , "Начало загрузки");
КонецПроцедуры
&НаКлиенте
Процедура НачатьВыполнениеЗагрузки(Результат, Параметры) Экспорт
Если НЕ Результат = КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
РезультатЗагрузки = ВыполнитьЗагрузкуНаСервере(АдресХранения);
Если ТипЗнч(РезультатЗагрузки) = Тип("Строка") Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = РезультатЗагрузки;
Сообщение.Поле = "ИмяФайла";
Сообщение.Сообщить();
КонецЕсли;
КонецПроцедуры
ПоказатьФункция ВыполнитьЗагрузкуНаСервере(Файл)
Если Не ЭтоАдресВременногоХранилища(АдресХранения) Тогда
Возврат "Ошибка чтения файла";
КонецЕсли;
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранения);
ИмяФайла = ПолучитьИмяВременногоФайла(".xls");
ДвоичныеДанные.Записать(ИмяФайла);
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Показать
По поводу п.14 из ссылки (4) многие админы заводят новых пользователей и не заходят от их имени на сервер (и никакого десктопа не создается). Мне показывали создавать пользователей с десктопом сразу, даже если они им не будут пользоваться. Но это уже мелочи.
А в чем разница между" временное хранилище" и копирование в расширенную папку?
А в чем разница между" временное хранилище" и копирование в расширенную папку?
Прочитай на клиенте в ТабличныйДокумент, который передай на сервер для разбора.
Если xls дюже сложен: разбери xls на клиенте (например, в массив структур) - кинь массивом в сервер.
Смысла тащить файл на сервер нету: его ещё удалять потом придётся.
Если xls дюже сложен: разбери xls на клиенте (например, в массив структур) - кинь массивом в сервер.
Смысла тащить файл на сервер нету: его ещё удалять потом придётся.
Я ищу для бухгалтерии обработку, чтобы на основании списка счетов с датой, ИНН, наименованием и суммой в exls, создавались сразу несколько счетов от поставщика в 1с, групповое создание документов. Номенклатурная позиция одна. И то же но чтобы можно было создать накладные реализации на основании реестра.
Гораздо правильнее, не кидать файлы по сети и на шарить папки а использовать хранилище, для передачи данных между клиентом и сервером. Понятное дело вас не парят такие штуки как безопасность(файлы доступны всем а не только тем кто загружает), надежность(сисадмину(даже если это вы) не очевидно зачем нужна эта папка и шара может пропасть через полгода или при изменении настроек безопасноти или просто после обновления), но может сразу учиться делать правильно?
(22) я не отрицаю, что то что вы говорите, ТОЖЕ, верное решение, на текущий момент, да бы не переписывать бОльшую часть расширения, я делаю копипаст и затем удаление файла.
А с ПоместитьВоВременноеХранилище, я обязательно разберусь, просто вчера, мне не хватило мозгов понять как это написать и использовать....
А с ПоместитьВоВременноеХранилище, я обязательно разберусь, просто вчера, мне не хватило мозгов понять как это написать и использовать....
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот