14.07.2008, 15:02
|
#1
|
Участник
Регистрация: 28.11.2005
Адрес: Москва
|
Цитата:
Сообщение от Arahnid
мне не удалось поменять трансляцию так, чтобы использовать массовый ввод.
Посмотрите в метод \Classes\RTSLLedgerTranslation\processRules. Там идет, насколько я понимаю, выборка исходных проводок LedgerTrans в соответствии с заданными критериями, затем формируется запись во временной таблице и передается на обработку в метод processTransaction(). Этот метод, в свою очередь, делает по большому счету следующее:- проверяет исходную запись по переданному правилу;
- проверяет по логу RTSLTransLog, что запись LedgerTrans, на которую ссылается переданная на обработку запись временной таблицы, не была уже обработана;
- собственно выполняет трансляцию в соответствии с указанным правилом, формируя новую запись во временной таблице;
- обновляет лог RTSLTransLog по обработанной записи.
Здесь пункты 1, 2, 4 выполняются в текущей компании, а вот п.3 (конвертирование с проверками) как раз приводит к многчисленным переключениям в другую компанию (одну и ту же). Какие тут могут быть варианты:- накапливать все записи, выбираемые в цикле метода processRules(), перед их последующей обработкой;
- в таблицу RTSLTransLog добавить поле "код компании", а у самой таблицы сделать SaveDataPerCompany == No, чтобы вести лог можно было, не заботясь о переключениях между компаниями;
- выполнять одним этапом проверку накопленных ранее записей по переданному правилу и отсеивать записи, не прошедшие проверку;
- выполнять одним этапом конвертирование записей, прошедших проверку, переключившись предварительно в нужную компанию.
Цитата:
Сообщение от Arahnid
Проще переписать.
Это кажущаяся простота. Пока правила трансляции у вас остаются "счет - в счет", можно, конечно, нарисовать что-то свое "сбоку", но если понадобится усложнять правила трансляции, то вы фактически будете писать заново то, что уже реализовано в стандартном функционале.
|
|