Загрузить пример
Импорт данных в Аксапте
Возможности импорта из текстового файла
Требования к текстовому файлу
Рекомендации и советы по импорту
Пример

Загрузить пример

RarПример настройки импорта плана счетов

Распакуйте и загрузите с помощью стандартного механизма импорта. Главное меню \ Администрирование \ База данных \ Экспорт/Импорт \ Импорт.

В списке определений групп импорта у вас появится две строки. В этой статье приведен пример по строке План.

 

Импорт данных в Аксапте

Аксапта предоставляет стандартный механизм импорта из текстового файла. Найти детальное описание можно в хелпе в разделе Administrator's Guide \ Managing data \ Importing data from Other Systems.

Функция импорта доступна в Главном меню, раздел Администрирование \ База данных \ Экспорт/Импорт \ Группы определения. Каждая строка представляет свои правила и настройки импорта. Есть два вида импорта - из обычного текстового файла и из файла в собственном Аксаптовском формате.

Группы определения импорта

Для того, чтобы импорт выполнялся из текстового файла, необходимо оставить галочку в поле Файл определений (Definition file) незаполненной. На картинке группы Адреса, Апольз, АСертиф, ГТД - это определение импорта из текстового файла.

 

Возможности импорта из текстового файла

 

Требования к текстовому файлу

 

Рекомендации и советы по импорту

Автор этих рекомендаций - Андрей Гершун. Андрей, спасибо за отличный совет.

Лучше не пользоваться кавычками, поскольку тогда возникает задача обработать двойные кавычки. Лучше использовать специальный символ для разделителя между полями. По совету Андрея Гершуна, я использую символ ~. Обычно этот символ не используется пользователями. Если он все же используется, то можно попробовать обратный апостроф ` или другой редко используемый символ.

Как правило, данные для импорта готовятся в Экселе. Текстовый файл лучше готовить самостоятельно. Укажите формулу, которая в одной и колонок готовит текст. А затем, перенесите через буфер обмена (clipboard) данные этой колонки в текстовый файл.

Стандартный экспорт в текстовый файл не дает нужной гибкости. Когда вы пишете формулу, то вы можете:

И еще один совет. Значения перечислимых типов лучше задавать не номером, а непосредственно текстом.

18.04.05, дополнение Hezl: Можно использовать и табуляцию в качестве разделителя. Откройте Notepad, вставьте символ табуляции в текст, скопируйте этот символ в буфер обмена, затем сделайте Paste в Аксаптовском поле Разделитель записей.

 

Пример

Например, мы хотим импортировать план счетов.

1.
Готовим данные в Экселе.

Данные для импорта, подготовленные в Excel

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

2.
Копируем колонку AQ с подготовленным текстом в буфер обмена (clipboard) и переносим в текстовый файл. Сделать это можно в Notepad, Word'е или в FAR'е. Текст должен быть в windows-кодировке. Записываем файл.

Данные для импорта, подготовленные в Notepad

3.
Готовим параметры импорта. Создаем группу определения План, снимаем галочку с поля Определение файла. Нажимаем кнопку настройка таблиц. Создаем определение для таблицы LedgerTable. Указываем файл, из которого импортировать данные. Устанавливаем статус Удаление и импорт.

Внимание: после импорта статус изменяется. Если нужно повторить импорт, то надо снова изменить статус. Таким образом, можно настроить импорт нескольких таблиц, а импортировать только некоторые из них.

Настройка импорта. Закладка Обзор.

Записываем. Переходим на закладку разное и устанавливаем разделитель ~. Устанавливаем уникальное поле - AccountNum.

Настройка импорта. Закладка Разное.

4.
Теперь определяем поля. Нажимаем на кнопку Настройка полей. Устанавливаем поля и их порядок в файле.

Настройка полей.

5.
Теперь случай сложнее. Попробуем настроить импорт настройки итоговых полей. Для итоговых полей надо указать диапазон, по которому производится суммирование. Диапазон указывается в таблице LedgerTableInterval.

Сложность состоит в том, что каждая запись в этой таблице может содержать настройку итога не только счетов плана счетов, но и настройку итоговых полей в других местах. Поле AccountTableId содержит идентификатор таблицы, для которой указан диапазон. Если мы вводим диапазон для счета плана счетов, то здесь должен быть код таблицы LedgerTable - 221.

Есть еще одна сложность. Нужно указать RecID той записи, для которой указан диапазон. Т.е. мы должны установить здесь RecID записей из плана счетов. Запоминать эти RecID в Экселевской таблице не стоит. Поскольку после каждого удаления и переимпорта RecID будут другими.

Кроме того, создавать отдельный файл не очень удобно. Было бы гораздо удобнее, если бы диапазон задавался на том же листе. Было бы удобнее, если диапазон не импортировался, если он не указан на листе Экселевской таблицы.

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

boolean import( LedgerTableInterval ledgerTableInterval, 
container inData )
{
   LedgerAccount accNum;
   accNum = conpeek(inData,1);
 
   if( !accNum ) return false; 
   return LedgerTable::find(accNum).AccountPlType == LedgerAccountType::sum; 
}

Настройка фильтра

Алгоритм возвращает true, когда импортируемую строку надо записывать в базу данных.

6.
Теперь перейдем к настройке полей

Настройка полей

Сделаем, чтобы для каждой записи указывался код таблицы LedgerTable. Для этого для поля AccountTableId на закладке Параметры надо указать, что инициализацию надо проводить всегда и инициализировать это поле значением 221.

Настройка полей. Параметры по умолчанию.

7.
Теперь осталось добавить алгоритм, который по коду счета будет находить RecID. Для этого для поля AccountRecID на закладке Исходные тексты программ надо добавить алгоритм

str convert(str input)
{
 
    input = strfmt("%1", LedgerTable::find(input).RecID);
    return input;
}

 

Алгоритм получает в качестве параметра строку до записи в таблицу. Алгоритм выполняет преобразование и возвращает новую строку, которая будет записана в данное поле.

Подробнее о импорте и его алгоритмах можно прочитать в хелпе.

 

Дополнение от 18.04.05

Будьте внимательны, когда устанавливаете Уникальное поле. Обязательно обрабатывайте поле, указанное уникальным (на закладке Настройка полей уникальное поле должно быть активным).

Дело в том, что при импорте Аксапта ищет импортируемое в уникальное поле значение. Если находит запись с таким значением, то Аксапта не добавляет, а изменяет существующую запись.

Если же вы поле, указанное как уникальное, не обрабатываете, то для всех импортируемых строк данное поле получает пустое значение. А следовательно, в этом случае Аксапта запишет все импортируемые строки в одну запись.

 

Буду рад Вашим замечаниям и предложениям.
mazzy@mazzy.ru, Мазуркин Сергей