0. DrAku1a 1303 26.10.11 08:40 Сейчас в теме

Как программисту быстро загрузить данные из Excel

Встала как-то разовая задача - загрузить данные из Excel в базу...
Идея не новая, на ИС имеются уже готовые подобные разработки, но предлагается сделать самостоятельно. Пригодится в будущем.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. murat_ 33 26.10.11 08:40 Сейчас в теме
А чем не устроила универсальная обработка с ИТС-диска "ЗагрузкаДанныхИзТабличногоДокумента" ?
Для разовых задач она самое то и писать ничего не нужно.
WanGoff; Eugeneer; Craig; +3 Ответить
5. Craig 236 02.11.11 08:15 Сейчас в теме
(1) Тоже поддерживаю. Обработка с диска ИТС ЗагрузкаДанныхИзТабличногоДокумента универсальна, там возможности куда больше чем в "простенькой" обработке написанной быстро на коленях.
7. MICK77 12 02.11.11 17:56 Сейчас в теме
Craig пишет:

(1) Тоже поддерживаю. Обработка с диска ИТС ЗагрузкаДанныхИзТабличногоДокумента универсальна, там возможности куда больше чем в "простенькой" обработке написанной быстро на коленях.

этой обработкой с диска можно загрузить только в 1 документ. а если надо их много?
Rustig; Karmerruk; b-dm; annak2980; +4 Ответить
10. 03.11.11 15:02 Сейчас в теме
(1) ей еще надо научить пользоваться пользователей. А тут можно просто написать простенькую обработку, научить пользователя в нее копировать данные и все.
11. murat_ 33 03.11.11 21:27 Сейчас в теме
(10) Автор вообще-то ясно указал "разовая задача" для "программиста", про повседневную работу пользователей речь здесь не шла.
2. DrAku1a 1303 26.10.11 08:57 Сейчас в теме
Устраивает, но порой проще и быстрее - написать самому.
3. dka80 16 26.10.11 09:25 Сейчас в теме
4. Attest 3 30.10.11 00:04 Сейчас в теме
6. kea35 02.11.11 17:53 Сейчас в теме
Обработка имеет шанс на жизнь
8. vikorn 03.11.11 13:11 Сейчас в теме
9. 03.11.11 15:01 Сейчас в теме
Вообще-то боян, но некоторые не знают, что так действительно удобнее.
Не нужно вводить имя файла.
12. Andrusha1 04.11.11 11:52 Сейчас в теме
Прикольно, идея копировать в буфер не приходила в голову. Хотя все оригинальное, просто.
13. westx 07.11.11 00:15 Сейчас в теме
Да, как-то не дошло до мозга о такой возможности, спасибо автору.
14. Alexey26 2 09.11.11 22:39 Сейчас в теме
15. petrovaUL 14.11.11 08:28 Сейчас в теме
16. Fruit83 28 19.11.11 00:10 Сейчас в теме
Спасибо за статью, для меня это сейчас самое то!:)
murat_ и Craig разница между обработкой и публикацией все-таки есть. :)
17. maloi_a 21.11.11 10:41 Сейчас в теме
Замечание.
Поправьте в примере "КонечнаяСтрока = ЭлементыФормы.ТабДок . ВысотаТаблицы ;"
на "КонечнаяСтрока = ТабДок.ВысотаТаблицы;"
18. DrAku1a 1303 21.11.11 10:55 Сейчас в теме
(17) Хорошо. Хотя оба варианта работоспособны.
19. annak2980 21.11.11 13:14 Сейчас в теме
Спасибо автору за интересную идею, описанную полностью в виде статьи
20. GTV 23.11.11 08:42 Сейчас в теме
А мне понравилось! Автор - молодец!
21. Fruit83 28 24.11.11 13:21 Сейчас в теме
У меня проблема возникла. Сперва система ругалась на СуммаВзаиморасчетов = Число(СуммаВзаиморасчетов); , писала что не может преобразовать к типу число. Теперь просто значение не присваивается.
22. DrAku1a 1303 24.11.11 18:20 Сейчас в теме
(21) Используйте СуммаВзаиморасчетов = Число(СокрЛП(СуммаВзаиморасчетов));, кроме того нужно проверять что сумма взаиморасчетов - не пустая строка, а также, если вы перекидываете данные из отчетов 8-ки - то учтите, что по-умолчанию 8-ка вставляет разделитель (пробел) между триадами числа, например код А = Число(Строка(1000)); вызовет в 8-ке ошибку.

Функция ВЧисло(знач Текст)
  ДопустимыеЗнаки = "0123456789,-";
  Текст = СокрЛП(""+Текст);
  Ответ = "";
  Для сч = 1 по СтрДлина(Текст) Цикл
    Символ = Сред(Текст, сч, 1);
    Если Найти(ДопустимыеЗнаки, Символ)>0 Тогда
      Ответ = Ответ + Символ;
    КонецЕсли;
  КонецЦикла
  Возврат ?(Ответ="", 0, Число(Ответ));
КонецФункции
Показать
23. Fruit83 28 24.11.11 19:19 Сейчас в теме
СуммаВзаиморасчетов = Число(СокрЛП(СуммаВзаиморасчетов)) не помогло, а вот функция помогла. Добавил ее в форму и вызвал СуммаВзаиморасчетов = ВЧисло(СуммаВзаиморасчетов);
Спасибо!
24. Fruit83 28 24.11.11 19:41 Сейчас в теме
Чем отличается Текст = СокрЛП(""+Текст) от Текст = СокрЛП(Текст)?
25. DrAku1a 1303 25.11.11 02:49 Сейчас в теме
(24) По-сути ничем, но есть один ньюанс:

ИМХО, проверено методом тыка: 1С при анализе выражений использует правило сложения переменных вариантного типа, как в Basic (результат выражения имеет такой же тип, как первая переменная (операнд) выражения, все остальные выражения приводятся к типу первого операнда).

Т.е. конструкция ""+Текст - это указание 1С, что если Текст не является строкой - то его нужно преобразовать в строку. Хотя 1С должна сама делать такое преобразование внутри СокрЛП() - я на это не полагаюсь и лишний раз перестраховываюсь от ошибок при выполнении кода.
26. Fruit83 28 25.11.11 23:21 Сейчас в теме
А как обойти обойти проблему контроля уникальности кодов? При загрузке справочника их надо указывать, но, если идет совпадение по кодам, загрузка прерывается...Мне сейчас приходится страховаться и указывать коды, которые наверняка не встретятся в справочнике.
27. DrAku1a 1303 26.11.11 04:06 Сейчас в теме
(26) Сделайте предварительную выборку по справочнику (до цикла загрузки) на предмет максимального кода - можно запросом, можно вручную. Поместите в отдельную переменную. Затем при добавлении нового значения в справочник - увеличивайте эту переменную на 1 и присваивайте код новому элементу.
28. nurislam 17.12.11 14:37 Сейчас в теме
Спасибо.Иногда нужна такая.
29. Koles 28.12.11 10:04 Сейчас в теме
Интересный приемчик. Спасибо.
30. Murom 28.12.11 11:00 Сейчас в теме
Очень интересный прием. Да и правда быстро и удобно.
Но я по-старинке пользуюсь универсальной "ЗагрузкаДанныхИзТабличногоДокумента". Хотя идея имеет место на жизнь. И еще удобно, если у клиента надо что-то загрузить, а "ЗагрузкаДанныхИзТабличногоДокумента" нет под рукой, то можно очень быстро набросать такую обработочку.
31. baton_pk 396 28.12.11 11:24 Сейчас в теме
Да! Определённо наш метод!

Ещё можно табличный документ засунуть в макет внешней обработки и брать данные оттуда. Я использую это, когда мне надо одни и те же данные загрузить в пару тестовых баз по паре десятков раз, а потом отправить клиенту (ну или своими руками) для загрузки в рабочую. Единоразовый копипаст и дальше всё уже решается нажатием одной кнопки - товарищ Бух это любит.
32. Fruit83 28 10.01.12 12:01 Сейчас в теме
(31) baton_pk, не могли бы вы по-подробнее рассказать о том, как засунуть макет внешней обработки?
33. baton_pk 396 10.01.12 12:07 Сейчас в теме
(32) Fruit83!
Всё то же самое:
во внешней обработке добавляем новый макет - табличный документ и копипастом из Excel вставляем табличку в макет.
Потом в коде просто вызываем ПолучитьМакет("НашаТабличка") и пробегаемся по табличке.

Можно посмотреть типовые - заполнение первоначальных данных в пустой базе или подбор из классификатора валют, например.
34. DrAku1a 1303 10.01.12 16:54 Сейчас в теме
(33) Можно обойтись и без макета - а вставить данные из Excel в поле табличного документа на форме - в режиме конфигуратора. И они сохранятся с обработкой.
35. baton_pk 396 10.01.12 17:13 Сейчас в теме
(34) DrAku1a.
Можно, но оно тогда наружу торчать будет. В моих случаях хотелось всё это дело скрыть: таблиц для загрузки было несколько да и на форме были другие элементы, более нужные пользователю.
А так, да, Ваш вариант на все 100% справедлив.
36. nshrek 8 23.01.12 23:25 Сейчас в теме
спасибо, хоть и полно в инете аналогичных обработок но думаю пригодится и эта.
37. ivn75 1 23.01.12 23:30 Сейчас в теме
Смысл темы? В инете полно примеров решений загрузки из Excel при помощи DCOM объектов, при помощи которых можно не только загружать из Excel и Open office, но и выгрузки обратно с форматированием, проставлением формул и гиперссылок.
38. DrAku1a 1303 24.01.12 01:58 Сейчас в теме
(37) Чтобы использовать имеющиеся в инете примеры - нужно вникать в чужой код, возможно - читать документацию... и еще - немао подводных камней встретится... Правда, есть у меня в арсенале функция, которая Excel-файл через OLE считывает в таблицу значений - но пользуюсь ей редко. А так - не выходя из комфортной среды 1С, без изучения доп. материалов можно сделать загрузку данных. Быстро просто и удобно.
42. Bezeus 11.06.12 07:06 Сейчас в теме
(38) Вот именно из таких редко используемых функций и строятся "программерские запасы".
39. BalVlad 24.01.12 22:07 Сейчас в теме
40. Yury1001 1432 24.01.12 22:29 Сейчас в теме
Мысль верная (идея рабочая), дубовая (надёжная), помнится копирование документов между базами так писал, и даже из 8 в 7.7 было. Только я в многострочную строку вставлял, потом Список.ИзСтрокиСРазделителями() и вот готовое соответствие так сказать, пользуй не хочу.
+
41. sai-2010 07.02.12 15:30 Сейчас в теме
Спасибо автору.
Очень четко и толково все написал.
Действительно выгрузка и загрузка справочников, это часто возникающая задача.
Надо срочно и именнно этот справочник.
Эта статья очень помогла мне.
Огромное спасибо.
Удачи.
43. vladismi 161 12.07.12 09:36 Сейчас в теме
Отличная идея. А то, как правило, начинаешь вспоминать, как подключиться к Ёкселю... :)
44. olezhe 20 09.10.12 16:00 Сейчас в теме
Немедля использовал для загрузки множества документов из единой таблицы. Плюсанул. Спасибо за подсказку.
45. ledogora 7 12.11.12 21:26 Сейчас в теме
Полезная статья.Спасибо.
46. wbazil 123 08.07.13 11:56 Сейчас в теме
обычно копировал подключение к Excel из другой обработки, но часто бывало что потом в процессе отладки этих екселей плодиться много, приходиться прибивать процессы, а тут красиво и элегантно.
Спасибо за идею!
47. WanGoff 130 01.08.13 00:23 Сейчас в теме
Ну как-то слишком уж несерьезно, на мой взгляд. Статья для тех, кто второй месяц занимается 1С.
48. DrAku1a 1303 01.08.13 02:07 Сейчас в теме
(47) Да, но... Посмотри сколько народу сказали что классная идея!..
49. WanGoff 130 01.08.13 03:54 Сейчас в теме
(48) Сложно спорить. Видимо, многим и правда помогло. Ну что ж, и то хорошо.
50. Ele1234567 23.12.13 10:28 Сейчас в теме
Все зависит от решаемой задачи. Но стоит взять на заметку
51. Dionisy_nb 14.02.14 12:15 Сейчас в теме
Отличная идея, если нужно что-то одноразовое. Или редкоиспользуемое.
52. Andrey@ 16.03.14 13:43 Сейчас в теме
Как вариант можно использовать при разовой загрузке данных, а то и настроить загрузку номенклатуры из накладной в Excel от поставщика.Спасибо.
53. SurmachAU 19 10.01.18 10:48 Сейчас в теме
Спасибо! Даже сейчас ваша статься помогла. Но вот у меня вопрос, так получилось, что при загрузке не считывает 1-й столбец, т.е. постоянно надо контролировать, чтобы данные не по подали в первый столбец.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Специалист техподдержки 1С
Москва
зарплата от 80 000 руб. до 120 000 руб.
Полный день

Системный аналитик 1С
Москва
зарплата от 80 000 руб. до 120 000 руб.
Полный день

Программист 1С
Москва
зарплата от 100 000 руб. до 200 000 руб.
Полный день

Тестировщик 1С
Москва
зарплата от 70 000 руб.
Полный день

Программист 1С
Новосибирск
зарплата от 50 000 руб. до 80 000 руб.
Полный день