OPENDATASET — различия между версиями

Материал из GB wiki
Перейти к: навигация, поиск
 
(не показано 5 промежуточных версий этого же участника)
Строка 13: Строка 13:
 
{{Аргумент
 
{{Аргумент
 
   |Название=Датасет параметров
 
   |Название=Датасет параметров
   |Пояснение=Строка с именем или непосредственно описанием датасета, содержащего входные параметры процедуры либо '''параметры импорта файла'''. Вместо строки с описанием можно использовать ассоциативный массив.
+
   |Пояснение=Строка с именем или непосредственно описанием датасета, содержащего входные параметры процедуры либо '''параметры импорта файла'''.
 +
}}
 +
{{Аргумент
 +
  |Название=Датасет результатов
 +
  |Пояснение=Строка, определяющая имя создаваемого датасета. Если задана пустая строка ``, то датасет не будет создан (используется, если нам не интересно, что вернула процедура).
 +
}}
 +
|Результат=Нет
  
Ниже перечислены '''параметры импорта файла'''.
+
<h2>Параметры импорта файла</h2>
 +
<h6>Общие параметры</h6>
 +
* '''UseOpenOffice''' &ndash; если передано значение "1", для импорта будет принудительно использован OpenOffice (LibreOffice), в противном случае OO (LO) используется только в случае, если не установлен Microsoft Office (версии ГБ после 14.11.2023);
 +
* '''FileType''' &ndash; строка, тип файла (TXT, CSV, DBF, XLS, CDS);
 +
* '''FileName''' &ndash; строка, имя файла;
  
Общие параметры:
+
<h6>Управление кодировкой</h6>
* FileType – строка, тип файла (TXT, CSV, DBF, XLS, CDS);
+
* '''CharSet''' &ndash; строка, тип кодировки файла. Возможны следующие значения:
* FileName – строка, имя файла;
+
**`CP866` &ndash; включает кодировку DOS;
 +
**`UTF-8` &ndash; включает кодировку UTF-8;
 +
**`WIN1251` &ndash; включает кодировку WIN1251;
 +
* <span style="color:gray;">'''CP866''' &ndash; строка, любое непустое значение означает, что текстовый файл в кодировке DOS (было в старых версиях ГБ, оставлено для совместимости);</span>
 +
* <span style="color:gray;">'''WIN1251''' &ndash; строка, любое непустое значение означает, что DBF файл в кодировке Windows (было в старых версиях ГБ, оставлено для совместимости);</span>
  
Управление кодировкой:
+
<h6>Настройка полей</h6>
* CharSet – строка, тип кодировки файла. Возможны следующие значения:
+
* '''FieldCount''' &ndash; число, количество полей в строке файла (по умолчанию количество полей определяется по первой импортируемой строке);
**`CP866` – включает кодировку DOS;
+
* '''FieldsMap''' &ndash; строка, содержит описание полей создаваемого датасета.<br>Представляет собой список формул вида имя,тип=выражение через «;», определяющих поля создаваемого датасета и их вычисление через поля исходного файла. Возможные значения для типа поля: I, F, D, S, B.<br>При задании константы '''`auto`''' для файла типа DBF, структура '''Датасета результатов''' повторит структуру импортируемого файла DBF.
**`UTF-8` – включает кодировку UTF-8;
+
:Если FieldsMap не задан, структура датасета формируется автоматически, а поля именуются как: fld0, fld1, ..., fldN (где N &ndash; количество полей, определённое по первой строке файла, либо заданное в параметре FieldCount). Тип таких полей &ndash; S, размер поля &ndash; 250 (см. также FieldSize).
**`WIN1251` – включает кодировку WIN1251;
+
* '''Separator''' &ndash; строка, разделитель полей в текстовом файле;
* <span style="color:gray;">CP866 – строка, любое непустое значение означает, что текстовый файл в кодировке DOS (было в старых версиях ГБ, оставлено для совместимости);</span>
+
* '''Tabs''' &ndash; строка, список (через символ ";") отступов полей в текстовом файле, отсчет начинается с 0;
* <span style="color:gray;">WIN1251 – строка, любое непустое значение означает, что DBF файл в кодировке Windows (было в старых версиях ГБ, оставлено для совместимости);</span>
+
* '''FieldSize''' &ndash; размер строковых полей. Если FieldSize не задан, а количество полей более 200, то размер строковых полей будет принудительно установлен равным 40 символам.
  
Настройка полей:
+
<h6>Управление строками</h6>
* FieldCount – число, количество полей в строке файла (по умолчанию количество полей определяется по первой импортируемой строке);
+
* '''StartLine''' &ndash; число, номер строки с которой начинается импорт (отсчет начинается с 0);
* FieldsMap – строка, содержит описание полей создаваемого датасета.<br>Представляет собой список формул вида имя,тип=выражение через «;», определяющих поля создаваемого датасета и их вычисление через поля исходного файла. Возможные значения для типа поля: I, F, D, S, B.<br>При задании константы '''`auto`''' для файла типа DBF, структура '''Датасета результатов''' повторит структуру импортируемого файла DBF;
+
* '''EndLine''' &ndash; число, номер строки, на которой заканчивается импорт (отсчет начинается с 0). Отрицательное значение означает, что не нужно импортировать соответствующее число последних строк;
* Separator – строка, разделитель полей в текстовом файле;
+
* '''StopIfEmpty''' &ndash; строка, любое непустое значение означает, что нужно остановить импорт, встретив пустую строку (для файлов Excel проверяется первая ячейка в строке);
* Tabs – строка, список (через символ ";") отступов полей в текстовом файле, отсчет начинается с 0;
+
* '''Filter''' &ndash; выражение для фильтрации строк исходного файла;
 
 
Управление строками:
 
* StartLine – число, номер строки с которой начинается импорт (отсчет начинается с 0);
 
* EndLine число, номер строки, на которой заканчивается импорт (отсчет начинается с 0). Отрицательное значение означает, что не нужно импортировать соответствующее число последних строк;
 
* StopIfEmpty строка, любое непустое значение означает, что нужно остановить импорт, встретив пустую строку;
 
* Filter выражение для фильтрации строк исходного файла;
 
 
:''Из-за бага в dbclient (и не только) в старых версиях ГБ (до 04.10.2017) при задании фильтра результирующий датасет содержал в логе изменений "мусор", т.е. записи, отсеянные фильтром. Эти записи воспринимались udf'кой как не удалённые, из-за чего при передаче датасета в процедуру, она получала неотфильтрованный набор записей.''
 
:''Из-за бага в dbclient (и не только) в старых версиях ГБ (до 04.10.2017) при задании фильтра результирующий датасет содержал в логе изменений "мусор", т.е. записи, отсеянные фильтром. Эти записи воспринимались udf'кой как не удалённые, из-за чего при передаче датасета в процедуру, она получала неотфильтрованный набор записей.''
 
:''Обойти это можно путём задания параметра '''LogChanges=1''', что позволит обойти баг dbclient, но резко увеличит объём расходуемой памяти и снизит скорость загрузки. Вариант, когда при загрузке не используется Filter, а ненужные записи удаляются позже (с помощью функции Delete), также потребует задание параметра '''LogChanges=1'''.''
 
:''Обойти это можно путём задания параметра '''LogChanges=1''', что позволит обойти баг dbclient, но резко увеличит объём расходуемой памяти и снизит скорость загрузки. Вариант, когда при загрузке не используется Filter, а ненужные записи удаляются позже (с помощью функции Delete), также потребует задание параметра '''LogChanges=1'''.''
* Comment строка, символ комментария в текстовом файле. При встрече данного символа в начале строки, эта строка игнорируется и не попадает в '''Датасет результатов''';
+
* '''Comment''' &ndash; строка, символ комментария в текстовом файле. При встрече данного символа в начале строки, эта строка игнорируется и не попадает в '''Датасет результатов''';
* ProcessCR строка, любое непустое значение включает режим импорта XLS-файлов, при котором ячейка, содержащая символы перевода строки (ячейка содержит несколько строк, введённых через Alt+Enter), импортируется как одно поле. При этом такие строки объединяются в одну через пробел.<br>При импорте по-умолчанию (значение ProcessCR не задано), такие ячейки импортируются, как несколько записей;
+
* '''ProcessCR''' &ndash; строка, любое непустое значение включает режим импорта XLS-файлов, при котором ячейка, содержащая символы перевода строки (ячейка содержит несколько строк, введённых через Alt+Enter), импортируется как одно поле. При этом такие строки объединяются в одну через пробел.<br>При импорте по-умолчанию (значение ProcessCR не задано), такие ячейки импортируются, как несколько записей;
* ProcessCRFrom число, номер строки XLS-файла, начиная с которой применяется алгоритм импорта, включенный параметром ProcessCR (отсчет начинается с 0);
+
* '''ProcessCRFrom''' &ndash; число, номер строки XLS-файла, начиная с которой применяется алгоритм импорта, включенный параметром ProcessCR (отсчет начинается с 0);
* QuoteChar строка, если задан символ кавычек (обычно - `"`), то алгоритм импорта, включенный параметром ProcessCR, объединяет строки в одну не через пробел, а через перевод строки (#13#10);
+
* '''QuoteChar''' &ndash; строка, если задан символ кавычек (обычно - `"`), то алгоритм импорта, включенный параметром ProcessCR, объединяет строки в одну не через пробел, а через перевод строки (#13#10);
 +
 
 +
<h6>Прочие параметры</h6>
 +
* '''Sheet''' &ndash; строка, название листа для импорта из Excel.
  
Прочие параметры:
 
* Sheet – строка, название листа для импорта из Excel.
 
}}
 
{{Аргумент
 
  |Название=Датасет результатов
 
  |Пояснение=Строка, определяющая имя создаваемого датасета. Если задана пустая строка ``, то датасет не будет создан (используется, если нам не интересно, что вернула процедура).
 
}}
 
 
  |Пример=Вызов отчёта "Реестр документов" (в датасете dsDoc - входные параметры процедуры):
 
  |Пример=Вызов отчёта "Реестр документов" (в датасете dsDoc - входные параметры процедуры):
  OPENDATASET(
+
  OpenDataSet(
 
   `Documents_PeriodRegistry`,
 
   `Documents_PeriodRegistry`,
 
   `dsDoc`,
 
   `dsDoc`,
Строка 61: Строка 65:
 
  )
 
  )
  
Не все процедуры возвращают массивы с данными. Но при этом некоторые процедуры могут возвращать различные сообщения о результатах своей работы, например ''"Обработано 1234 строк. Найдено и отмечено 110 товаров"''. Такое сообщение в процедурах принято передавать в выходном датасете в поле Message, а вывести его можно так:
+
Некоторые процедуры могут возвращать сообщения о результатах своей работы, например ''"Обработано 1234 строк. Найдено и отмечено 110 товаров"''. Такое сообщение в процедурах принято передавать в выходном датасете в поле Message:
  
  OpenDataSet(`MZ_ArticulsImport`, `dsTXT`, `dsRes`),
+
  OpenDataSet(
  IfEmpty(dsRes.Message, 0, Info(dsRes.Message))
+
  `MZ_ArticulsImport`,
 +
  `dsTXT`,
 +
  `dsRes`
 +
),
 +
  IfEmpty(
 +
  dsRes.Message,
 +
  0,
 +
  Info( dsRes.Message )
 +
)
  
 
Создание датасета из массива:
 
Создание датасета из массива:

Текущая версия на 06:44, 15 ноября 2023

Открывает датасет при помощи вызова процедуры, либо путем импорта данных из файла (текстового, DBF, Excel, CDS)

Синтаксис

OPENDATASET(Имя процедуры, Датасет параметров, Датасет результатов)

Аргументы

Имя процедуры
Строка, содержащая одно из значений:
  • имя процедуры в БД. Имя процедуры может иметь вид `GBDB://База/Процедура` для осуществления распределенных вызовов либо `GBTCP://Адрес:Порт/Процедура` для вызова метода бизнес-сервера;
  • константа `file:` для импорта данных из файла;
  • константа `copy:` для создания копии датасета;
  • константа `array:` для создания датасета на основе данных из ассоциативного массива.
Датасет параметров
Строка с именем или непосредственно описанием датасета, содержащего входные параметры процедуры либо параметры импорта файла.
Датасет результатов
Строка, определяющая имя создаваемого датасета. Если задана пустая строка ``, то датасет не будет создан (используется, если нам не интересно, что вернула процедура).

Тип результата

Нет

Параметры импорта файла

Общие параметры
  • UseOpenOffice – если передано значение "1", для импорта будет принудительно использован OpenOffice (LibreOffice), в противном случае OO (LO) используется только в случае, если не установлен Microsoft Office (версии ГБ после 14.11.2023);
  • FileType – строка, тип файла (TXT, CSV, DBF, XLS, CDS);
  • FileName – строка, имя файла;
Управление кодировкой
  • CharSet – строка, тип кодировки файла. Возможны следующие значения:
    • `CP866` – включает кодировку DOS;
    • `UTF-8` – включает кодировку UTF-8;
    • `WIN1251` – включает кодировку WIN1251;
  • CP866 – строка, любое непустое значение означает, что текстовый файл в кодировке DOS (было в старых версиях ГБ, оставлено для совместимости);
  • WIN1251 – строка, любое непустое значение означает, что DBF файл в кодировке Windows (было в старых версиях ГБ, оставлено для совместимости);
Настройка полей
  • FieldCount – число, количество полей в строке файла (по умолчанию количество полей определяется по первой импортируемой строке);
  • FieldsMap – строка, содержит описание полей создаваемого датасета.
    Представляет собой список формул вида имя,тип=выражение через «;», определяющих поля создаваемого датасета и их вычисление через поля исходного файла. Возможные значения для типа поля: I, F, D, S, B.
    При задании константы `auto` для файла типа DBF, структура Датасета результатов повторит структуру импортируемого файла DBF.
Если FieldsMap не задан, структура датасета формируется автоматически, а поля именуются как: fld0, fld1, ..., fldN (где N – количество полей, определённое по первой строке файла, либо заданное в параметре FieldCount). Тип таких полей – S, размер поля – 250 (см. также FieldSize).
  • Separator – строка, разделитель полей в текстовом файле;
  • Tabs – строка, список (через символ ";") отступов полей в текстовом файле, отсчет начинается с 0;
  • FieldSize – размер строковых полей. Если FieldSize не задан, а количество полей более 200, то размер строковых полей будет принудительно установлен равным 40 символам.
Управление строками
  • StartLine – число, номер строки с которой начинается импорт (отсчет начинается с 0);
  • EndLine – число, номер строки, на которой заканчивается импорт (отсчет начинается с 0). Отрицательное значение означает, что не нужно импортировать соответствующее число последних строк;
  • StopIfEmpty – строка, любое непустое значение означает, что нужно остановить импорт, встретив пустую строку (для файлов Excel проверяется первая ячейка в строке);
  • Filter – выражение для фильтрации строк исходного файла;
Из-за бага в dbclient (и не только) в старых версиях ГБ (до 04.10.2017) при задании фильтра результирующий датасет содержал в логе изменений "мусор", т.е. записи, отсеянные фильтром. Эти записи воспринимались udf'кой как не удалённые, из-за чего при передаче датасета в процедуру, она получала неотфильтрованный набор записей.
Обойти это можно путём задания параметра LogChanges=1, что позволит обойти баг dbclient, но резко увеличит объём расходуемой памяти и снизит скорость загрузки. Вариант, когда при загрузке не используется Filter, а ненужные записи удаляются позже (с помощью функции Delete), также потребует задание параметра LogChanges=1.
  • Comment – строка, символ комментария в текстовом файле. При встрече данного символа в начале строки, эта строка игнорируется и не попадает в Датасет результатов;
  • ProcessCR – строка, любое непустое значение включает режим импорта XLS-файлов, при котором ячейка, содержащая символы перевода строки (ячейка содержит несколько строк, введённых через Alt+Enter), импортируется как одно поле. При этом такие строки объединяются в одну через пробел.
    При импорте по-умолчанию (значение ProcessCR не задано), такие ячейки импортируются, как несколько записей;
  • ProcessCRFrom – число, номер строки XLS-файла, начиная с которой применяется алгоритм импорта, включенный параметром ProcessCR (отсчет начинается с 0);
  • QuoteChar – строка, если задан символ кавычек (обычно - `"`), то алгоритм импорта, включенный параметром ProcessCR, объединяет строки в одну не через пробел, а через перевод строки (#13#10);
Прочие параметры
  • Sheet – строка, название листа для импорта из Excel.

Примеры

Вызов отчёта "Реестр документов" (в датасете dsDoc - входные параметры процедуры):

OpenDataSet(
  `Documents_PeriodRegistry`,
  `dsDoc`,
  `dsRes`
)

Некоторые процедуры могут возвращать сообщения о результатах своей работы, например "Обработано 1234 строк. Найдено и отмечено 110 товаров". Такое сообщение в процедурах принято передавать в выходном датасете в поле Message:

OpenDataSet(
  `MZ_ArticulsImport`,
  `dsTXT`,
  `dsRes`
),
IfEmpty(
  dsRes.Message,
  0,
  Info( dsRes.Message )
)

Создание датасета из массива:

OpenDataSet(
  `array:`,
  [
    [
      `a` : 1,
      `b` : 2
    ]
  ],
  `ds`
)