cro-logo      
Добро пожаловать, Гость. Пожалуйста, выберите Вход

 
 
  ГлавнаяСправкаПоискВход  
 
Страниц: 1 2 3 
Послать Тему Печать
Загрузка данных из Exel (Прочитано 18 748 раз)
Alexandr
Профи
****
Вне Форума


Я люблю этот Форум!

Сообщений: 176
Загрузка данных из Exel
28.05.2018 :: 10:58:22
 
Добрый день, помогите понять как реализовать задачу.
необходимо чтобы пользователь мог САМ загружать в отдельную базу данные из файла Exel  для дальнейшего сравнения с данными в банке
Загружаемые данные № платежного поручения(тестовое поле), ИНН Контрагента (Числовое поле), Наименование контрагента (текстовое поле), условие расчета по договору (Текстовое поле, но сравнение должно производиться со словарным полем моей базы, ) и Сумма платежа (числовое поле)
В банке данных я создал базу с данными полями и туда я руками могу через импорт из файла загружать данные. Но необходимо чтобы пользователь мог по нажатию кнопки выбрать файл и загрузить туда данные (без моего участия) и в дальнейшем необходимо сравнивать эти данные сравнить с данными моего банка.
Вопрос как проще всего реализовать загрузку данных и какие подводные камни  могут быть??  (может как то через формы ввода , может пример какой)
Если что то не так или непонятно написал пишите

Наверх
 
 
IP записан
 
w0rm
Профи
****
Вне Форума



Сообщений: 113
Калуга
Re: Загрузка данных из Exel
Ответ #1 - 28.05.2018 :: 13:08:24
 
Добрый день!
1)что планируете делать после сравнения?
2)пример БД (скриншот) можете выложить?

Похожую задачу решал так:
создал БД с двумя таблицами, где
первая таблица - пустая база с полями Наименование, ИНН, Адрес и т.д.
вторая таблица - таблица для загрузки файла

Во второй таблице сделал поле с типом Файл.
Загрузил в него файл.
Выполнил код, который забирал из поля Файл нужные данные и переносил их в первую таблицу.

Только формат загружаемого файла был не эксель, а простой текстовый файл.
Можно написать в экселевском файле макрос и повесить его на кнопку, при нажатии на которую пользователь получит txt-файл для загрузки в Кронос.
Наверх
 
 
IP записан
 
Alexandr
Профи
****
Вне Форума


Я люблю этот Форум!

Сообщений: 176
Re: Загрузка данных из Exel
Ответ #2 - 28.05.2018 :: 13:34:40
 
После сравнения должен просто выходить отчет, в котором на против проверенных данных будет выдаваться запись (Данные верны, данные по условию расчета не верны, данные по оплате (верны или не верны) , данные не найдены)
Сравнение будут по производиться по ИНН , номеру счета и условия по расчету платежа и сумме
На счет скриншота базы, какие именно данные необходимы(загружаемой базы, я поля описал, полей для связи там нет) Если данные с которыми будут проводиться сравнения, То данные находятся в нескольких связанных между собой базах (База Фирма(данные по конрагенту), База номер договора и база номер спецификации  Скриншот необходим этой базы или базы куда будут заливаться данные.
Мне бы пример как можно загружать данные (желательно через формы ввода, так чтобы пользователь сам мог по паре кликов импортировать данные в эту базу Кроноса) Так как они планируют загружать данные по несколько раз в день
Вы написали
Выполнил код, который забирал из поля Файл нужные данные и переносил их в первую таблицу.
А можно код посмотреть???
Наверх
 
 
IP записан
 
w0rm
Профи
****
Вне Форума



Сообщений: 113
Калуга
Re: Загрузка данных из Exel
Ответ #3 - 28.05.2018 :: 16:45:45
 
Alexandr писал(а) 28.05.2018 :: 13:34:40:
А можно код посмотреть???

Код:
//из таблицы №2 (Т2) данные переносятся в таблицу №1 (Т1)

@data := Т21 //копирование данных их CSV-файла в переменную

@line_end := CHAR(10) //символ переноса строки
//@line_end := CHAR(13) //символ переноса строки - АЛЬТЕРНАТИВНЫЙ ВАРИАНТ
//перенос строки в разных кодировках может быть разным, это
//или CHAR(10)
//или CHAR(13)

@line_count := SCOUNT (@data, @line_end) //подсчёт строк ВСЕГО

@i := 1
WHILE @i <= (@line_count+1) DO (
@line := FIELD (@data, @line_end, @i) //получение одной строки с данными
//внутри строки происходит отрезание блоков, разделителем выступает символ "|"
@KA_name := TRIM (FIELD (@line, "|", 1))
@KA_INN := TRIM (FIELD (@line, "|", 2))
@KA_adress := TRIM (FIELD (@line, "|", 3))
@KA_contract := TRIM (FIELD (@line, "|", 4))
@KA_price := TRIM (FIELD (@line, "|", 5))
@KA_price := SWAP (@KA_price, CHAR(10), "") //удаление символа переноса строки из переменной
@KA_price := SWAP (@KA_price, CHAR(13), "") //удаление символа переноса строки из переменной

//создание новой записи в таблице №1
ADDRECORD (Т1{0},
						Т11:=@KA_name;
						Т12:=@KA_INN;
						Т13:=@KA_adress;
						Т14:=@KA_contract;
						Т15:=@KA_price;)

@i := @i+1
)
 

Наверх
 

00.jpg (398 KB | 277 )
00.jpg
 
IP записан
 
Alexandr
Профи
****
Вне Форума


Я люблю этот Форум!

Сообщений: 176
Re: Загрузка данных из Exel
Ответ #4 - 28.05.2018 :: 18:21:01
 
Спасибо, попробую завтра под себя переделать
Наверх
 
 
IP записан
 
Alexandr
Профи
****
Вне Форума


Я люблю этот Форум!

Сообщений: 176
Re: Загрузка данных из Exel
Ответ #5 - 30.05.2018 :: 04:41:21
 
Добрый день
Вопрос , есть строки из них необходимо выбрать и передать 2 переменным 2 значения() строки приведены ниже, значения передаю
Первой переменной номер договора(например ДС11/0078/УРАЛ АЗ/17)
@А:=FIELD(@KA_dogovor," ", 4)
@B:=FIELD(@KA_dogovor," ", 5)
РП11:=@А  <<  @B)
Второй(дата договора стоит после договора)
@С:=FIELD(@KA_dogovor," ", 7)
но есть строки с такими номерами договора 06-15 П/12414 АЗ (между 15 и буквой П стоит пробел) и соответственно переменной передаются не верные значения, как можно по другому выбрать правильные значения?
оплата по дог. 10/ДС01/0014/УРАЛ АЗ/17 от 09.01.2017 тмц сф: №00000213 от 27.02.2018 в.т.ч. НДС 3380,4
оплата по дог. 10205 АЗ от 01.08.2013 тмц сф: №28 от 01.03.2018 в.т.ч. НДС 15254,24
оплата по дог. 06-15 П/12414 АЗ от 28.11.2014 тмц сф: №321 от 19.03.2018 в.т.ч. НДС 76271,19
оплата по дог. ДС04/0078/УРАЛ АЗ/17 от 05.07.2017 тмц  в.т.ч. НДС 2320879,11
оплата по дог. ДС11/0078/УРАЛ АЗ/17 от 05.07.2017 тмц  в.т.ч. НДС 2320879,11
оплата по дог. 13632 АЗ от 01.09.2015 тмц сф: №335 от 23.04.2018 в.т.ч. НДС 11809,8

И еще вопрос как удалить первые 3 строки?
И еще вопрос
@KA_price := TRIM (FIELD (@line,";", 10))  10 функция воспринимает как 1 , а не как 10 , что делать?
Наверх
 
 
IP записан
 
w0rm
Профи
****
Вне Форума



Сообщений: 113
Калуга
Re: Загрузка данных из Exel
Ответ #6 - 31.05.2018 :: 16:08:36
 
Цитата:
И еще вопрос как удалить первые 3 строки?


Если я правильно понял, первые три строки - это шапка (заголовок) документа.
Чтобы их исключить (удалить), следует добавить условие IF в цикл WHILE
Код:
@i := 1
WHILE @i <= (@line_count+1) DO (

IF @i >= 4 THEN (
@line := FIELD (@data, @line_end, @i)
@KA_name := TRIM (FIELD (@line, "|", 1))
@i := @i+1
)

) 



Цитата:
И еще вопрос
@KA_price := TRIM (FIELD (@line,";", 10))  10 функция воспринимает как 1 , а не как 10 , что делать?

Если функция FIELD не находит 10-ый разделитель, то она выводит 1-ый разделитель.
Наверх
 
 
IP записан
 
w0rm
Профи
****
Вне Форума



Сообщений: 113
Калуга
Re: Загрузка данных из Exel
Ответ #7 - 31.05.2018 :: 16:58:03
 
Цитата:
но есть строки с такими номерами договора 06-15 П/12414 АЗ (между 15 и буквой П стоит пробел) и соответственно переменной передаются не верные значения, как можно по другому выбрать правильные значения?
оплата по дог. 10/ДС01/0014/УРАЛ АЗ/17 от 09.01.2017 тмц сф: №00000213 от 27.02.2018 в.т.ч. НДС 3380,4
оплата по дог. 10205 АЗ от 01.08.2013 тмц сф: №28 от 01.03.2018 в.т.ч. НДС 15254,24
оплата по дог. 06-15 П/12414 АЗ от 28.11.2014 тмц сф: №321 от 19.03.2018 в.т.ч. НДС 76271,19
оплата по дог. ДС04/0078/УРАЛ АЗ/17 от 05.07.2017 тмц  в.т.ч. НДС 2320879,11
оплата по дог. ДС11/0078/УРАЛ АЗ/17 от 05.07.2017 тмц  в.т.ч. НДС 2320879,11
оплата по дог. 13632 АЗ от 01.09.2015 тмц сф: №335 от 23.04.2018 в.т.ч. НДС 11809,8


Тут два пути:
1. настроить выгрузку так, чтобы в текстовый файл выводились по отдельности (через разделитель): КА | Договор01 | Договор02 | Договор03 | Сумма01 | Сумма02 | Сумма03
2. писать парсер, который будет корректно (правильно) раскладывать строку, извлекая из неё: КА, все договоры, все суммы.

Если проблема только с пробелами, то я бы использовал другой разделитель: "|" или "#"
исходную строку:
оплата по дог. 10/ДС01/0014/УРАЛ АЗ/17 от 09.01.2017 тмц сф: №00000213 от 27.02.2018 в.т.ч. НДС 3380,4

привёл бы к такому виду:
оплата по дог.
|
10/ДС01/0014/УРАЛ АЗ/17
|
от
|
09.01.2017
|
тмц сф: №00000213
|
от
|
27.02.2018 в.т.ч. НДС
|
3380,4

и через FIELD вывел бы нужные мне данные:
Номер договора -
10/ДС01/0014/УРАЛ АЗ/17

Дата договора -
09.01.2017

Сумма по договору -
3380,4


примерная формула для расстановки разделителей
Код:
@A := оплата по дог. 10/ДС01/0014/УРАЛ АЗ/17 от 09.01.2017 тмц сф: №00000213 от 27.02.2018 в.т.ч. НДС 3380,4
@A := SWAP(@A, " дог. ", "| дог. |")
@A := SWAP(@A, " от ", "| от |")
@A := SWAP(@A, " тмц ", "| тмц ")
@A := SWAP(@A, " НДС ", " НДС |")
 

Наверх
 
 
IP записан
 
Alexandr
Профи
****
Вне Форума


Я люблю этот Форум!

Сообщений: 176
Re: Загрузка данных из Exel
Ответ #8 - 01.06.2018 :: 11:05:40
 
Понял , спасибо за информацию, попробую
настроить выгрузку не представляется возможным, так как файл приходит в xls именно в таком виде и на просьбы изменить формат не реагируют,
Наверх
 
 
IP записан
 
Энкан
Профи
****
Вне Форума



Сообщений: 361
Владивосток
Re: Загрузка данных из Exel
Ответ #9 - 01.06.2018 :: 15:08:11
 
А можно пример файла с 10 и более разделителями? прям интересно стало почему фиелд не работает.
Наверх
 
 
IP записан
 
w0rm
Профи
****
Вне Форума



Сообщений: 113
Калуга
Re: Загрузка данных из Exel
Ответ #10 - 01.06.2018 :: 16:57:49
 
Цитата:
А можно пример файла с 10 и более разделителями? прям интересно стало почему фиелд не работает.


Виноват, ввёл в заблуждение.
Если функция
FIELD
не находит 10-го разделителя, то она ничего не выведет.
Перед использованием функции FIELD (или чтобы понять почему не выводится "подстрока")
можно подсчитать количество разделителей с помощью функции
SCOUNT


Код:
@delimiter01 := SCOUNT (@line, "|") //считает количество разделителей "|"

@delimiter02 := SCOUNT (@line, " ") // считает количество пробелов
 

Наверх
 
 
IP записан
 
Nat_m
Пользователь
**
Вне Форума


Я люблю этот Форум!

Сообщений: 43
Re: Загрузка данных из Exel
Ответ #11 - 09.07.2018 :: 22:02:29
 
Добрый вечер! Может быть у кого нибудь есть пример макроса, который выгружает из xls в структурированный txt под cronos? Буду очень признательна.. Круглые глаза
Наверх
 
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 3 041
Санкт-Петербург
Re: Загрузка данных из Exel
Ответ #12 - 09.07.2018 :: 22:47:44
 
1. Структурированный текстовый файл может потребоваться для банка со сложной структурой, т.е. при загрузке данных во множество баз связанных с корневой. В других случаях он не нужен.
2. Создать структурированный файл можно и без макросов, путем вставки дополнительных столбцов и указанием в них множественных групп для различных баз, с соответствующей настройкой таблицы импорта. Файл сохраняется с разделителями табуляции, которая потом удаляется в текстовом редакторе.
3. Многие пользуются другой возможностью. Создают промежуточную базу или банк, импортируют туда весь файл excel и затем разносят данные с использованием формул или таблиц обмена в разные базы.
Наверх
 
 
IP записан
 
Nat_m
Пользователь
**
Вне Форума


Я люблю этот Форум!

Сообщений: 43
Re: Загрузка данных из Exel
Ответ #13 - 10.07.2018 :: 09:57:52
 
Тогда не понимаю в чем дело, может быть подскажите?
Во вложенном файле структура базы и свойства таблицы импорта.

вот структура файла TXT
"ООО ""ННриса"""/14/00000949/""Престиж Клюква""/0,500/120/05.07.2018
"ООО ""ННриса"""/14/00001051/""Престиж Рябина""/0,500/120/05.07.2018
"ООО ""ННриса"""/14/00001112/""Перцовочка""/0,500/1 200/05.07.2018

Что не так?
Наверх
 

Untitled-1.jpg (160 KB | 291 )
Untitled-1.jpg
 
IP записан
 
Пытливый
Профи
****
Вне Форума



Сообщений: 382
Мурманск
Re: Загрузка данных из Exel
Ответ #14 - 10.07.2018 :: 21:19:13
 
Вот я лично нифига не вижу на вашем скрине, тут и мелкоскоп не поможет Улыбка
Наверх
 
 
IP записан
 
Страниц: 1 2 3 
Послать Тему Печать