Список форумов BOSSForum.RU - Форум. БОСС-Кадровик
Независимый форум, посвященный системе БОСС-Кадровик
и всему, что с ней связано
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Загрузка из Excel в Босс данных, большой объем
На страницу 1, 2, 3  След.
 
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> X-язык
Предыдущая тема :: Следующая тема  
Автор Сообщение
Константин



Зарегистрирован: 02.05.2012
Сообщения: 39
Откуда: Красноярск

СообщениеДобавлено: Пт Июл 20, 2012 08:39    Заголовок сообщения: Загрузка из Excel в Босс данных, большой объем Ответить с цитатой

Есть таблица с множеством столбцов.
1 - табельный номер
2- ФИО
...
25 - отпуск в днях

Подскажите как реализовать загрузку из Excel определенных столбцов в таблицу боса?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mike
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 07.04.2011
Сообщения: 255

СообщениеДобавлено: Пт Июл 20, 2012 09:40    Заголовок сообщения: Ответить с цитатой

Вот вам пример. Не буду объяснять что именно, думаю принцип и так понятен:
Код:
--Создаем таблицу для закачки данных
if object_id('tempdb..#user_table10') IS NOT NULL  THEN DROP TABLE #user_table10;

CREATE TABLE [dbo].[#user_table10](
            [id] INTEGER   IDENTITY(1,1),
            [_kod] [varchar](255) COLLATE Cyrillic_General_CI_AS NULL,
            [_fio] [varchar](255) COLLATE Cyrillic_General_CI_AS NULL,
            [_variant] [varchar](255) COLLATE Cyrillic_General_CI_AS NULL,
            [_variant_name] [varchar](255) COLLATE Cyrillic_General_CI_AS NULL,
            ) ON [PRIMARY];

-- Выбор файла
let FileName = '@@xFile(dlgopen ,"",0x8000c,"MS Excel Files (*.xls)|*.xls||","Выберите файл")';
if 'FileName' == '' then  {
 msg [\3Файл не выбран!]3,0x01;
 DESTROY @choose;
};

--Сохраняем данные из файла во временную таблицу
Execute xLogin{Open {DSN=for_xls;UID=1;PWD=1;},
scan #ss
SELECT *
FROM [filename].[Лист1$] NO_HINT
execute{
CON   @ss:1,@ss:2, @ss:3,@ss:4;

  execute xLogin{@@,
INSERT #user_table10
      (  _kod, _fio, _variant)             
VALUES  (@ss:1,@ss:2[''],@ss:4);
};       
};
};
CON;


Чтобы вот эта строчка работала, надо добавить odbc соединение одноименное(for_xls) к excel'ю:

Код:
Execute xLogin{Open {DSN=for_xls;UID=1;PWD=1;},
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Константин



Зарегистрирован: 02.05.2012
Сообщения: 39
Откуда: Красноярск

СообщениеДобавлено: Пт Июл 20, 2012 12:18    Заголовок сообщения: Ответить с цитатой

код очень похож на тот что необходим, но появились проблемы:

Если в ODBC не указать файл xls, то вылазит форма регистрации подключения к RP-Server, если указать то ошибка "Dynamic cursor not supported by ODBC driver".

Может в DSN надо создавать на основе особого драйвера БД?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mike
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 07.04.2011
Сообщения: 255

СообщениеДобавлено: Пт Июл 20, 2012 12:52    Заголовок сообщения: Ответить с цитатой

Да, надо указывать определенный драйвер.
Driver do Excel - так он называется.
В "настройках" нужно указать его имя "for_xls" (если не менять имя в процедуре), и указать любой файл эксель, в поле, где это требуется.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Константин



Зарегистрирован: 02.05.2012
Сообщения: 39
Откуда: Красноярск

СообщениеДобавлено: Пт Июл 20, 2012 13:07    Заголовок сообщения: Ответить с цитатой

тогда ошибка появляется:"Dynamic cursor not supported by ODBC driver"

при том ругается на строки:

Код:
scan @ss SELECT * FROM [filename].[Лист1$] NO_HINT execute{
   CON @ss:1,@ss:2, @ss:3;
    execute xLogin{@@, INSERT #user_table10 (_kod, _fio, _variant) VALUES  (@ss:1,@ss:2[''],@ss:3);
   };
};

_________________
return @@tMonth[%m]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Константин



Зарегистрирован: 02.05.2012
Сообщения: 39
Откуда: Красноярск

СообщениеДобавлено: Пт Июл 20, 2012 13:11    Заголовок сообщения: Ответить с цитатой

файл Excel выглядит примерно так

т.н. ФИО ЗП
123 А 10000
234 Б 20000
125 С 30000
_________________
return @@tMonth[%m]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Vitaly
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 29.07.2008
Сообщения: 281
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Июл 20, 2012 13:14    Заголовок сообщения: Ответить с цитатой

Эту тему тут уже обсуждали... вот пример загрузки
Код:
INSERT INTO #USER_st_Nachisl (idVO, Dop_idVO, Project, Invers, Name_pers, Schet_D, KP_D, Vid_KP_D, Schet_K, KP_K, Vid_KP_K, Excp, No_group)
Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;IMEX=1;Database=g_spr_pass', 'SELECT [КОД ВО БОСС], [Доп# Код], [Без проекта], [Смена знака],[Группа персонала], Дебит, КП_Д, Вид_КП_Д, Кредит, КП_К, Вид_КП_К, Исчключение, [Без группировки] FROM [Начисления_Удержания$]');


где g_spr_pass - полный путь к файлу
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Константин



Зарегистрирован: 02.05.2012
Сообщения: 39
Откуда: Красноярск

СообщениеДобавлено: Пт Июл 20, 2012 13:31    Заголовок сообщения: Ответить с цитатой

Vitaly писал(а):
Эту тему тут уже обсуждали... вот пример загрузки
Код:
INSERT INTO #USER_st_Nachisl (idVO, Dop_idVO, Project, Invers, Name_pers, Schet_D, KP_D, Vid_KP_D, Schet_K, KP_K, Vid_KP_K, Excp, No_group)
Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;IMEX=1;Database=g_spr_pass', 'SELECT [КОД ВО БОСС], [Доп# Код], [Без проекта], [Смена знака],[Группа персонала], Дебит, КП_Д, Вид_КП_Д, Кредит, КП_К, Вид_КП_К, Исчключение, [Без группировки] FROM [Начисления_Удержания$]');


где g_spr_pass - полный путь к файлу



Код:
let FileName = '@@xFile(dlgopen ,"",0x8000c,"MS Excel Files (*.xls)|*.xls||","Выберите файл")';
if 'FileName' == '' then  {
 msg [\3Файл не выбран!]3,0x01;
 DESTROY @choose;
};


SELECT object_id('tempdb..#tmptmp') INTO :id_;
IF id_ != 0 THEN DROP TABLE #tmptmp;
FREE id_;
CREATE TABLE #tmptmp (
   tabnum nvarchar(30) NULL,
   szp nvarchar(30) NULL,
   summa varchar(150) NULL,
);


INSERT INTO #tmptmp (tabnum,fio,summa)
Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;IMEX=1;Database=file_name', 'SELECT tabnum,fio,summ FROM [Лист1$]');


Модифицировал код из примера, но стала появляться ошибка


_________________
return @@tMonth[%m]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Vitaly
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 29.07.2008
Сообщения: 281
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Июл 20, 2012 13:34    Заголовок сообщения: Ответить с цитатой

Закройте файл, с открытым файлом загрузка не хочет работать
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Константин



Зарегистрирован: 02.05.2012
Сообщения: 39
Откуда: Красноярск

СообщениеДобавлено: Пт Июл 20, 2012 13:39    Заголовок сообщения: Ответить с цитатой

Закрыл, перезапустил код - ошибка та же.
_________________
return @@tMonth[%m]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mike
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 07.04.2011
Сообщения: 255

СообщениеДобавлено: Пт Июл 20, 2012 13:49    Заголовок сообщения: Ответить с цитатой

Константин писал(а):
тогда ошибка появляется:"Dynamic cursor not supported by ODBC driver"

при том ругается на строки:

Код:
scan @ss SELECT * FROM [filename].[Лист1$] NO_HINT execute{
   CON @ss:1,@ss:2, @ss:3;
    execute xLogin{@@, INSERT #user_table10 (_kod, _fio, _variant) VALUES  (@ss:1,@ss:2[''],@ss:3);
   };
};

DSn правильно сделали?
Может обновить драйвер нужно?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Константин



Зарегистрирован: 02.05.2012
Сообщения: 39
Откуда: Красноярск

СообщениеДобавлено: Пт Июл 20, 2012 14:01    Заголовок сообщения: Ответить с цитатой

Mike писал(а):
Константин писал(а):
тогда ошибка появляется:"Dynamic cursor not supported by ODBC driver"

при том ругается на строки:

Код:
scan @ss SELECT * FROM [filename].[Лист1$] NO_HINT execute{
   CON @ss:1,@ss:2, @ss:3;
    execute xLogin{@@, INSERT #user_table10 (_kod, _fio, _variant) VALUES  (@ss:1,@ss:2[''],@ss:3);
   };
};

DSn правильно сделали?
Может обновить драйвер нужно?


Ещё раз проверил наименование DSN.




код
Код:
--Создаем таблицу для закачки данных
if object_id('tempdb..#user_table10') IS NOT NULL  THEN DROP TABLE #user_table10;

CREATE TABLE [dbo].[#user_table10](
            [id] INTEGER   IDENTITY(1,1),
            [_kod] [varchar](255) COLLATE Cyrillic_General_CI_AS NULL,
            [_fio] [varchar](255) COLLATE Cyrillic_General_CI_AS NULL,
            [_variant] [varchar](255) COLLATE Cyrillic_General_CI_AS NULL,
            [_variant_name] [varchar](255) COLLATE Cyrillic_General_CI_AS NULL,
            ) ON [PRIMARY];

-- Выбор файла
let FileName = '@@xFile(dlgopen ,"",0x8000c,"MS Excel Files (*.xls)|*.xls||","Выберите файл")';
if 'FileName' == '' then  {
 msg [\3Файл не выбран!]3,0x01;
 DESTROY @choose;
};

--Сохраняем данные из файла во временную таблицу
Execute xLogin{Open {DSN=to_xls;UID=1;PWD=1;},
scan @ss SELECT * FROM [filename].[Лист1$] NO_HINT
execute{
   CON @ss:1,@ss:2, @ss:3;
    execute xLogin{@@, INSERT #user_table10 (_kod, _fio, _variant) VALUES  (@ss:1,@ss:2[''],@ss:3);
   };
};
};
CON;

_________________
return @@tMonth[%m]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Константин



Зарегистрирован: 02.05.2012
Сообщения: 39
Откуда: Красноярск

СообщениеДобавлено: Пт Июл 20, 2012 14:04    Заголовок сообщения: Ответить с цитатой

Т.к. предположить какой офис пользует клиент мы не можем , поэтому все разрабатываем под 2003.
_________________
return @@tMonth[%m]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Vitaly
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 29.07.2008
Сообщения: 281
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Июл 20, 2012 14:20    Заголовок сообщения: Ответить с цитатой

Константин писал(а):
Закрыл, перезапустил код - ошибка та же.


Проверьте, может у кого-то другого файл открыт... у нас была такая же ошибка при открытом файле
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mike
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 07.04.2011
Сообщения: 255

СообщениеДобавлено: Пт Июл 20, 2012 14:24    Заголовок сообщения: Ответить с цитатой

Судя по ошибке (следуя тому, что я писал) - дело в драйвере, я бы попробовал:
1. Попробовать это сделать на компе, где стоит как минимум офис 2007. Дело в том, что когда устанавливается офисе, с ним устанавливается пакет драйверов. Может быть 2003 драйвера действительно не будут работать с такими вот вещами, а 2007 работает - это точно.
2. Если получилось, то посоветовал бы переустановить офис клиенту, если клиент переодически будет выполнять данные операции.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> X-язык Часовой пояс: GMT + 4
На страницу 1, 2, 3  След.
Страница 1 из 3

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB
Rambler's Top100 Рейтинг@Mail.ru Список форумов BOSSForum.RU