Имя: Пароль:
1C
Обучение
Нужно написать обработку, которая загружала бы данные из excel файла.
, ,
0 kotosob
 
13.07.22
13:18
Требования:

Обработка должна быть написана на управляемых формах.
Пользователь выбирает excel файл (нужен отбор по расширениям .xls и .xlsx) и с какого листа в excel необходимо брать данные.
Количество загружаемых колонок может быть любым.
Пользователь задает новые наименования столбцов и типы загружаемых значений

подскажите пожалуйста как это реализовать
спасибо.
1 Amra
 
13.07.22
13:23
Шо, тестовое задание?)
2 Lama12
 
13.07.22
13:31
(0) Скачай с инфостарта
3 6awkup_true
 
13.07.22
13:32
1. Открыть конфигуратор
2. создать новую внешнюю обработку
3. создать форму обработки
4. создать реквизиты формы
5. написать логику выбора файла
6. написать логику обработки полученных данных
...
...
...
x*(n+1). PROFFIT

P.S. вопросов конкретных не прозвучало, на вопрос как реализовать ответ выше по тексту, все решение легко гуглится пошагово по мере возникновения вопросов
4 ads55
 
13.07.22
13:54
(0)
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать(Объект.ПутьКФайлуЭкселя); //вот здесь лежит твоя файл Экселя
    ОбластиТаб = ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы);
    Построитель = Новый ПостроительЗапроса;
    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластиТаб);  
    Построитель.Выполнить();
    ТЗ = Построитель.Результат.Выгрузить(); //вот здесь лежит твоя таблица, прочитанная их Экселя :)
5 Kassern
 
13.07.22
13:57
(4) ага, ТС бездумно это копирнет с словит, Отказано в доступе))
6 Kassern
 
13.07.22
13:57
*и словит
7 Lama12
 
13.07.22
13:57
(4) За такое он сразу получит неуд. Они этого еще не проходили. Сразу будет видно что писал не сам.
8 ads55
 
13.07.22
13:59
(5) без внятного ТЗ и результат такой же :)
Конечно словит.
9 Ryzeman
 
13.07.22
14:00
Я как сам вчерашний новичок сразу понимаю что если используется построительзпроса то это откуда-то слизано) Сейчас никто им не пишет и не учит, всё на СКД... Да и какой построитель запроса на клиенте?) А на сервере - (5)
10 ads55
 
13.07.22
14:02
(9) "слизано)" с тырнетов с этих, с ваших! УУУУ, неучи! :)
11 Vovan1975
 
13.07.22
14:02
(4) ага, а теперь внимательно читаем "и с какого листа в excel необходимо брать данные."
12 timurhv
 
13.07.22
14:04
(9) >Сейчас никто им не пишет и не учит
Я и раньше не учил и до сих пор не знаю, однако загрузку Excel из (4) использую. Также как и формирование xlsx с помощью xml и архива, работает в десятки/сотни раз быстрее.
13 ads55
 
13.07.22
14:04
(11) Да понятно все это. Думал ветка "пятничная", а потом посмотрел - тут так всё серьёзно! Простите меня, товарищи, я больше не буду.
14 ads55
 
13.07.22
14:06
(5) Кстати, на УФ, в толстом клиенте, в файловом варианте - не словит.
15 6awkup_true
 
13.07.22
14:08
(9) не обязательно. есть штук 5-6 разных способ загрузки их экселя. и все подробно описаны в инете. если это тестовое задание, то тут скорее всего будут ожидать чтение построчное через ком. врядли через чтение хмл(если уж не проходили построитель запроса)
16 KJlag
 
13.07.22
14:08
хм, вот сегодня как раз почти на эту же тему.
12-ый ответ.
Можно ли прочитать Excel через АДО без экселя?

впрочем там то же что и в (4)
17 6awkup_true
 
13.07.22
14:09
(14) а в серверном поймает ошибку, что файл не найден. потому что его сначала нужно с клиента положить во временное хранилище, а потом уже заново создать файл на сервере
18 ads55
 
13.07.22
14:14
(17) Да знаю я про сервер, я же уже покаялся...
19 NorthWind
 
13.07.22
14:14
(15) да ну, мне кажется, ком уже неактуален. Через табличный документ, но, может, без построителя, просто чтение из области.
20 6awkup_true
 
13.07.22
14:15
Вот еще вариант с минимумом кода через comsafearray. чтение по листам. но 1) должен быть эксель на компе, 2) должна быть зарегана компонента ком


&НаКлиенте
Процедура ПрочитатьФайл(Команда)

    Попытка
        ОбъектЕксель = Новый COMОбъект("Excel.Application");  
    Исключение
        Сообщить(НСтр("ru = 'Exсel не установлен на данном компьютере!'"));
        Возврат;
    КонецПопытки;
    
    СтруктураДанных = Новый Структура;
    СоответствиеДанных = Новый Соответствие;
    
    ОбъектКнига         = ОбъектЕксель.Application.WorkBooks.Open(ПутьКФайлу);
        
    Для каждого Лист Из ОбъектКнига.Sheets Цикл
        
        СоответствиеДанных.Вставить(Лист.Name,ПолучитьДанныеЛистаПоИмени(ОбъектКнига,Лист.Name));
    
    КонецЦикла;
    
    ОбъектКнига.Close(-1);
    ОбъектЕксель.Quit();

Конецфункции



&НаКлиенте
Функция ПолучитьДанныеЛистаПоИмени(WorkSheet,SheetName)
    
    Результат = Неопределено;
    
    Попытка
        Sheet        = WorkSheet.Sheets(SheetName);
        DataArray    = Новый COMSafeArray(Sheet.Usedrange().Value);
        Результат    = DataArray.Выгрузить();
    Исключение
    КонецПопытки;
    
    Возврат Результат;
    
КонецФункции
21 6awkup_true
 
13.07.22
14:17
(19) очень много видел поделок, которые работают именно через ком. может и легаси, но все таки писали и продолжают писать с его использованием
22 Kassern
 
13.07.22
14:18
(20) а потом бац и у ТС клиент на линуксе))
23 6awkup_true
 
13.07.22
14:19
(22) это уже скорее исключение из правил. чаще всего видел, что сервак на линухе, а вот клиенте на шиндовсе все таки. а вариант из (20) крутится исключительно на клиенте)
24 El_Duke
 
гуру
13.07.22
14:20
Кажись спамер пытается разводить наше многоуважаемое сообщество ... Я за бан
25 NorthWind
 
13.07.22
14:25
(21) comsafearray на самом деле неплохая тема, быстрая. Но ком-сервер экселя капризен. Бывает, ложится по непонятным причинам, и начинаются танцы с бубнами. Пару раз сталкивался с таким. В целом, когда наконец родили чтение через табличный документ - это был огромный вздох облегчения.
26 kubik_live
 
13.07.22
14:26
(20)
   ОбъектКнига         = ОбъектЕксель.Application.WorkBooks.Open(ПутьКФайлу);

Это в файловой сработает, в клиент-серверной нет...
27 Eugeneer
 
13.07.22
14:26
Пишите компоненту на Питоне которая читает любой эксель и возвращает ТЗ или ТабДоки. И все. Хоть виндовс, хоть линукс, хоть черт лысый
28 NorthWind
 
13.07.22
14:26
+ (25) это если еще забыть про то что люди юзают и LibreOffice, и Linux.
29 Eugeneer
 
13.07.22
14:26
(25) только читает оно половину форматов.
30 PLUT
 
13.07.22
14:27
(27) микросервис на GO
31 Eugeneer
 
13.07.22
14:29
(0) у тебя год уйдет на эту работу.
Мало того ты сейчас на стадии как читать.

А потом еще настраивать. А если листы разные с разной структурой. То и разные настройки на каждый лист.

И там пошло поехало. Итог будет такой что 1-2 месяца писать, еще год потом отлаживать.

Проще купить то что уже все это продумано и сделано. Вплоть до полностью автоматической работы с забором файлов с почты, ссылок, чтение XML и все прочее.

Мегалайт: Загрузка прайсов в 1С из Excel от А до Я
https://subsystems.ru/solutions/1c_excel/zagruzka_praysov_v_1s_iz_excel_csv_txt/
32 Eugeneer
 
13.07.22
14:30
Только я уже не загрузку продаю, а целый комплект вещей которые связаны с этой задачей. Там и отчеты и сравнение и куча другого функционала.
Мегавещь сделал!
33 6awkup_true
 
13.07.22
14:31
(31) цена в 45к? не проще ли купить унф за 5400 и взять универсальную обработку загрузки из нее?
34 Eugeneer
 
13.07.22
14:32
(33) ну если ты про стандартную говоришь то абсолютнол не знаешь как она работает. А работает она крайне отстойно
35 PLUT
 
13.07.22
14:33
(32) ну а что, вроде бы удовлетворяет требованиям из (0)

я щетаю надо брать!
36 6awkup_true
 
13.07.22
14:34
(34) за 40 сохраненных тыщ можно допилить ее под свои нужды. то что она так себе - никто не спорит, но тут и постановка задачи 1) простая и 2) скорее всего тестовая, а не прикладная. мож ТС вообще во франч стажером на 20к деревянных, а тут 3 зп отдать за лабораторку :D
37 Ryzeman
 
13.07.22
14:34
И правду говорят, среда - это маленькая пятница...
38 Eugeneer
 
13.07.22
14:35
стандартная это все равно что ничего. От слова совсем.

Ручная вставка колонок...
Ограничение колонок только тем что там есть. Никаких свойств, реквизитов и прочего - ничерта этого не будет.
Имеет только ограниченные поиски.
Многолистовые файлы читать не будет от слова никак, и тем более настраивать их.
Не отображает результаты. На одном из шагов тупо создаст номенкалатуру в базу хотя там не написано что эта кнопка ее создает.
39 Eugeneer
 
13.07.22
14:36
(35) могу поспорить что никак с требованиями (0) не сочитается.
а) многолистовые файлы
б) разное количество колонок и прочего. Это значит что вполне вероятно могут загружаться не только артикул и наименование. Еще есть бюывают характеристики из свойств, свойства номенклатуры.
Даже тупо производитель - это еще один справочник. И кстати во многих спецификах надо искать номенклатуру Артикул+Производитель.
40 Kassern
 
13.07.22
14:41
(24) ТС ходит по офигительно тонкому льду)
41 Eugeneer
 
13.07.22
14:41
А это значит что для начала нам нужно синхронизировать справочник производителей, до начала синхронизации номенклатуры.
Могут быть новые производители, которых нет.

А еще могут производители поставщика отличаться по названиям от производителей в базе.

И после синхронизации этого справочника только можно будет синхронизировать номенклатуру.

Еще отдельная тема это характеристики. как мы знаем еще один справочник. сложный - состоящий из свойств.
Только на одном этом можно встрять на месяц.

Еще допс свойства. Не забываем чсто свойства тоже все - наборы всякие, разные типы значений свойств - тоже куча справочников.

Ну и молжно еще сотню вещей причислять. Как изюминка на торте - загрузка картинок. А тут огого бывает.
Картинки могут быть вместе, а могут отдельными колонками - где то 2-3 где то 5 картинок.
Был случай когда все картинки файлы (поставщик СИМА_ЛЕНД) вообще имеют ОДНО название. а отличает их только ссылка (название подпапки разное).
По дной тиолько загрузке картинок в загрузку встроена еще одна целая обработка с настроками и ситуациями.

И везде контроль..контроль... сто раз контроль.
Так как загрузка - это любой баг загрузки приведет к плачевным результатам.
42 6awkup_true
 
13.07.22
14:43
(40) там сегодня у него тема есть еще про кредитный калькулятор. может там тоже поможем? :D