Имя: Пароль:
1C
1С v8
Нужна процедура которая импортирует из ексельной таблицы в базу
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) добавил скайп в инфу
Закон Брукера: Даже маленькая практика стоит большой теории.