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 | Ошибка удаления | Текст после точки поясняет причину |