Перейти к содержаниюСправка

FlexField. Гибкие поля

Гибкие поля добавляют дополнительные колонки к справочникам и документам системы: клиентам, товарам, точкам продаж, поступлениям и другим. Методы раздела позволяют получить список настроенных гибких полей, создать новое поле, изменить или удалить его.

Как получить ключ, как формируются запросы и какие бывают ответы и ошибки — в статье Общие сведения. Здесь описаны только особенности методов раздела flexField.

Что такое гибкие поля

Допустим, вы продаёте одежду и настроили для справочника «Клиенты» поле «Размер». Тогда у каждого клиента можно указать размер одежды: в карточке клиента в панели управления или через API. Настроенные гибкие поля видны в панели управления в разделе Настройки → Гибкие поля.

Как записать значение поля через API, описано ниже, в разделе «Как задать значение гибкого поля в записи».

Методы

Метод Адрес Что делает
Список справочников /api/flexField/listTables Возвращает справочники, для которых можно настраивать гибкие поля
Получить поля /api/flexField Возвращает настроенные гибкие поля
Создать или изменить поле /api/flexField/update Обновляет гибкое поле или создаёт новое
Удалить поле /api/flexField/delete Удаляет гибкое поле

Где передавать параметры. Ключ apikey и формат format принимаются и в адресной строке, и в теле POST-запроса. Параметры, по которым ищется поле — id, table_name, name и create_if_not_exist — читаются только из адресной строки (GET). Остальные параметры поля (attr_type, enabled, default_value, list_values, attr_num) можно передавать и в адресной строке, и в теле POST.

Значения с пробелами и кириллицей кодируйте: например, поле «Размер» в адресе записывается как name=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80.

Справочники

Метод listTables возвращает справочники, поддерживающие гибкие поля. Код справочника указывается в параметре table_name других методов.

GET https://[компания].myvirtualpos.ru/api/flexField/listTables?apikey=MySecret
success 1 — данные получены
type Тип данных, в ответе всегда frexfield.tables (написание сохранено для совместимости)
count Количество справочников
tables Список справочников. Каждый обёрнут в объект table с полями name (код справочника) и description (название)
{
  "success": 1,
  "type": "frexfield.tables",
  "count": 25,
  "tables": [
    { "table": { "name": "warehouse", "description": "Точка продаж" } },
    { "table": { "name": "location", "description": "Территория" } }
  ]
}

Тот же ответ при format=xml (сокращённо):

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <success>1</success>
  <type>frexfield.tables</type>
  <count>25</count>
  <tables>
    <table><name>warehouse</name><description>Точка продаж</description></table>
    <table><name>location</name><description>Территория</description></table>
  </tables>
</root>

Полный список кодов:

Код Справочник Код Справочник
warehouse Точка продаж customer Клиент
location Территория customer_group Клиентская группа
organisation Юридическое лицо customer_list Клиентский список
item Товар customer_list_item Клиентский список :: элемент
onhand Товарный остаток requisition Заявка на пополнение
manufacturer Производитель orders Заказ покупателя
groups_name Группа товаров order_state Заказ покупателя :: статусы заказа
supplier Поставщик html_templates Шаблоны документов
supplier_item Справочник товаров поставщика shipment Отгрузка
inflow Поступление pricelist Прайслист
movegood Перемещение pricelist_lines Прайслист :: строка прайслиста
inventory Инвентаризация receipt Чек продажи
user Пользователь

Типы гибких полей

Тип задаётся параметром attr_type:

Значение Тип Описание
text Текст Однострочный текст
textarea Многострочный текст Текст из нескольких строк
list Один из списка Выбор одного значения из list_values
multi Несколько из списка Выбор нескольких значений из list_values
date Дата Дата

Для типов list и multi допустимые значения задаются в list_values строкой через запятую: Да,Нет,Возможно. Пробелы вокруг значений отбрасываются.

Каждое поле занимает одну колонку attributeN справочника, где N — значение attr_num. Количество колонок ограничено: у клиента, например, их 15.

Получение полей

GET https://[компания].myvirtualpos.ru/api/flexField?apikey=MySecret&table_name=customer

Параметры запроса

id Число. Ид гибкого поля. Если указан, возвращается только это поле
table_name Строка. Код справочника: возвращаются только его поля
name Строка. Название поля: возвращаются только поля с таким названием
format json (по умолчанию) или xml

Параметры можно сочетать, условия объединяются по «и». Если параметров нет, возвращаются все настроенные поля.

Структура ответа

success 1 — данные получены
type Тип данных, всегда flexfield
count Количество полей в ответе
flexfields Список полей. Каждое обёрнуто в объект flexfield

Поля гибкого поля

id Число. Ид гибкого поля
table_name Строка. Код справочника, к которому относится поле
name Строка. Название поля
attr_num Число. Номер колонки attributeN в справочнике. Системное имя поля — attribute + attr_num
attr_type Строка. Тип поля, см. раздел «Типы гибких полей»
enabled Строка. Y — поле включено, N — отключено
default_value Строка. Значение по умолчанию, пустая строка, если не задано
list_values Строка. Допустимые значения через запятую для типов list и multi, иначе пустая строка
created_date, last_update_date Строка. Дата и время создания и последнего изменения, формат гггг-мм-дд чч:мм:сс

Пример ответа

{
  "success": 1,
  "type": "flexfield",
  "count": 1,
  "flexfields": [
    {
      "flexfield": {
        "id": 7,
        "table_name": "customer",
        "name": "Откуда узнали",
        "attr_num": 2,
        "attr_type": "list",
        "enabled": "Y",
        "default_value": "",
        "list_values": "Сайт,Журнал,Листовка",
        "created_date": "2026-02-02 16:12:50",
        "last_update_date": "2026-02-02 16:12:50"
      }
    }
  ]
}

Тот же ответ при format=xml:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <success>1</success>
  <type>flexfield</type>
  <count>1</count>
  <flexfields>
    <flexfield>
      <id>7</id>
      <table_name>customer</table_name>
      <name>Откуда узнали</name>
      <attr_num>2</attr_num>
      <attr_type>list</attr_type>
      <enabled>Y</enabled>
      <default_value/>
      <list_values>Сайт,Журнал,Листовка</list_values>
      <created_date>2026-02-02 16:12:50</created_date>
      <last_update_date>2026-02-02 16:12:50</last_update_date>
    </flexfield>
  </flexfields>
</root>

Если ничего не найдено, метод возвращает успешный ответ с count равным 0 и пустым списком flexfields.

Создание и изменение поля

GET https://[компания].myvirtualpos.ru/api/flexField/update?apikey=MySecret&table_name=customer&name=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80&create_if_not_exist=1&attr_type=list&list_values=S,M,L,XL

Как ищется поле

Поле ищется по id, а если он не указан — по паре table_name и name. Если поле не найдено:

  • при create_if_not_exist=1 создаётся новое;
  • иначе возвращается ошибка «Record not found».

Параметры

id Число. Ид изменяемого поля. Только GET
table_name Строка. Код справочника. Вместе с name однозначно определяет поле. При создании обязателен. У существующего поля справочник не меняется. Только GET
name Строка, до 64 символов. Название поля. Вместе с table_name определяет поле; при обновлении по id переименовывает его. При создании обязательно. Только GET
create_if_not_exist 1 — создать поле, если оно не найдено. Только GET
attr_type Тип поля: text, textarea, list, multi или date. При создании обязателен
attr_num Число. Номер колонки attributeN справочника. Только при создании; если не указан, подбирается первый свободный. Колонка должна существовать у справочника и не быть занятой другим полем. При изменении поля игнорируется
enabled Y — поле включено (по умолчанию при создании), N — отключено
default_value Строка, до 1024 символов. Значение по умолчанию
list_values Строка, до 4096 символов. Значения через запятую для типов list и multi

Изменяются только переданные параметры, остальные остаются прежними.

Ответ

{"success":1,"id":"21","isnew":"1"}
success 1 — поле сохранено
id Ид поля. При создании приходит строкой, при изменении — числом
isnew «1» — поле создано, «0» — изменено существующее

Отключённое поле не принимается. Если поле отключено (enabled=N), запросы к записям справочника его значение не записывают и не сообщают об этом. Ранее сохранённые значения остаются в записях.

Удаление поля

GET https://[компания].myvirtualpos.ru/api/flexField/delete?apikey=MySecret&id=21
id Число. Ид удаляемого поля. Только GET
table_name, name Строки. Код справочника и название поля, если ид неизвестен. Нужны оба. Только GET
format json (по умолчанию) или xml

Ответ: {«success»:1}. Если поля нет — ошибка «Record not found».

Значения не удаляются. Удаление поля убирает его настройку, но значения в записях остаются в колонке attributeN справочника. Если создать новое поле с тем же attr_num, оно покажет старые значения.

Как задать значение гибкого поля в записи

Значение гибкого поля задаётся тем же запросом, который создаёт или изменяет запись справочника. К обычным параметрам добавьте параметр [имя поля]=[значение]. Имя — либо название поля («Размер»), либо системное имя attribute1…attribute15. Номер колонки для каждого поля показывает attr_num в ответе метода получения или колонка «Номер атрибута» в разделе Настройки → Гибкие поля.

GET https://[компания].myvirtualpos.ru/api/customer/update?apikey=MySecret&id=40824&%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80=XL
GET https://[компания].myvirtualpos.ru/api/customer/update?apikey=MySecret&id=40824&attribute1=XL

Пустое значение очищает поле. Поле должно быть включено (enabled=Y). Запись значений описана для клиентов в статье Customer. Клиенты; в ответах методов клиентов гибкие поля не возвращаются.

Примеры запросов

Задача Запрос
Список справочников /api/flexField/listTables?apikey=MySecret
Все гибкие поля клиентов /api/flexField?apikey=MySecret&table_name=customer
Поле по ид /api/flexField?apikey=MySecret&id=7
Создать текстовое поле для клиентов /api/flexField/update?apikey=MySecret&create_if_not_exist=1&table_name=customer&name=Hobby&attr_type=text
Создать поле-список для товаров /api/flexField/update?apikey=MySecret&create_if_not_exist=1&table_name=item&name=Season&attr_type=list&list_values=Winter,Summer
Отключить поле /api/flexField/update?apikey=MySecret&id=21&enabled=N
Переименовать поле /api/flexField/update?apikey=MySecret&id=21&name=Hobby2
Удалить поле по названию /api/flexField/delete?apikey=MySecret&table_name=customer&name=Hobby

Ошибки

Ошибка авторизации и общие ошибки описаны в статье Общие сведения. Ошибки методов раздела приходят с кодом HTTP 200 и success равным 0:

Сообщение Метод Причина Что делать
You have to specify [id] or [table_name, name] to update record update Не указаны ни id, ни пара table_name и name, и нет create_if_not_exist Передайте ид поля или пару table_name и name
[table_name] and [attr_num] parameters does not specified update Создание поля без table_name Передайте код справочника
Record not found update, delete Поле не найдено, а create_if_not_exist не указан Проверьте ид, справочник и название
Data validation failed. … update Данные не прошли проверку; далее идёт перечень полей и причин: не заполнены name или attr_type, неизвестные table_name, attr_type, enabled, слишком длинное значение, у справочника нет колонки с таким attr_num Исправьте указанные параметры
Исчерпан лимит гибких полей на таблице … update У справочника не осталось свободных колонок attributeN Удалите неиспользуемое поле
Cannot save data. … update Ошибка сохранения; например, attr_num уже занят другим полем справочника Укажите другой attr_num или не передавайте его
You have to specify [id] or [table_name] + [name] to delete record delete Не указан ни id, ни пара table_name и name Передайте ид поля или пару
Cannot delete data. … delete Ошибка удаления Текст после точки поясняет причину

Связанные разделы