Повторное проведение документов в учете#
Выполняет повторное отражение документов в учете по списку 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);