⟵ сюдатуда ⟶
  • Мастерклассы
  • Внешние подключения
  • Tableau и PowerBI
  • amoCRM
  • Битрикс 24
  • База знаний
  • Обращение к данным временной таблицы
  • Потеря связи с БД при большом трафике данных
  • Сохранить файл в поле по внешней ссылке url
  • Формирование списка из отмеченных галочками строк и вывод на печать
  • Добавление цикла в таблицу циклов кнопкой из временной таблицы
  • Функция TryCatch и передача данных после отката
  • Ошибка доступа при переходе в цикл если первая таблица недоступна для пользователя
  • Архитектура системы рассчитывающей остатки по кассе или складу
  • Сортировка при выборке по отображению поля Селект, а не по его основанию
  • Блокировка введения дублированного значения
  • Табличное отображение в контекстной панели
  • Сортировка строк в таблице с помощью кнопки
  • Как получить значение по условию из списка вложенных массивов?
  • Сбросить счётчик id в таблице
  • Скрытие поля в таблице по условию
  • Подтверждение действия при нажатии на кнопку в контекстном окне
  • Пересчет большой таблицы
  • Как суммировать значения в rowList по одному из ключей (по одной из колонок)
  • Наборы полей по условию при открытии через linkToTable
  • Как отложить выполнение действия и выполнить его в фоне
  • Создание и удаление строк при выборе значений в Селект или Селект-дерево
  • selectRowListForSelect с условием при котором текущее значение получается зачеркнутым
  • Не все внешние запросы на Remotes выполняются и ломается счетчик id
  • Сортировка Расчётных таблиц в Цикле
  • Как передать данные в виде чисел при обращении POST к API стороннего сервиса (must be a "integer")
  • Как сделать график если есть несколько параметров
  • Сохранение изначальных значений в поле в случае, когда поле рассчитывается кодом
  • Функция TryCatch и передача данных после отката

    Оригинал на GitHub

    Ссылка на GitHub ⟹

    Вопрос

    Задача следующая:

    Есть простая таблица учета операций поступления и списания материалов с отдельной графой в виде накопительного регистра, в которой также рассчитывается остаток на складе после операции. Если после операции значение остатка становится меньше 0 нужно:

    1. Показать ошибку,
    2. Откатить операцию
    3. Передать данные этой операции (материал, заказ, количество...) в другую простую таблицу.

    У меня получается, но что-то одно. Либо ошибка с откатом, либо данные пишутся, а операция проходит

    Как именно можно использовать для этого функцию tryCatch или через что-то другое сделать?

    Ответ

    Это можно сделать через tryCatch

    Например ставим полю с количеством код-действия при добавлении:

    =catch: if(condition: $#nfv < 0; then: $err)
    
        err: errorException(text: "Zero error")
    
    catch: insert(table: 'error_table'; field: 'error' = str`"Zero value in row" ++ #id`)
    

    Если есть несколько инициирующих кодов, изменяющих одно поле и надо узнать, в результате выполнения какого из них произошло отслеживаемое событи, то инициирующие коды-действия должны записать о себе информацию в процессную переменную.

    Например. Это код кнопки, которая добавляет строку с неподходящим значением:

    a1=: procVar(name: "zero_process_var"; value: "some_code_name")
    
    a2=: insert(table: 'target_table'; field: 'test' = -1)
    

    Код действия в поле test таблицы target_table:

    =catch: if(condition: $#nfv < 0; then: $err)
    
        err: errorException(text: "Zero error")
    
    catch: insert(table: 'error_table'; field: 'error' = str`"Zero value in row" ++ #id ++ $@zero_process_var`)
    

    И в catch мы используем данные из переменной $@zero_process_var.