Загрузка заказов из excel

1. M_A_D 184 25.10.20 18:26 Сейчас в теме
Есть расширение, в нем я загружаю данные из Excel но встретился с ошибкой когда файл расположен на
клиентской "тачке", а 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!'"));
	КонецЕсли;
	
	
КонецПроцедуры
Показать


как пофиксить эту тему ваще не понимаю, буду признателен за помощь в решении вопроса.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
19. VladimirB 17 25.10.20 19:27 Сейчас в теме
(17) А папка расшаренная на сервере должна быть
12. VladimirB 17 25.10.20 19:02 Сейчас в теме +1 $m
(9) КопироватьФайл(Путь+ВыбранныйФайл, РасшареннаяПапка+"ВыбранныйФайл");
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
14. Torin 817 25.10.20 19:07 Сейчас в теме
(1)
&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	СтандартнаяОбработка	= Ложь;
	
	Описание	= Новый ОписаниеОповещения("ЗакончитьВыборФайла", ЭтотОбъект);
	НачатьПомещениеФайла(Описание,,,Истина, УникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура ЗакончитьВыборФайла(Результат, Адрес, Имя, ДопПараметры) Экспорт 
	Если Результат Тогда 
		
		ИмяФайла		= Имя;
		АдресХранения	= Адрес;
		
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗагрузку(Команда)
	
	Оповещение	= Новый ОписаниеОповещения("НачатьВыполнениеЗагрузки", ЭтаФорма);
	ПоказатьВопрос(Оповещение, "Выполнить загрузку данных из файла """ + ИмяФайла + """ ?", РежимДиалогаВопрос.ДаНет, , , "Начало загрузки");
	
КонецПроцедуры

&НаКлиенте
Процедура НачатьВыполнениеЗагрузки(Результат, Параметры) Экспорт
	
	Если НЕ Результат = КодВозвратаДиалога.Да Тогда
		Возврат;
	КонецЕсли;
	
	РезультатЗагрузки	= ВыполнитьЗагрузкуНаСервере(АдресХранения);
	
	Если ТипЗнч(РезультатЗагрузки) = Тип("Строка") Тогда 
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = РезультатЗагрузки;
		Сообщение.Поле	= "ИмяФайла";
		Сообщение.Сообщить();
	КонецЕсли;
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ВыполнитьЗагрузкуНаСервере(АдресХранения)
	
	Если Не ЭтоАдресВременногоХранилища(АдресХранения) Тогда
		Возврат "Ошибка чтения файла";
	КонецЕсли;
	
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранения);
	ИмяФайла       = ПолучитьИмяВременногоФайла(".xls");
	
	ДвоичныеДанные.Записать(ИмяФайла);
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);	
	
	УдалитьФайлы(ИмяФайла);
	
	Если ТабличныйДокумент.Области.Количество() = 1 Тогда
		ОбластьЛиста = ТабличныйДокумент.ПолучитьОбласть(ТабличныйДокумент.Области[0].Имя);
	Иначе
		Возврат "Ошибка чтения файла";
	КонецЕсли;

///// ну дальше сами
КонецФункции
Показать
user1464234; +1 Ответить
2. VladimirB 17 25.10.20 18:40 Сейчас в теме
А если скопировать файл на сервер?
5. M_A_D 184 25.10.20 18:47 Сейчас в теме
(2)да это самый просто способ, но если юзеры ноют, что им приходится скачивать и потом перекидывать еще в папку на сервере...
6. VladimirB 17 25.10.20 18:48 Сейчас в теме
(5) Так можно его самому скопировать в сетевую расшаренную папку после диалога выбора
8. M_A_D 184 25.10.20 18:52 Сейчас в теме
(6)а вот это не совсем понятно. Вы предлагаете программно копировать файл в расшареный каталог?
Можно по подробнее, что и как сделать?
3. user1464234 25.10.20 18:41 Сейчас в теме
Теоретически можно прочитать на клиенте и загрузить данные в массив структур, а массив структур передается на сервер.
4. VladimirB 17 25.10.20 18:45 Сейчас в теме
10. M_A_D 184 25.10.20 18:53 Сейчас в теме
(4) эти настройки выполнены, не помогает)))
7. VladimirB 17 25.10.20 18:51 Сейчас в теме
Сервер локальный каталог не видит
'C:\Users\Gordeev\Desktop\Новая папка\'
9. M_A_D 184 25.10.20 18:53 Сейчас в теме
(7)да, это я понимаю, потому и спрашиваю, что не знаю как программно реализовать...
12. VladimirB 17 25.10.20 19:02 Сейчас в теме +1 $m
(9) КопироватьФайл(Путь+ВыбранныйФайл, РасшареннаяПапка+"ВыбранныйФайл");
15. VladimirB 17 25.10.20 19:14 Сейчас в теме
(12)
Лучше использовать с оповещением, чтобы сервер уже после загрузки начал работатть с файлом
НачатьКопированиеФайла(<ОписаниеОповещения>, <ИмяФайлаИсточника>, <ИмяФайлаПриемника>)
17. M_A_D 184 25.10.20 19:26 Сейчас в теме
(12) я по синтакспомощнику прочитал, но выдает ошибку при копировании...
Ведь при копировании нужно указать путь до файла, но Сервер не видит этот путь, т.к. он на локальной тачке)))
11. Torin 817 25.10.20 18:54 Сейчас в теме
&НаКлиенте
Процедура ВыполнитьЗагрузку(Команда)
	
	Оповещение	= Новый ОписаниеОповещения("НачатьВыполнениеЗагрузки", ЭтаФорма);
	ПоказатьВопрос(Оповещение, "Выполнить загрузку данных из файла """ + ИмяФайла + """ ?", РежимДиалогаВопрос.ДаНет, , , "Начало загрузки");
	
КонецПроцедуры


&НаКлиенте
Процедура НачатьВыполнениеЗагрузки(Результат, Параметры) Экспорт
	
	Если НЕ Результат = КодВозвратаДиалога.Да Тогда
		Возврат;
	КонецЕсли;
	
	РезультатЗагрузки	= ВыполнитьЗагрузкуНаСервере(АдресХранения);
	
	Если ТипЗнч(РезультатЗагрузки) = Тип("Строка") Тогда 
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = РезультатЗагрузки;
		Сообщение.Поле	= "ИмяФайла";
		Сообщение.Сообщить();
	КонецЕсли;
	
КонецПроцедуры

Показать

Функция ВыполнитьЗагрузкуНаСервере(Файл)
	
	Если Не ЭтоАдресВременногоХранилища(АдресХранения) Тогда
		Возврат "Ошибка чтения файла";
	КонецЕсли;
	
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранения);
	ИмяФайла       = ПолучитьИмяВременногоФайла(".xls");
	
	ДвоичныеДанные.Записать(ИмяФайла);
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Показать
user1464234; +1 Ответить
13. user1464234 25.10.20 19:02 Сейчас в теме
По поводу п.14 из ссылки (4) многие админы заводят новых пользователей и не заходят от их имени на сервер (и никакого десктопа не создается). Мне показывали создавать пользователей с десктопом сразу, даже если они им не будут пользоваться. Но это уже мелочи.
А в чем разница между" временное хранилище" и копирование в расширенную папку?
16. dehro 7 25.10.20 19:22 Сейчас в теме
Прочитай на клиенте в ТабличныйДокумент, который передай на сервер для разбора.
Если xls дюже сложен: разбери xls на клиенте (например, в массив структур) - кинь массивом в сервер.
Смысла тащить файл на сервер нету: его ещё удалять потом придётся.
18. VladimirB 17 25.10.20 19:27 Сейчас в теме
(17) Ты от клиента копируй
19. VladimirB 17 25.10.20 19:27 Сейчас в теме
(17) А папка расшаренная на сервере должна быть
20. M_A_D 184 25.10.20 19:33 Сейчас в теме
(19)вы правы, выбрал не ту папку, уже мозг плывет)))
Сработало!)))
21. lvp1976 26.10.20 01:07 Сейчас в теме
Я ищу для бухгалтерии обработку, чтобы на основании списка счетов с датой, ИНН, наименованием и суммой в exls, создавались сразу несколько счетов от поставщика в 1с, групповое создание документов. Номенклатурная позиция одна. И то же но чтобы можно было создать накладные реализации на основании реестра.
22. webester 26 26.10.20 05:43 Сейчас в теме
Гораздо правильнее, не кидать файлы по сети и на шарить папки а использовать хранилище, для передачи данных между клиентом и сервером. Понятное дело вас не парят такие штуки как безопасность(файлы доступны всем а не только тем кто загружает), надежность(сисадмину(даже если это вы) не очевидно зачем нужна эта папка и шара может пропасть через полгода или при изменении настроек безопасноти или просто после обновления), но может сразу учиться делать правильно?
23. M_A_D 184 26.10.20 09:02 Сейчас в теме
(22) я не отрицаю, что то что вы говорите, ТОЖЕ, верное решение, на текущий момент, да бы не переписывать бОльшую часть расширения, я делаю копипаст и затем удаление файла.
А с ПоместитьВоВременноеХранилище, я обязательно разберусь, просто вчера, мне не хватило мозгов понять как это написать и использовать....
Оставьте свое сообщение

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