Автоинкремент не отрабатывает правильно при многопользовательском режиме

Все вопросы/проблемы по установке и использовании.
Ответить
rebrovvv
Сообщения: 9
Зарегистрирован: 25 июн 2023, 15:42
Имя: Вячеслав Ребров
Откуда: Россия, Челячбинск

Автоинкремент не отрабатывает правильно при многопользовательском режиме

Сообщение rebrovvv »

Проблема такая, автоинкремент не работает правильно если например: 1 пользователь открыл форму и заполняет ее, в это время другой пользователь открыл тоже форму и заполнил ее быстрее предыдущего, сохранил, автоинкремент присвоился, теперь первый пользователь нажимает сохранить, и уже значение не уникально. Решил проблему через поле Ajax запрос:

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

$entity_id = 47;
$feld_inc = 700; 
$trigger = [704]; //Добавить $("#fields_704").trigger('change'); в onSubmit
$item_id = $_GET['item_id'];
$increment_query = db_query("SELECT field_{$feld_inc} FROM app_entity_{$entity_id} WHERE field_{$feld_inc} > 0 ORDER BY field_{$feld_inc} DESC LIMIT 1");
if($increment = db_fetch_array($increment_query))
{
    $last_increment = $increment['field_'.$feld_inc.''];
if(!$item_id)
{
    $value = $last_increment+1;
    echo '<script>$("#fields_'.$feld_inc.'").val(' . $value . '); $("#fields_'.$feld_inc.'_rendered_value p.form-control-static").text(' . $value . '); </script>';
}
}



Но в одной сущности есть загвоздка с реализацией, там есть поля в которые надо подставить обновленное значение автоинкремента:

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

$entity_id = 29;
$feld_inc = 347; 
$trigger1 = [340]; //Добавить $("#fields_340").trigger('change'); в onSubmit
$trigger2 = [339];
$trigger3 = [338];
$trigger4 = [343];
$item_id = $_GET['item_id'];
$increment_query = db_query("SELECT field_{$feld_inc} FROM app_entity_{$entity_id} WHERE field_{$feld_inc} > 0 ORDER BY field_{$feld_inc} DESC LIMIT 1");
if ($increment = db_fetch_array($increment_query)) {
    $last_increment = $increment['field_'.$feld_inc];
    if (!$item_id) {
        $value = $last_increment + 1;
        
        echo "<script>
        var lastVal = $('#fields_347').val();
            $('#fields_347').val(" . intval($value) . ");
            $('#fields_347_rendered_value p.form-control-static').text(" . intval($value) . ");  
		var inp1 = $('#fields_338'),
			inp2 = $('#fields_339'),
			inp3 = $('#fields_343'),
			out  = $('#fields_342');

			if ($('#fields_340').val() != 7) { 
				$('#fields_338').val(" . intval($value) . ");
				if ((inp1.val() == '') || (inp1.val() == lastVal) || (inp1.val() == 'б/н')) {
					out.val('№' + " . intval($value) . " + ' от ' + inp2.val() + 'г. ' + inp3.val());
				} else {
					out.val('№' + inp1.val() + ' от ' + inp2.val() + 'г. ' + inp3.val());
				}
			} else {
				inp1.val('б/н');
				inp2.val('');
				out.val('Договор-оферта');
			}       
					  </script>";
			}
}
Проблема в том что при нажатии сохранить $("#fields_340").trigger('change'); в onSubmit срабатывает, во все поля проставляется обновленное значение автоинкремента, но не сохраняются в бд кроме первого: $('#fields_347').val(" . intval($value) . ");
Уже все перепробовал, помогите как решить проблему.
Аватара пользователя
support
Техническая поддержка
Сообщения: 7661
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Автоинкремент не отрабатывает правильно при многопользовательском режиме

Сообщение support »

Установите опцию "Только просмотр". При сохранении значение автоинкемента будет пересчитываться и он будет уникален.
Вложения
2025-11-11_07-34-30.png
Ответить