Здравствуйте.
Создаю элемент инфорблока через API, у элемента есть свойство, которое заполняется на основе предыдущего созданного элемента инфорблока. путь будет номер порядковый.
как сделал.
1) в таблице b_option создал строку "Order_num"
2) в init повесил обработчик на "OnBeforeIBlockElementAdd" внутри которого
получаю из базы номер заказа, прибавляю его и сохраняю обратно
вот по такой логике у меня формируется свойство вновь созданным элементам.
все хорошо, но раз на 300 элементов есть баг, что номера получаются одинаковые.
посмотрел по дате создания элемента - они в одно и то же время создаются, тогда логично, что код в 2 потока работает и из базы берет одно и то же и кладет обратно, поэтому и присваивает 2 одинаковых номера 2ум элементам, созданным в одно время.
Как решить данную проблему?
Создаю элемент инфорблока через API, у элемента есть свойство, которое заполняется на основе предыдущего созданного элемента инфорблока. путь будет номер порядковый.
как сделал.
1) в таблице b_option создал строку "Order_num"
2) в init повесил обработчик на "OnBeforeIBlockElementAdd" внутри которого
получаю из базы номер заказа, прибавляю его и сохраняю обратно
Код |
---|
$order_num = COption::GetOptionInt("main", "order_num"); order_num +=1; COption::SetOptionInt("main", "order_num", order_num); $arFields['PROPERTY_VALUES']['order_num'] = $order_num; |
вот по такой логике у меня формируется свойство вновь созданным элементам.
все хорошо, но раз на 300 элементов есть баг, что номера получаются одинаковые.
посмотрел по дате создания элемента - они в одно и то же время создаются, тогда логично, что код в 2 потока работает и из базы берет одно и то же и кладет обратно, поэтому и присваивает 2 одинаковых номера 2ум элементам, созданным в одно время.
Как решить данную проблему?