Платежи из файла: відмінності між версіями
Sv (обговорення | внесок) мНемає опису редагування |
Sv (обговорення | внесок) м (→Пример 1) |
||
(Не показано 9 проміжних версій цього користувача) | |||
Рядок 9: | Рядок 9: | ||
==Настройка== | ==Настройка== | ||
В разделе «Документы» создайте папку с именем, например, «Импорт платежей». В этой папке создайте документ с любым именем, например, по имени банка, чью выписку вы хотите регулярно импортировать. В данном | В разделе «Документы» создайте папку с именем, например, «Импорт платежей». В этой папке создайте документ с любым именем, например, по имени банка, чью выписку вы хотите регулярно импортировать. В данном документе необходимо в каждой строке указать имя параметра = значение. Пример: | ||
<pre> | <pre> | ||
Рядок 38: | Рядок 38: | ||
* amount_column_number: номер колонки, в которой содержится сумма пополнения | * amount_column_number: номер колонки, в которой содержится сумма пополнения | ||
* only_positive_amount: 1 - разрешается только положительная сумма, 0 - любая | * only_positive_amount: 1 - разрешается только положительная сумма, 0 - любая | ||
* div100_amount: 1 - необходимо разделить сумму на 100 (в csv хранится в копейках) | * div100_amount: 1 - необходимо разделить сумму на 100 (когда в csv хранится в копейках) | ||
* comment_column_number: номер колонки, в которой содержится комментарий к платежу | * comment_column_number: номер колонки, в которой содержится комментарий к платежу | ||
* date_column_number: номер колонки, в которой содержится дата платежа | * date_column_number: номер колонки, в которой содержится дата платежа | ||
Рядок 52: | Рядок 52: | ||
cd /usr/ports/textproc/p5-Text-CSV && make install clean | cd /usr/ports/textproc/p5-Text-CSV && make install clean | ||
</pre> | </pre> | ||
или | или на Linux: | ||
<pre> | <pre> | ||
apt-get install libtext-csv-perl | apt-get install libtext-csv-perl | ||
Рядок 62: | Рядок 62: | ||
==Ошибки в данных== | ==Ошибки в данных== | ||
Вполне вероятно, что в данных могут быть ошибки в идентификаторах, например, лишние пробелы или иные символы, либо же вместо | Вполне вероятно, что в данных могут быть ошибки в идентификаторах, например, лишние пробелы или иные символы, либо же вместо определенного разделителя использован пробел, точка, тире и т.д. В таком случае можно попытаться подогнать идентификатор под нужный формат. К примеру, в качестве идентификатора выступает договор такого формата: | ||
<pre> | <pre> | ||
Xчисло-число-число | Xчисло-число-число | ||
</pre> | </pre> | ||
Допустим в файле у нас указано X.10.12.14, а в биллинге содержится значение X10-12-14. Видно, что нужно сделать некоторые преобразования. Это делается двумя переменными: | ===Пример 1=== | ||
Допустим в файле у нас указано X.10.12.14, а в биллинге содержится значение X10-12-14. Видно, что нужно сделать некоторые преобразования. Кое-что удалить, кое-что заменить. Это делается двумя переменными: | |||
<pre> | <pre> | ||
user_regexp_in = ^X?[ \-]?(\d+)[ \-](\d+)[ \-](\d+)$ | user_regexp_in = ^X?[ \-]?(\d+)[ \-]*(\d+)[ \-]*(\d+)$ | ||
user_regexp_out = X$1-$2-$3 | user_regexp_out = X$1-$2-$3 | ||
</pre> | </pre> | ||
Это регулярные выражение - довольно стандартный способ преобразования информации. В интернете громадное количество [https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F информации по ним]. user_regexp_in - что меняем | Это регулярные выражение - довольно стандартный способ преобразования информации. В интернете громадное количество [https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F информации по ним]. | ||
<pre> | |||
user_regexp_in - что меняем | |||
user_regexp_out - на что меняем | |||
</pre> | |||
То, что в регулярных выражениях внутри скобок, преобразуется в переменную "$ и дальше номер по порядку". В квадратных скобках варианты символа в данной позиции. | |||
Рассмотрим несколько примеров: | Рассмотрим несколько примеров: | ||
Рядок 89: | Рядок 95: | ||
* [ \-]? - далее может идти или пробел или тире (минус). А может не идти (на это указывает знак вопроса). Минус экранируется обратным слешем. | * [ \-]? - далее может идти или пробел или тире (минус). А может не идти (на это указывает знак вопроса). Минус экранируется обратным слешем. | ||
* (\d+) - далее обязательно идет какое-то число (\d в регулярных выражениях означает "любая цифра", а плюс - одна или больше цифр подряд). Это число запишется в переменную $1 | * (\d+) - далее обязательно идет какое-то число (\d в регулярных выражениях означает "любая цифра", а плюс - одна или больше цифр подряд). Это число запишется в переменную $1 | ||
в консоли вы можете легко проверить преобразования: | |||
<pre> | |||
perl -e'$a = "некорректные_данные"; $a =~ s/как_преобразовуем/во_что_преобразовуем/; print $a'; | |||
</pre> | |||
Например: | |||
<pre> | |||
perl -e'$a = "11 - 22 - 33"; $a =~ s/^X?[ \-]?(\d+)[ \-]*(\d+)[ \-]*(\d+)$/X$1-$2-$3/; print $a'; | |||
</pre> | |||
===Пример 2=== | |||
<pre> | |||
user_regexp_in = .*?(\d{3,10}).* | |||
user_regexp_out = $1 | |||
</pre> | |||
этот шаблон выудит первое число длинной от 3 до 10 цифр |
Поточна версія на 07:53, 6 вересня 2021
Описание
Модуль позволяет загрузить в NoDeny платежи из файла, распределив их по абонентам по определенному признаку:
При повторной загрузке файла, дубликаты не будут созданы:
Настройка
В разделе «Документы» создайте папку с именем, например, «Импорт платежей». В этой папке создайте документ с любым именем, например, по имени банка, чью выписку вы хотите регулярно импортировать. В данном документе необходимо в каждой строке указать имя параметра = значение. Пример:
file_format = csv file_encoding = cp1251 csv_delimiter = ; skip_first_line = 1 user_column_number = 10 user_field_in_db = _erdpo action_when_many_users = ignore amount_column_number = 15 only_positive_amount = 1 div100_amount = 0 comment_column_number = 16 date_column_number = 5 date_column_format = %d.%m.%Y %H:%M unique_columns = 5,12
- file_format: формат файла
- file_encoding: кодировка файла (cp1251/utf8)
- csv_delimiter: разделитель столбцов в csv-файле
- skip_first_line: 1 - не обрабатывать первую строку (обычно она содержит заголовок), 0 - обрабатывать
- user_column_number: номер колонки, в которой содержится идентификатор абонента
- user_field_in_db: имя поля в базе данных, в котором хранится идентификатор абонента
- user_db: имя таблицы, в которой хранится идентификатор абонента (по умолчанию data0)
- user_id_in_db: имя поля в базе данных, в котором хранится номер абонента (по умолчанию uid)
- amount_column_number: номер колонки, в которой содержится сумма пополнения
- only_positive_amount: 1 - разрешается только положительная сумма, 0 - любая
- div100_amount: 1 - необходимо разделить сумму на 100 (когда в csv хранится в копейках)
- comment_column_number: номер колонки, в которой содержится комментарий к платежу
- date_column_number: номер колонки, в которой содержится дата платежа
- date_column_format: формат даты (https://www.unix.com/man-page/FreeBSD/3/strftime/)
- unique_columns: какие колонки определяют уникальность платежа - защита от дубликатов. Колонки "время" и "клиент" можно не указывать - проверяются автоматически
- pay_category: категория платежа, по умолчанию 4 (банк)
Все колонки нумеруются с единицы.
Установка модуля
cd /usr/ports/textproc/p5-Text-CSV && make install clean
или на Linux:
apt-get install libtext-csv-perl
Импорт платежей
В разделе «Платежи» нажмите на кнопку «Загрузить из файла». В появившемся окне выберите документ с настройками, по которым вы хотите распарсить файл с платежами. Затем выберите сам файл.
Ошибки в данных
Вполне вероятно, что в данных могут быть ошибки в идентификаторах, например, лишние пробелы или иные символы, либо же вместо определенного разделителя использован пробел, точка, тире и т.д. В таком случае можно попытаться подогнать идентификатор под нужный формат. К примеру, в качестве идентификатора выступает договор такого формата:
Xчисло-число-число
Пример 1
Допустим в файле у нас указано X.10.12.14, а в биллинге содержится значение X10-12-14. Видно, что нужно сделать некоторые преобразования. Кое-что удалить, кое-что заменить. Это делается двумя переменными:
user_regexp_in = ^X?[ \-]?(\d+)[ \-]*(\d+)[ \-]*(\d+)$ user_regexp_out = X$1-$2-$3
Это регулярные выражение - довольно стандартный способ преобразования информации. В интернете громадное количество информации по ним.
user_regexp_in - что меняем user_regexp_out - на что меняем
То, что в регулярных выражениях внутри скобок, преобразуется в переменную "$ и дальше номер по порядку". В квадратных скобках варианты символа в данной позиции.
Рассмотрим несколько примеров:
1-2 3
Преобразуется в
X1-2-3
по таким правилам:
- X? - в исходном идентификаторе вначале может стоять буква X, а может нет. На это указывает знак вопроса
- [ \-]? - далее может идти или пробел или тире (минус). А может не идти (на это указывает знак вопроса). Минус экранируется обратным слешем.
- (\d+) - далее обязательно идет какое-то число (\d в регулярных выражениях означает "любая цифра", а плюс - одна или больше цифр подряд). Это число запишется в переменную $1
в консоли вы можете легко проверить преобразования:
perl -e'$a = "некорректные_данные"; $a =~ s/как_преобразовуем/во_что_преобразовуем/; print $a';
Например:
perl -e'$a = "11 - 22 - 33"; $a =~ s/^X?[ \-]?(\d+)[ \-]*(\d+)[ \-]*(\d+)$/X$1-$2-$3/; print $a';
Пример 2
user_regexp_in = .*?(\d{3,10}).* user_regexp_out = $1
этот шаблон выудит первое число длинной от 3 до 10 цифр