<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
	<id>https:///index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D0%BB%D0%B0%D1%82%D0%B5%D0%B6%D0%B8_%D0%B8%D0%B7_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0</id>
	<title>Платежи из файла - Історія редагувань</title>
	<link rel="self" type="application/atom+xml" href="https:///index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D0%BB%D0%B0%D1%82%D0%B5%D0%B6%D0%B8_%D0%B8%D0%B7_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0"/>
	<link rel="alternate" type="text/html" href=""/>
	<updated>2026-05-05T12:28:26Z</updated>
	<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id></id>
		<title>Sv: /* Пример 1 */</title>
		<link rel="alternate" type="text/html" href=""/>
		<updated>2021-09-06T07:53:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Пример 1&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Описание==&lt;br /&gt;
Модуль позволяет загрузить в NoDeny платежи из файла, распределив их по абонентам по определенному признаку:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:Pays from file 1.png|800px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
При повторной загрузке файла, дубликаты не будут созданы:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:Pays from file 2.png|800px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка==&lt;br /&gt;
В разделе «Документы» создайте папку с именем, например, «Импорт платежей». В этой папке создайте документ с любым именем, например, по имени банка, чью выписку вы хотите регулярно импортировать. В данном документе необходимо в каждой строке указать имя параметра = значение. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
file_format = csv&lt;br /&gt;
file_encoding = cp1251&lt;br /&gt;
csv_delimiter = ;&lt;br /&gt;
skip_first_line = 1&lt;br /&gt;
user_column_number = 10&lt;br /&gt;
user_field_in_db = _erdpo&lt;br /&gt;
action_when_many_users = ignore&lt;br /&gt;
amount_column_number = 15&lt;br /&gt;
only_positive_amount = 1&lt;br /&gt;
div100_amount = 0&lt;br /&gt;
comment_column_number = 16&lt;br /&gt;
date_column_number = 5&lt;br /&gt;
date_column_format = %d.%m.%Y %H:%M&lt;br /&gt;
unique_columns = 5,12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* file_format: формат файла&lt;br /&gt;
* file_encoding: кодировка файла (cp1251/utf8)&lt;br /&gt;
* csv_delimiter: разделитель столбцов в csv-файле&lt;br /&gt;
* skip_first_line: 1 - не обрабатывать первую строку (обычно она содержит заголовок), 0 - обрабатывать&lt;br /&gt;
* user_column_number: номер колонки, в которой содержится идентификатор абонента&lt;br /&gt;
* user_field_in_db: имя поля в базе данных, в котором хранится идентификатор абонента&lt;br /&gt;
* user_db: имя таблицы, в которой хранится идентификатор абонента (по умолчанию data0)&lt;br /&gt;
* user_id_in_db: имя поля в базе данных, в котором хранится номер абонента (по умолчанию uid)&lt;br /&gt;
* amount_column_number: номер колонки, в которой содержится сумма пополнения&lt;br /&gt;
* only_positive_amount: 1 - разрешается только положительная сумма, 0 - любая&lt;br /&gt;
* div100_amount: 1 - необходимо разделить сумму на 100 (когда в csv хранится в копейках)&lt;br /&gt;
* comment_column_number: номер колонки, в которой содержится комментарий к платежу&lt;br /&gt;
* date_column_number: номер колонки, в которой содержится дата платежа&lt;br /&gt;
* date_column_format: формат даты (https://www.unix.com/man-page/FreeBSD/3/strftime/)&lt;br /&gt;
* unique_columns: какие колонки определяют уникальность платежа - защита от дубликатов. Колонки &amp;quot;время&amp;quot; и &amp;quot;клиент&amp;quot; можно не указывать - проверяются автоматически&lt;br /&gt;
* pay_category: категория платежа, по умолчанию 4 (банк)&lt;br /&gt;
&lt;br /&gt;
Все колонки нумеруются с единицы.&lt;br /&gt;
&lt;br /&gt;
==Установка модуля==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    cd /usr/ports/textproc/p5-Text-CSV &amp;amp;&amp;amp; make install clean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
или на Linux:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    apt-get install libtext-csv-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Импорт платежей==&lt;br /&gt;
&lt;br /&gt;
В разделе «Платежи» нажмите на кнопку «Загрузить из файла». В появившемся окне выберите документ с настройками, по которым вы хотите распарсить файл с платежами. Затем выберите сам файл.&lt;br /&gt;
&lt;br /&gt;
==Ошибки в данных==&lt;br /&gt;
Вполне вероятно, что в данных могут быть ошибки в идентификаторах, например, лишние пробелы или иные символы, либо же вместо определенного разделителя использован пробел, точка, тире и т.д. В таком случае можно попытаться подогнать идентификатор под нужный формат. К примеру, в качестве идентификатора выступает договор такого формата:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Xчисло-число-число&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Пример 1===&lt;br /&gt;
Допустим в файле у нас указано X.10.12.14, а в биллинге содержится значение X10-12-14. Видно, что нужно сделать некоторые преобразования. Кое-что удалить, кое-что заменить. Это делается двумя переменными:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user_regexp_in = ^X?[ \-]?(\d+)[ \-]*(\d+)[ \-]*(\d+)$&lt;br /&gt;
user_regexp_out = X$1-$2-$3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это регулярные выражение - довольно стандартный способ преобразования информации. В интернете громадное количество [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 информации по ним].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user_regexp_in - что меняем&lt;br /&gt;
user_regexp_out - на что меняем&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
То, что в регулярных выражениях внутри скобок, преобразуется в переменную &amp;quot;$ и дальше номер по порядку&amp;quot;. В квадратных скобках варианты символа в данной позиции.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим несколько примеров:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1-2 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Преобразуется в&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X1-2-3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
по таким правилам:&lt;br /&gt;
* X? - в исходном идентификаторе вначале может стоять буква X, а может нет. На это указывает знак вопроса&lt;br /&gt;
* [ \-]? - далее может идти или пробел или тире (минус). А может не идти (на это указывает знак вопроса). Минус экранируется обратным слешем.&lt;br /&gt;
* (\d+) - далее обязательно идет какое-то число (\d в регулярных выражениях означает &amp;quot;любая цифра&amp;quot;, а плюс - одна или больше цифр подряд). Это число запишется в переменную $1&lt;br /&gt;
&lt;br /&gt;
в консоли вы можете легко проверить преобразования:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl -e'$a = &amp;quot;некорректные_данные&amp;quot;; $a =~ s/как_преобразовуем/во_что_преобразовуем/; print $a';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl -e'$a = &amp;quot;11 - 22 - 33&amp;quot;; $a =~ s/^X?[ \-]?(\d+)[ \-]*(\d+)[ \-]*(\d+)$/X$1-$2-$3/; print $a';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Пример 2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user_regexp_in = .*?(\d{3,10}).*&lt;br /&gt;
user_regexp_out = $1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
этот шаблон выудит первое число длинной от 3 до 10 цифр&lt;/div&gt;</summary>
		<author><name>Sv</name></author>
	</entry>
</feed>