Повторное проведение документов в учете

Повторное проведение документов в учете#

Выполняет повторное отражение документов в учете по списку GID из файла.

Скрипт читает GID документов из первого столбца листа Лист1, проверяет, что документ уже проведен в учете и находится в состоянии, для которого настроено отражение. Для подходящих документов скрипт сначала отменяет отражение в учете, затем выполняет проведение повторно.

Если документ не проходит проверку или при обработке возникает ошибка, его GID добавляется в список проблемных документов. После завершения обработки список записывается в лог.

Место применения: Сервис > Инструменты > Выполнить JEXL-скрипт

Внимание

Перед запуском проверьте nvDocStateMC, idvTransSet, API-класс документа Stk_WarrantOutApi, название листа Лист1 и номер строки, с которой начинается чтение файла. В текущем виде скрипт читает GID документов из первого столбца.

Тип: JEXL-скрипт

/*
Блок переменных
*/
const nvDocStateMC = 300; // Состояние, для которого настроено отражение в учете для типа объекта документа
const idvTransSet = toLong(8110); // id настройки отражения в учете
var avInvalidDocs = []; // Документы, не удовлетворяющие условиям выполнения скрипта

// Функция для обработки файла
var importDocs = (pWorkbook) -> {
  let svSheet = pWorkbook.getSheet("Лист1"); // Название листа Excel
  let nvLastRowNum = svSheet.getLastRowNum(); // Номер последней заполненной строки файла (счёт начинается с 0, т.е. заголовок в первой строке это строка "0")
  let nvi = toLong(0); // Номер строки, с которой начинать выполнять загрузку (счёт начинается с 0, т.е. заголовок в первой строке это строка "0")

  while (nvi <= nvLastRowNum) {
    let avRow = svSheet.getRow(nvi); // Получаем строку
    let gidvDoc = avRow.getCell(0).getStringCellValue(); // Значение из ячейки
    var ropDoc = Stk_WarrantOutApi.load(parseId(gidvDoc)); // Создаем документ в контексте выполнения скрипта

    // Определяем, что документ проведен в учете
    let vFlags = Bs_FlagAccKindBookDocApi.getbTrans(gidvDoc);
    let bvTrans = vFlags.bTransAcc() || vFlags.bTransTax() || vFlags.bTransMng() || vFlags.bTransAit();

    if (bvTrans == 1 and ropDoc.idStateMC >= nvDocStateMC) {
      @begin {
        Bs_TransPkg.procTransDoc(gidvDoc, idvTransSet, "ROLLBACK"); // Отменяем отражение в учете
        Bs_TransPkg.procTransDoc(gidvDoc, idvTransSet, "MAKE"); // Проводим в учете
        commit();
      } @exception function(error) {
        avInvalidDocs.add(gidvDoc);
        rollback();
      }
    } else {
      avInvalidDocs.add(gidvDoc);
    }

    nvi = nvi + 1; // Счетчик строк (для перехода к следующей строке в следующей итерации цикла)
  }

  // Запись в лог выполнения JEXL-скрипта
  audInfo('Данные загружены');
  Btk_InfoLogPkg.info("Не выполнено повторное отражение документов в учете (не прошли проверку): " + toString(avInvalidDocs));
  true;
}

lib("Btk_XlsxLib").uploadParseFile(importDocs);