|
Нужна процедура которая импортирует из ексельной таблицы в базу | ☑ | ||
---|---|---|---|---|
0
lytzevm
08.09.11
✎
16:17
|
Нужна процедура которая импортирует из ексельной таблицы в базу инфу.
Т.е. Есть импортированная таблица ексель - из этой таблицы надо выбрать и записать в базу, помогите плиз.Процедура импорта есть, вот не могу написать что-бы с самой импортированной таблицы заливалась в базу инфа. Помогите плизз ! |
|||
1
aleks-id
08.09.11
✎
16:18
|
пять тыщщ
|
|||
2
mikecool
08.09.11
✎
16:18
|
оо , какой то разрыв мозга
процедура есть, но она не работает? |
|||
3
Axel2009
08.09.11
✎
16:18
|
процедура импорта чего есть то? если не работает ничего
|
|||
4
mikecool
08.09.11
✎
16:19
|
4500руб
|
|||
5
zbv
08.09.11
✎
16:19
|
а что там сложного ?
- Перебераешь строки таблицы - создаешь нужные объекты - заполняешь нужные реквизиты - записываешь изменения |
|||
6
Любопытная
08.09.11
✎
16:19
|
непонятно... обработок таких вагон и маленькая тележечка на инфостарте, например. Найди и посмотри
|
|||
7
Armando
08.09.11
✎
16:19
|
На диске ИТС: загрузка из табличного документа
|
|||
8
lxs
08.09.11
✎
16:20
|
xl = ПолучитьCOMОбъект(<Полный путь к файлу>);
КоличествоСтрок = xl.ActiveSheet.UsedRange.Rows.Count(); Для НомерСтроки = 1 по КоличествоСтрок Цикл Значение = "" + СокрЛП(xl.ActiveSheet.Cells(НомерСтроки, НомерКолонки).Value); КонецЦикла; |
|||
9
Maxus43
08.09.11
✎
16:29
|
Пример:
Док = ПолучитьCOMОбъект(Путь + "ценыконкурентов.xls"); КоличествоСтраниц = 2; Для ТекНомер = 1 По КоличествоСтраниц Цикл Контрагент = Док.Sheets(ТекНомер).Cells(1,1).Value; Товар = Док.Sheets(ТекНомер).Cells(2,2).Value; Цена = Док.Sheets(ТекНомер).Cells(2,3).Value; счСтроки = 3; Сообщить(Строка(Товар) + "-" + Строка(Цена)); Пока СокрЛП(Товар) <> "" Цикл // можно использовать другой признак // окончания данных на листе Товар = Док.Sheets(ТекНомер).Cells(СчСтроки,2).Value; Цена = Док.Sheets(ТекНомер).Cells(СчСтроки,3).Value; Сообщить(Строка(Товар) + "-" + Строка(Цена)); счСтроки = счСтроки + 1; КонецЦикла; КонецЦикла; Док.Application.Quit(); (с) шаблоны с курсов |
|||
10
aleks-id
08.09.11
✎
16:34
|
(4) жадный демпингёр :))
|
|||
11
lytzevm
08.09.11
✎
16:34
|
С этим я справился теперь, нужна процедура загрузка из табличного документа в справочник
|
|||
12
Ненавижу 1С
гуру
08.09.11
✎
16:35
|
(11) "из табличного документа в справочник"
то есть вместо того чтоб сразу в справочник вы решили вначале в табличный документ? однако |
|||
13
CepeLLlka
08.09.11
✎
16:37
|
(12)Может у них лицензия на 1 одно рабочее место :) А справочник заполняет другое физ лицо :)
|
|||
14
lytzevm
08.09.11
✎
16:37
|
я импортировал в 1с таблицу на отдельной форме, теперь мне надо из этой таблицы загрузить данные в справочник
|
|||
15
Ненавижу 1С
гуру
08.09.11
✎
16:38
|
1000 рублей
|
|||
16
aleks-id
08.09.11
✎
16:38
|
(15) и ты (10) :)))
|
|||
17
Eugeneer
08.09.11
✎
16:39
|
||||
18
Eugeneer
08.09.11
✎
16:39
|
Заметьте - я не демпингую. Если хотите заплатить больше - ограничений не ставлю.
|
|||
19
Ненавижу 1С
гуру
08.09.11
✎
16:40
|
(18) молодец, хоть и больной
|
|||
20
aleks-id
08.09.11
✎
16:40
|
(18) а ты просто жадный хДД
|
|||
21
shamannk
08.09.11
✎
16:47
|
10т.р за 6500 (17) отдам
|
|||
22
lytzevm
08.09.11
✎
16:49
|
вы не поняли, мне надо её сделать что-бы не было ни каких настроек, прогу я бесплатно скачал уже, но прога неподашла потому что будут пользоваться обычные юзеры !
|
|||
23
Ненавижу 1С
гуру
08.09.11
✎
16:50
|
(22) какие настройки? деньги давай! ))
|
|||
24
Любопытная
08.09.11
✎
16:50
|
ну так грузи. Читаешь данные построчно из файла и записываешь их реквизитами в свой справочник. Чего непонятно-то?
|
|||
25
aleks-id
08.09.11
✎
16:51
|
(24) тсссс... не отнимай наш хлеб :)
|
|||
26
CyberDream
08.09.11
✎
16:52
|
лана.... 500 рублей и даю вводную
|
|||
27
lytzevm
08.09.11
✎
16:52
|
Ага а если их там 2000, и это надо делать через день ))))
|
|||
28
lytzevm
08.09.11
✎
16:53
|
CyberDream приедешь на Украину дам денег )))
|
|||
29
CyberDream
08.09.11
✎
16:53
|
(27) я не понимаю в чем проблема? ты хто будешь по специальности?
|
|||
30
CyberDream
08.09.11
✎
16:54
|
(28) я и говорил про 500 украинских денег
|
|||
31
aleks-id
08.09.11
✎
16:55
|
500*15(если через день).... заманчиво ))
|
|||
32
shamannk
08.09.11
✎
16:55
|
(30) У них есть деньги?
|
|||
33
Александр_
Тверь 08.09.11
✎
16:56
|
<code>
// Открывает диалог выбора Excel файла // или пустую строку, если ничего не выбрано // Параметры: Фильт - фильтр диалога выбора файла // Функция ЗапроситьПолноеИмяЗагружаемогоФайлаExcel( ) Экспорт РезультатФункции = ""; // отобразим диалог выбора файла ДиалогВыбораФайла=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбораФайла.МножественныйВыбор=ложь; ДиалогВыбораФайла.Фильтр = "Таблица Excell(*.xls)|*.xls"; Если ДиалогВыбораФайла.Выбрать() Тогда РезультатФункции = ДиалогВыбораФайла.ПолноеИмяФайла; КонецЕсли; Возврат РезультатФункции; КонецФункции ////////////////////////////////////////////////////////////////////////////////////////////// // ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ // загружает указанный в параметрах лист файла в таблицу значений, для каждой колонки // присваиваются именя вида Колонка1, Колонка2 Функция ЗагрузитьExcelФайлВТаблицу(ПолноеИмяЗагружаемогоФайла, НомерЛиста = 1, ПодготовитьТаблицу = истина) Экспорт ТаблицаРезультат = новый ТаблицаЗначений; // Excel может быть не установлен Попытка Состояние("Создаем подключение к Excel"); ТаблицаExcel = Новый COMОбъект("Excel.Application"); ТаблицаExcel.Workbooks.Open(ПолноеИмяЗагружаемогоФайла); Исключение Сообщить("Ошибка загрузки файла! Возможно у Вас не установлен Excel",СтатусСообщения.Важное); Возврат ТаблицаРезультат; КонецПопытки; Состояние(""); // если нет листов в фале, то и загружать нечего Если ТаблицаExcel.Worksheets.Count() = 0 Тогда Сообщить("В файле не найдена информация для загрузки.",СтатусСообщения.Важное); ТаблицаExcel.Quit(); возврат ТаблицаРезультат; КонецЕсли; Лист = ТаблицаExcel.Worksheets(НомерЛиста); ТаблицаExcel.WorkSheets(НомерЛиста).Activate(); КоличествоКолонокНаЛисте = ТаблицаExcel.ActiveSheet.UsedRange.Columns.Count; КоличествоСтрокНаЛисте = ТаблицаExcel.ActiveSheet.UsedRange.Rows.Count; // если нечего загружать Если КоличествоКолонокНаЛисте = 0 или КоличествоСтрокНаЛисте = 0 Тогда Сообщить("В файле не найдена информация для загрузки.",СтатусСообщения.Важное); ТаблицаExcel.Quit(); возврат ТаблицаРезультат; КонецЕсли; // добавим требуемое количество колонок для загрузки листа файла Для НомерКолонки = 1 по КоличествоКолонокНаЛисте Цикл ТаблицаРезультат.Колонки.Добавить("Колонка"+НомерКолонки); КонецЦикла; Для ТекущийНомерСтроки = 1 по КоличествоСтрокНаЛисте Цикл НСтрока = ТаблицаРезультат.Добавить(); Для ТекущийНомерКолонки = 1 по КоличествоКолонокНаЛисте Цикл НСтрока["Колонка"+ТекущийНомерКолонки] = Лист.Cells(ТекущийНомерСтроки,ТекущийНомерКолонки).Text; КонецЦикла; КонецЦикла; Если ПодготовитьТаблицу Тогда // подготовим таблицу к использованию УдалитьПустыеСтрокиВТаблице(ТаблицаРезультат); НазначитьИменаКолонокТаблицыПоСтроке(ТаблицаРезультат); КонецЕсли; ТаблицаExcel.Quit(); возврат ТаблицаРезультат; КонецФункции // процедура устанавливает имена колонок таблицы по данным указанной строки, строку после удаляет // Процедура НазначитьИменаКолонокТаблицыПоСтроке(Таблица,НомерСтроки = 0) Экспорт Если Таблица.количество() <= НомерСтроки Тогда // строк меньше чем заданый номер строки с именами колонок возврат; КонецЕсли; Для каждого Колонка из Таблица.Колонки Цикл НовоеИмя = СформироватьДопустимоеИмя(Таблица[НомерСтроки][Колонка.имя] ); //если это имя еще не используется Если Таблица.Колонки.Найти(НовоеИмя) = неопределено Тогда Колонка.имя = НовоеИмя; Иначе // попробуем сгенирировать новое имя Для индекс = 1 по 100 Цикл тестовоеИмя = НовоеИмя +"_"+ Строка(индекс); Если Таблица.Колонки.Найти(тестовоеИмя) = неопределено Тогда Колонка.имя = тестовоеИмя; прервать; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; // удалим строку донор имен Таблица.удалить(НомерСтроки); КонецПроцедуры ////////////////////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ // если в строке все значения не заполнены - удаляет строку Процедура УдалитьПустыеСтрокиВТаблице(Таблица) НомерТекущейСтроки = 0; Пока НомерТекущейСтроки < Таблица.количество() Цикл ПустаяСтрока = истина; Для каждого Колонка из Таблица.колонки Цикл Если ЗначениеЗаполнено(Таблица[НомерТекущейСтроки][Колонка.Имя]) Тогда ПустаяСтрока = ложь; прервать; КонецЕсли; КонецЦикла; Если ПустаяСтрока Тогда Таблица.удалить(НомерТекущейСтроки); Иначе НомерТекущейСтроки = НомерТекущейСтроки + 1; КонецЕсли; КонецЦикла; КонецПроцедуры ////////////////////////////////////////////////////////////////////////////////////////////// // // Функция СформироватьДопустимоеИмя // // Описание: Функция удаляет из строки символы которые не могут быть использованны // в именах // // Параметры (название, тип, дифференцированное значение) // Строка - строка // Возвращаемое значение: // Строка. Функция СформироватьДопустимоеИмя(Строка) Результат = Строка; СтрокаДопустимыхСимволов = "_йцукенгшщзхфывапролджэячсмитбюqwertyuiopasdfghjklzxcvbnmьъ"; ДлиннаСтроки = СтрДлина(Строка); НомерСимвола = 1; Пока НомерСимвола <= ДлиннаСтроки Цикл ОбрабатываемыйСимвол = Сред(Строка,НомерСимвола,1); Если Найти(СтрокаДопустимыхСимволов,НРег(ОбрабатываемыйСимвол)) = 0 Тогда // заменим не правильный символ на вспомогательный Строка = СтрЗаменить(Строка,ОбрабатываемыйСимвол,"!"); КонецЕсли; НомерСимвола = НомерСимвола + 1; КонецЦикла; // удалим вспомогательные символы Результат = СтрЗаменить(Строка,"!",""); возврат Результат; КонецФункции//СформироватьДопустимоеИмя </code> |
|||
34
CyberDream
08.09.11
✎
16:57
|
(32) Фу... ну зачем ты так меня обижаешь... не моя вина что я здесь родился и работаю...
|
|||
35
CyberDream
08.09.11
✎
16:57
|
(33) Вот это да... не думаю, что у автора хватит сил досмотреть до конца.
|
|||
36
Александр_
Тверь 08.09.11
✎
16:57
|
+(33) вызываешь
ЗагрузитьExcelФайлВТаблицу |
|||
37
Amra
08.09.11
✎
16:58
|
(33) А у автора xlxs с количеством строк больше 66 тысяч))
|
|||
38
Александр_
Тверь 08.09.11
✎
16:58
|
(35) а чего там смотреть?
ТаблицаЗначений = агрузитьExcelФайлВТаблицу(ЗапроситьПолноеИмяЗагружаемогоФайлаExcel()) вот и весь вызов. |
|||
39
lytzevm
08.09.11
✎
16:59
|
давай воднную, приедешь в Киев рассчитаюсь пивом, не 500 много
|
|||
40
Александр_
Тверь 08.09.11
✎
16:59
|
(37) э... а... в (0) этого нет ) а всю ветку не читал.
|
|||
41
ErrorEd88
08.09.11
✎
16:59
|
Я делаю так:
Процедура КнопкаВыполнитьНажатие(Кнопка) Если ЗначениеЗаполнено(ИмяФайла) Тогда НомерЛистаТипы = 1; Попытка ExcelТипы = новый COMОбъект("Excel.Application"); ФайлДанныхТипы = ExcelТипы.Workbooks.Open(ИмяФайла); Исключение КонецПопытки; ЗагрузкаТипы = ФайлДанныхТипы.Worksheets(НомерЛистаТипы).UsedRange; КоличествоСтрокЭкселеТипы = ФайлДанныхТипы.Worksheets(НомерЛистаТипы).UsedRange.Rows.Count; ExcelТипы.Sheets(НомерЛистаТипы).Select(); Для СтрТипы = НачСтр+1 По КонСтр Цикл Ткань = Справочники.Номенклатура.СоздатьЭлемент(); Наименование = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,2).Value)); НайденнаяТкань = Справочники.Номенклатура.НайтиПоНаименованию(Наименование); Если Не ЗначениеЗаполнено(НайденнаяТкань) И Наименование <> "" Тогда Ткань.Наименование = Наименование; Ткань.НаименованиеПолное = Наименование; Ткань.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Ткани"); Единица = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("м"); Ткань.БазоваяЕдиницаИзмерения = Единица; Ткань.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар"); Ткань.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС; Ткань.Записать(); КонецЕсли; КонецЦикла; ExcelТипы.ActiveWorkbook.Close(); КонецЕсли; КонецПроцедуры |
|||
42
Alexandr Puzakov
08.09.11
✎
17:00
|
Раз уж тут такая мода пошла, то за 500 рэ расскажу, где можно взять обработку ЗагрузкаДанныхИзТабличногоДокумента, еще за 500 рэ научу ей пользоваться, а еще за 1000 рэ помогу переписать ее так, чтобы пользователям оставалось только одну большую кнопку нажать :)
|
|||
43
aleks-id
08.09.11
✎
17:00
|
(33)ДлиннаСтроки - правильно писать ДлинаСтроки!!!
|
|||
44
Amra
08.09.11
✎
17:00
|
(40) Я стебанул, этого и в ветке нет))
|
|||
45
Александр_
Тверь 08.09.11
✎
17:00
|
(43) возможно )
|
|||
46
Deathless
08.09.11
✎
17:01
|
(0) Постучись в аську =)
|
|||
47
lytzevm
08.09.11
✎
17:04
|
А есть скайп ???
|
|||
48
lytzevm
08.09.11
✎
17:05
|
Deathless -могу постучаться в аську
|
|||
49
Deathless
08.09.11
✎
17:12
|
(48) добавил скайп в инфу
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |