&Allan.Anderson; &Allan.Anderson.mail;

# Модуль импорта файлов CSV

## Основания для импорта файлов CSV

Обычно рекомендуется импортировать файлы в формате OFX. Но не все учреждения предоставляют данные в этом формате. Файлы CSV (значения, разделённые запятыми) доступны практически всегда. Иногда такие файлы описывают как файлы Excel или файлы электронных таблиц. Кроме того, их зачастую довольно просто создать: достаточно скопировать данные, которые следует импортировать (например, из текстового файла), и затем отредактировать их вручную.

Этот модуль предназначен в основном для импорта данных из банковских выписок, но также поддерживает импорт некоторых выписок по инвестициям. Изначально (до того, как стать средством импорта файлов CSV) этот модуль создавался для преобразования файлов CSV в формат QIF для последующего импорта. Эта функциональность по-прежнему присутствует в модуле, но, скорее всего, будет удалена в будущих его версиях, так как в настоящее время разработка сосредоточена на непосредственном импорте файлов CSV. Кроме того, в &kmymoney; предусмотрена встроенная возможность экспорта файлов QIF; в создании файлов QIF из файлов CSV нет реальной необходимости.

## Получение модуля

&kmymoney; позволяет импортировать файлы CSV. Эта функциональность обеспечивается модулем, который встроен в основную программу (как в пакетах дистрибутивов, так и в файлах исходного кода). После установки пакета дистрибутива или сборки программы из исходного кода и её установки в меню Файл Импорт автоматически появится команда импорта файлов CSV.

Модуль импорта файлов CSV гораздо новее, чем модуль импорта файлов OFX, но в большинстве дистрибутивов модуль импорта файлов CSV уже включён в пакет с программой или доступен как отдельный пакет. Убедитесь, что этот модуль включён в параметрах настройки &kmymoney;: Настройка Настроить &kmymoney;...Модули. Если в установленной версии программы отсутствует модуль импорта файлов CSV, рекомендуется сначала проверить, имеется ли этот модуль на том ресурсе, с которого был получен основной пакет &kmymoney;. Может быть доступна новая версия или отдельный пакет с этим модулем.

Если установка выполнялась с помощью пакета RPM или Deb, модуль импорта файлов CSV должен содержаться в пакете kmymoney. Если же выполнялась сборка из исходного кода, никаких дополнительных зависимостей не требуется. Сценарий сборки &kmymoney; обнаруживает соответствующие файлы модуля и собирает приложение.

## Импорт файла CSV

Чтобы импортировать файл CSV, выберите команду импорта в строке меню: Файл Импорт CSV.... Отсутствие этой команды во вложенном меню «Импорт» означает, что модуль импорта файлов CSV не был корректно установлен. Обратитесь к предыдущему разделу справки.

Модуль импорта файлов CSV представляет собой мастер, в котором для каждого из этапов процесса предусмотрена отдельная страница. Между текстом этого руководства пользователя, текстом на снимках экрана и текстом непосредственно в самом мастере могут иметься незначительные различия. Если такие различия имеются, это означает, что в руководстве приведено описание мастера из следующей версии программы.

### Мастер импорта файлов CSV: начало

После запуска мастера будет показана начальная страница. Верхняя часть, где будут показаны данные, сначала пуста. Слева показан список этапов процесса импорта (текущий этап выделен). Справа приводятся краткие указания и кнопки-переключатели, с помощью которых возможно выбрать Банковские операции или Инвестиции. Ниже доступно поле выбора профиля (оно станет активным после выбора одного из переключателей). В самом низу страницы доступны кнопки перехода к следующему этапу, возрата к предыдущему этапу (Назад) и отмены импорта (Отмена). На начальном этапе также доступна кнопка Выбрать файл, с помощью которой возможно выбрать файл для импорта.

Кроме того, обратите внимание на флажок Пропустить настройку рядом с полем выбора профиля. Этот флажок не следует устанавливать при первоначальной настройке. Как только пользователь настроит профиль и выполнит выход из мастера, заданные им параметры будут сохранены в файле ресурсов. При следующем использовании того же самого профиля эти параметры будут загружены в интерфейс пользователя. В следующий раз пользователю придётся просто пролистать страницы с параметрами, которые не нуждаются в изменении. Чтобы этого избежать, установите этот флажок, когда параметры будут настроены надлежащим образом: в этом случае мастер будет сразу переходить к последней странице, и (если не возникнет ошибок) пользователю останется только нажать кнопку Импорт.

Сначала выберите Банковские операции или Инвестиции, затем щёлкните по полю выбора, чтобы добавить новый профиль. Если имеются уже созданные профили, в этом поле будет доступен их список. Выберите один из них или укажите в поле название нового профиля (возможно указать название записи счёта, в которую будет выполнен импорт данных). После ввода названия нового профиля нажмите клавишу &Enter; для его создания. Затем нажмите кнопку Выбрать файл: появится стандартный диалог выбора файлов, с помощью которого возможно выбрать файл CSV для импорта.

### Мастер импорта файлов CSV: разделители

Мастер перейдёт на страницу Разделители и отобразит данные.

Данные, показанные в верхней части окна модуля, возможно отредактировать, но внесённые изменения не будут сохранены. Таблица представлена исключительно в иллюстративных целях, она не предназначена для редактирования. Модуль никоим образом не изменяет входной файл. Данные импортируются именно из входного файла, а не из отображаемой таблицы. О единственном исключении из этого правила рассказано в разделе Ценные бумаги и торговые символы далее.

Модуль определяет подходящий Разделитель (обычно выбрать другой нельзя). Попытка выбрать другой разделитель приведёт к сбросу заданных параметров. Также имеется поле, в котором возможно выбрать Разделитель текста, но обычно подходит кавычка ("). Затем нажмите кнопку Далее. В зависимости от ранее выбранных параметров, будет выполнен переход на страницу банковских операций или страницу инвестирования.

### Мастер импорта файлов CSV: банковские операции

На этой странице возможно выбрать номера столбцов, из которых следует импортировать данные соответствующих полей.

Для большинства полей достаточно воспользоваться раскрывающимся списком для выбора столбца. Но имеется и несколько особых параметров настройки.

- В центре страницы расположены кнопки-переключатели. Если в файле все значения содержатся в одном столбце, выберите столбец Сумма. Если же для расходов и поступлений предусмотрены отдельные столбцы, выберите столбец Расход/приход. Соответственно, станет активным либо поле выбора столбца Сумма, либо поля выбора столбцов Расход и Приход.

- Для поля «Примечание» возможно выбрать несколько столбцов, совершив последовательный выбор. Уже выбранные столбцы примечаний отмечены в раскрывающемся списке звёздочкой (*). Если выбрать таким образом несколько столбцов, их содержимое будет последовательно включено в поле «Примечание».

- При попытке выбрать один и тот же столбец для двух полей, модуль отобразит предупреждение и отменит оба выбора. Тем не менее, возможно использовать один и тот же столбец для полей Контрагент/Описание и Примечание. Если выбрать столбец для поля Контрагент/Описание и затем выбрать тот же столбец для поля Примечание, будет показано предупреждение о том, что выбраны одинаковые столбцы, и предложение продолжить. Чтобы продолжить, выберите ответ Да.

- Причиной для использования содержимого поля «Контрагент/Описание» в поле «Примечание» является то, что исходное содержание поля «Контрагент/Описание» может быть полностью изменено при установлении соответствия операций в &kmymoney;. Использование данных в поле «Примечание» позволяет сохранить первоначальный текст, который в ином случае был бы утерян.

Если сделан неверный выбор, просто выберите другой вариант. Если требуется внести несколько изменений, нажмите кнопку Очистить.

По окончании выбора столбцов для всех необходимых полей станет доступна кнопка Далее. Нажмите её для перехода к следующему этапу.

### Мастер импорта файлов CSV: инвестиции

Эта страница похожа на страницу Банковские операции, но её структура несколько сложнее. Назначение большинства параметров очевидно. Впрочем, несколько пунктов могут показаться непонятными, пока пользователь не выполнит процедуру импорта один или два раза.

- Как и на странице Банковские операции, для поля «Примечание» возможно выбрать несколько столбцов.

- В поле Тип/Действие возможно указать столбец, который содержит тип действия: «Покупка», «Продажа», «Дивиденды» и так далее.

- Поле выбора Коэффициент курса позволяет указать коэффициент/множитель для обеспечения совместимости импортируемых и сохранённых курсов. Например, если курс в импортируемом файле исчисляется в центах, а счёт в &kmymoney; исчисляется в долларах, выберите 0.01. Или, если курс в файле данных &kmymoney; исчисляется в долларах, как и импортируемый файл CSV, установите значение Коэффициент курса равным 1.0.

- С помощью поля Столбец комиссии возможно указать, имеется ли в файле отдельный столбец для комиссии. Следует обратить внимание, что комиссия уже могла быть учтена в цене. Если имеется комиссия в виде процентов, а не конкретной суммы, установите флажок Комиссия в процентах. На этой странице это единственное поле, в подпись которого включено слово «столбец»; оно добавлено, чтобы подчеркнуть, что это столбец комиссии, а не настоящая сумма комиссии.

- Под полями выбора столбцов расположены две области для идентификации ценных бумаг. В файле могут содержаться данные об одной или нескольких ценных бумагах (в зависимости от брокера или финансового учреждения).

  - Если файл содержит операции, связанные только с одной ценной бумагой, название которой может быть указано в строке заголовка, это название следует указать в поле Название. Указанное название будет добавлено в раскрывающийся список для использования в дальнейшем. Если в будущем это название потребуется удалить из списка, выберите его и нажмите кнопку Скрыть ценную бумагу (название будет удалено из списка, но не из основного файла &kmymoney;).

  - Если в файле содержатся операции по нескольким ценным бумагам, каждая из них будет обозначаться соответствующим торговым символом в столбце, а более подробное описание будет содержаться в другом столбце. Выберите эти столбцы в полях выбора Символ и Подробно. Если ценной бумаге не соответствует официальный торговый символ, возможно указать псевдосимвол; это вполне допустимо, если он будет служить уникальным идентификатором этой ценной бумаги в импортируемом файле. Иногда тип действия встроен в столбец подробностей и может предваряться стандартным текстом. Например, если поле содержит type: dividend, перейдите в текстовое поле Фильтр и введите type: , включая пробел в конце.

По завершении выбора всех необходимых полей станет активной кнопка Далее. Нажмите её для перехода к следующему этапу.

### Мастер импорта файлов CSV: строки

На этой странице возможно указать, следует ли игнорировать какие-либо строки в начале или конце файла. Также возможно указать формат любого столбца дат.

### Первая строка

Укажите значение, чтобы модуль импорта выполнял пропуск указанного количества строк заголовка файла. Заданное значение будет сохранено в этом профиле для использования в дальнейшем. Значения для первой и последней строк взаимосвязаны. Значение первой строки не может быть больше значения последней строки. Если не удаётся изменить значение, установленное в поле выбора Первая строка, попробуйте изменить значение последней строки.

### Последняя строка

Модуль импорта автоматически подставит в это поле номер последней строки в файле или последнее сохранённое значение. Изменить его будет необходимо только в том случае, если в файле присутствуют строки нижнего колонтитула, которые должны быть проигнорированы модулем импорта. Если этого не сделать, вероятно, будет показано предупреждение об ошибке в данных при обработке некорректных данных модулем импорта. Если значение поля Последняя строка не удаётся изменить, попробуйте изменить значение поля Первая строка.

### Формат даты

Этот параметр необходимо настроить в соответствии с очерёдностью указания года, месяца и дня в датах, содержащихся в файле. Если с помощью модуля будет обнаружена несовместимость данных с указанным значением этого параметра, при импорте будет показано соответствующее предупреждение. Тем не менее, если значение этого параметра будет неверным и несовместимость не будет обнаружена (если в данных значение дней не превышает 12, месяц и день могут быть перепутаны), модуль просто выдаст неверные данные. В таком случае ошибку будет легко обнаружить в книге учёта по завершении импорта.

По завершении настройки станет активной кнопка Далее. Нажмите её для перехода к следующему этапу.

### Мастер импорта файлов CSV: ценные бумаги и торговые символы

Если выполняется обработка файла записей инвестиций, после настройки параметров на странице Строки будет необходимо убедиться, что программе удалось правильно установить соответствие ценных бумаг в импортируемом файле бумагам в файле &kmymoney;. Будет открыто другое окно, отображающее ценные бумаги и торговые символы, которые содержатся в импортируемом файле. Обратите внимание, что вносимые на этой странице изменения будут импортированы (в отличие от данных, отображаемых в основных окнах мастера).

Завершить настройку параметров на этой странице очень просто, если учитывать следующее:

- Каждая строка представляет собой одну операцию. Строки могут дублироваться. Это нормально.

- Каждое название ценной бумаги должно в точности совпадать с указанным в &kmymoney;. При несовпадении будет создана запись новой ценной бумаги, что, скорее всего, нежелательно (за исключением случая покупки новой ценной бумаги).

- Для каждой ценной бумаги должен отображаться торговый символ.

- На этой странице присутствуют только торговый символ ценной бумаги и её название. Любые другие сведения, отображаемые изначально (например, дата или тип действия), сохраняются в самом импортируемом файле, но не будут показаны на этой странице.

Чтобы отредактировать торговый символ или название ценной бумаги, сделайте двойной щелчок по соответствующей ячейке. При необходимости название ценной бумаги возможно изменить в одной из соответствующих строк. Если в импортируемом файле присутствует правильное название ценной бумаги, выберите его с помощью двойного щелчка, а затем скопируйте и вставьте/отредактируйте его, в зависимости от того, использовался ли в &kmymoney; другой его вариант или сокращение. Если отредактировать название ценной бумаги, изменение будет применено ко всем строкам с тем же торговым символом.

Любая строка, не содержащая торгового символа, будет обрабатываться как брокерский счёт. Если в операции задействован другой счёт, например, расчётный или брокерский счёт для полученных дивидендов или осуществления выплаты, появится всплывающее окно, в котором будет предложено указать название счёта для перевода. Обычно это брокерский счёт, который был выбран или создан при создании инвестиционного счёта. Аналогичным образом укажите номер столбца, содержащего данные контрагента, если это будет предложено сделать. Если при указании названия счёта допущена ошибка, импорт будет продолжен, но программе &kmymoney; не удастся распознать счёт и соответствующие операции будут отмечены, как не имеющие привязки к статьям. Если необходимый счёт имеет очень длинное название, просто введите первые несколько символов. Импорт будет продолжен, но операции будут отмечены программой &kmymoney;, как не имеющие привязки к статьям, и по завершении импорта потребуется выбрать правильный счёт для перевода. По завершении настройки нажмите кнопку OK. Процесс импорта будет продолжен в окне &kmymoney;.

Если с одной ценной бумагой связаны несколько операций, возможно отредактировать сразу все эти операции с помощью множественного выбора. Например, чтобы добавить торговый символ в несколько строк, нажмите и удерживайте клавишу &Ctrl; при выборе операций в столбце символа. Продолжая удерживать клавишу &Ctrl; (все ячейки символов должны быть выделены), щёлкните по одной из них и введите торговый символ. Щёлкните в пределах окна, но за пределами этого столбца, или нажмите клавишу &Enter; (не кнопку OK). Теперь, когда для этих операций задан один и тот же торговый символ, сделайте двойной щелчок по одной из записей описания и отредактируйте название ценной бумаги необходимым образом. Щёлкните в другой части окна (или нажмите клавишу &Enter;) для подтверждения правки: будут изменены все записи. В остальных записях будут отображаться торговые символы, полученные из операций в импортируемом файле.

Теперь нажмите кнопку OK и затем кнопку Импорт. Укажите в поле Ввод счёта название брокерского или расчётного счёта для средств. Если указано корректное название, этот счёт будет использован. Если корректное название достаточно длинное, возможно указать первые несколько символов. Модуль импорта примет эти данные, но после импорта будет необходимо указать для операций в книге учёта корректный счёт. В поле Брокерский счёт укажите номер столбца, содержащего соответствующее описание. В поле Недопустимая операция может быть показано несколько записей, если тип действия не соответствует комбинации количества, цены и суммы. Воспользуйтесь опцией Выберите тип операции в каждом из уведомлений для просмотра раскрывающегося списка корректных типов действий для соответствующей комбинации значений.

Импорт выполнен — теперь необходимо выбрать в &kmymoney; инвестиционный счёт, который следует использовать. Если имеются операции брокерского типа, также потребуется выбрать расчётный счёт.

### Мастер импорта файлов CSV: завершение

При переходе на последнюю страницу мастера значения будут проверены автоматически. Если столбец или столбцы числовых значений выделяются зелёным цветом, это означает, что проверка прошла успешно и остаётся только нажать кнопку Импорт CSV, после чего будет выполнен переход в основное окно &kmymoney;. Но в том случае, если значение первой и/или последней строк указано неверно или выбраны неправильные столбцы, для выделения будет использоваться красный цвет, а также появится сообщение с описанием ошибки. После этого потребуется нажать кнопку Назад для перехода на соответствующую страницу и исправления ошибки.

Если используются столбцы расхода и прихода, в одном из них могут отсутствовать записи (это не является ошибкой). Соответственно, что в этом столбце нет десятичного разделителя, поэтому будет показано предупреждение. В таком случае возможно нажать одну из кнопок обработки (Принять или Принять все).

### Десятичный разделитель

Ещё одной возможной проблемой является то, что выбранный десятичный разделитель может быть неверным. Чтобы исправить эту ошибку, выберите разделитель, соответствующий данным. Обычно изменения вносить не требуется. Обратите внимание, что Десятичный разделитель должен соответствовать данным в файле, а не локали. Если в локали установлено другое значение, будет выполнено преобразование. Если использование текущего разделителя даёт корректные результаты, в верхней части окна числовые поля будут выделены зелёным цветом. Если возникнут ошибки, эти поля будут выделены красным цветом. Цвет также будет отражать результат применения параметров Первая строка и Последняя строка. Предупреждения также могут быть показаны, если в каких-либо из выбранных ячеек отсутствует выбранный разделитель.

### Разделитель разрядов

Это значение не требуется выбирать, так как оно устанавливается автоматически в соответствии со значением параметра Десятичный разделитель. Оно предоставляется исключительно в ознакомительных целях. Кроме того, поле выбора будет неактивным, если ни одно из импортируемых значений не превышает и не равняется 1000.

### Импорт CSV

При нажатии этой кнопки модуль выполнит фактический импорт данных из файла с учётом заданных пользователем параметров. Затем программа &kmymoney; отобразит запрос на выбор записи счёта, в которую следует импортировать данные.

### Создать файл QIF

С помощью этой кнопки после завершения импорта возможно сохранить данные из файла CSV как файл QIF, если в этом есть необходимость. Эта возможность была изначально предусмотрена в модуле и, собственно, обусловила его создание. Но, так как программа &kmymoney; теперь сама по себе поддерживает экспорт файла QIF, эта возможность стала бесполезной и, вероятно, будет удалена в дальнейшем.

### Завершение

Если выполнялся импорт банковских операций, модуль завершит работу, а программа &kmymoney;, как говорилось выше, отобразит запрос на выбор правильной записи счёта, в которую следует импортировать данные. Если же выполнялся импорт инвестиций, возможно, потребуется выполнить некоторые другие действия. Если во время импорта какой-либо операции модулю не удалось обнаружить корректный тип операции, модуль отобразит запись этой операции, и пользователь сможет выбрать корректный тип для замены (в зависимости от комбинации значений количества, цены и суммы). Модуль проверяет содержимое столбцов для каждой операции, чтобы обеспечить их соответствие типу действия. Например, если имеется количество, но нет цены или суммы, предполагается, что такой операцией может быть только увеличение или уменьшение количества ценных бумаг. Если же имеется сумма, но нет количества или цены, предполагается, что речь идёт о дивидендах, и так далее.

Если заданные параметры следует сохранить, нажмите кнопку Готово. После этого модуль будет закрыт.

### Добавление типов действий для инвестиций

Если в выписках по инвестициям часто встречаются типы действий, которые не распознаются модулем, просто добавьте их в соответствующий раздел файла ресурсов. (Дополнительные сведения об этом файле доступны далее.) Например, в разделе `[InvestmentSettings]` в поле `BuyParam` содержатся записи для действий `Purchase`, `Buy`, `New Inv` и `Switch In`. Если обнаружена другая запись, добавьте её в соответствующий список и перезапустите модуль. Записи в разных полях могут быть похожи, и может быть выбран не тот тип действия. Модуль обрабатывает списки в следующем порядке: `Shrsin`, `DivX`, `Reinvdiv`, `Brokerage`, `Buy`, `Sell` и `Remove`. Изменение порядка списков не сработает ожидаемым образом, поскольку записи в файле ресурсов упорядочены в алфавитном порядке. Если в ошибочном параметре нет необходимости, возможно просто удалить его из файла. Если же это невозможно, потребуется отредактировать файл импортируемых данных.

### Настройка модуля импорта файлов CSV

Хорошо известный недостаток формата QIF — его нечёткость. В отношении файлов CSV имеется такая же проблема, но даже в большей степени: какой-либо согласованный стандарт отсутствует. В файлах, содержащих записи инвестиций, различные типы действий могут быть описаны очень по-разному. В модуле предусмотрено определение типов действий в файле ресурсов под названием `csvimporterrc`. Расположение этого файла зависит от дистрибутива. В системе под управлением &Linux; оно будет таким: `$KDEHOME/share/config`, где `$KDEHOME` обычно является каталогом .config в домашнем каталоге. Если выполняется переход с версии &kmymoney;, предшествующей 5.0, прежним расположением `$KDEHOME` был каталог `.kde4`. Пользователь может добавить в файл ресурсов тот тип действия, который не встречался разработчику. Если на момент первого запуска модуля импорта этот файл не существует, модуль создаст версию по умолчанию, в которой содержатся наиболее распространённые описания.

Для удобства пользователя с модулем поставляется набор образцов файлов CSV (они находятся в папке `kmymoney/contrib/csvimporter/` в дереве исходного кода). Например, образец файла инвестиций содержит следующий тип действия: «`ReInvestorContract Buy : ReInvested Units`». В процессе проверки первым обнаруженным соответствием будет `ReInv` в `ReInvestorContract Buy`, поэтому операция классифицируется как `Reinvdiv`, несмотря на то что тип `Buy` также упоминается. Другим примером является назначение типа действия `Reinvest`, несмотря на то что операция не содержит ни цену, ни сумму, а только количество, следовательно, типом операции следует считать `Add Shares` (увеличение числа акций) или `Shrsin`.

Когда этот модуль был создан, в качестве образцов было использовано не так много форматов файлов инвестиций, поэтому вполне возможно, что при в ходе работы с модулем встретится файл, который не удастся обработать корректно. Если это произойдёт, отправьте соответствующий пример (предварительно убрав или заменив персональные данные) в список рассылки пользователей (&userlist;) или разработчиков (&devlist;) &kmymoney;, чтобы разработчики смогли внести в модуль необходимые улучшения.