Страница 1 из 1

Ошибка Автоинкремента в Форма вложенной сущности

Добавлено: 11 фев 2023, 02:05
VladimirVa
Во вложенной сущности есть поле автоинкремент Уникальное для каждой родительской записи, Раздельная нумерация для каждой родительской записи.
При добавлении из Форма вложенной сущности(В новом окне/Таблица) не отрабатывает Раздельная нумерация для каждой родительской записи, в форме всподставляется последнее значение+1 всех вложенных сущностей.
Катастрофически не хватает подстановки лидирующих нулей.

Re: Ошибка Автоинкремента в Форма вложенной сущности

Добавлено: 11 фев 2023, 08:45
support
К сожалению данное поле не поддерживается в форме вложенной сущности, так как по факту записи добавляются в базу только когда сохранятся основная форма.

Re: Ошибка Автоинкремента в Форма вложенной сущности

Добавлено: 11 фев 2023, 09:03
Fait
VladimirVa писал(а): 11 фев 2023, 02:05 Во вложенной сущности есть поле автоинкремент Уникальное для каждой родительской записи, Раздельная нумерация для каждой родительской записи.
При добавлении из Форма вложенной сущности(В новом окне/Таблица) не отрабатывает Раздельная нумерация для каждой родительской записи, в форме всподставляется последнее значение+1 всех вложенных сущностей.
Катастрофически не хватает подстановки лидирующих нулей.
Это вовсе не ошибка.
Данную тему нужно в предложения занести :)
Вообще, подстановка нулей - вещь нужная.
Пока что есть два способа решить этот вопрос:
1) Вручную добавлять нули
2) Создать автоматизацию, срабатывающую при добавлении и изменении записи, которая будет сама расставлять нули.
В автоматизации вставь вот этот код:

Код: Выделить всё

$entity_id = 133; // ID сущности
$field_id = 3176; // ID поля Автоинкремент
$num_chars = 8; // Кол-во знаков, которое должно быть
$item_id = [id];
$val = [3176]; // ID поля Автоинкремент (значение)
$i = 0;

// Проверяем длину строки и, если она меньше заданной, то добавляем нули
if (strlen($val) < $num_chars) {
	$kol = $num_chars - strlen($val);
	while ($i < $kol) {
		$out = $out.'0';
		$i = $i + 1;
	}
	$out = $out.''.$val;
	// Обновляем запись
	$data = [
  	'field_'.$field_id => $out
	];
	items::update_by_id($entity_id,$item_id,$data);
}
В коде измени только 4 параметра, остальное не трогай:
$entity_id - ID сущности
$field_id - ID поля Автоинкремент
$num_chars - Кол-во знаков, которое должно быть в итоговой строке
$val - ID поля Автоинкремент, только в квадратных скобках (считывает значение поля)

Re: Ошибка Автоинкремента в Форма вложенной сущности

Добавлено: 11 фев 2023, 09:42
nruslan2
по автоинкременту давно уже есть вот такая штука
viewtopic.php?p=21709#p21709

Re: Ошибка Автоинкремента в Форма вложенной сущности

Добавлено: 21 июн 2023, 09:30
alex.rodr
Не догоняю немного...

Поле "Автоинкремент" является заголовком в родительской сущности.

Проблема 1:
- Значение по умолчанию - 000001
- Шаг - 000001
Первая запись 000001.
Вторая - 2, Третья - 3,......и.т.д. без нулей

Проблема 2:
Почему-то при переходе в дочернюю запись - не отображается указанный префикс в заголовке

Вставил предложенный код.
Нумерация заработала.
Но осталась проблема 2 с префиксом в дочерней записи.
Мб как то допилить код и к черту эти дефолтные настройки поля.

Ну или создать 2 поля.
- Автоинкремент
- статический текст по шаблону (тут и указать и префикс и [id Автоинкремент])
Простая операция превращается в костыль(

Получается этот тип поля работает только если стандартная нумерация нужна....1,2,3,..

Re: Ошибка Автоинкремента в Форма вложенной сущности

Добавлено: 21 июн 2023, 11:11
support
Автоинкремент - это числовое поле. 000001 не допустимо.
Сформировать значения типа 000001 можно с помощью PHP кода и функции sprintf

Код: Выделить всё

sprintf("%'06d",'1');
В результате будет 6 замените на нужно количество нулей. Вместо 1 поставьте значения поля автоинкремент.

Re: Ошибка Автоинкремента в Форма вложенной сущности

Добавлено: 21 июн 2023, 14:06
Oleg
можно так же воспользоваться "Префикс" "Суффикс"

Re: Ошибка Автоинкремента в Форма вложенной сущности

Добавлено: 22 июн 2023, 15:44
alex.rodr
support писал(а): 21 июн 2023, 11:11 Автоинкремент - это числовое поле. 000001 не допустимо.
Сформировать значения типа 000001 можно с помощью PHP кода и функции sprintf

Код: Выделить всё

sprintf("%'06d",'1');
В результате будет 6 замените на нужно количество нулей. Вместо 1 поставьте значения поля автоинкремент.
Понятно!
Предположим мы решили вопрос с нулями...

Как быть с отсутствующим префиксом при переходе в подчиненную сущность?
В заголовке отсутствует префикс.
Актоикремент с префиксом у меня является "Заголовком" в этой структуре.

Re: Ошибка Автоинкремента в Форма вложенной сущности

Добавлено: 22 июн 2023, 15:59
alex.rodr
Oleg писал(а): 21 июн 2023, 14:06 можно так же воспользоваться "Префикс" "Суффикс"
И как это поможет?)
Префикс и суффикс - это же не переменная.

По факту нужно, что б было ограничение для количества знаков в цифрах.

Предположим фиксированно есть 6 знаков.
Автоинкемент должен вписываться в эти 6 выделенных знаков с правой стороны.
т.е. не 1,2,3, а 000001,000002,000003,000004,...и.т.д.
Если в текущей нумерации отсутствует значение то 0!

Что будет когда запись дойдет хотя бы до 10,
если я буду использовать предложенный вами вариант и в суффикс и префикс вставлю нули? =)

Мб я чего то не знаю?
Расскажите.