05.11.2013, 10:12 | #1 |
Участник
|
Пакетная обработка (повторное создание)
Всем добрый день.
Есть Аксапта 3. Выполняем обработку накладной с помощью пакетного задания. Подскажите, есть ли стандартный способ запретить повторное создание пакета? Если нет стандартного, то каким образом можно узнать, что такой пакет уже существует? Смотрел на табличку Batch - ничего подходящего не увидел.. |
|
05.11.2013, 14:04 | #2 |
Участник
|
Вообще, правильно смотрите. Просто придется ручками допиливать, чтобы запись с каким-то конкретным классом была в единственном экземпляре. Если у вас кастомный класс обрабатывает накладную, попробуйте использовать шаблон Singleton.
__________________
// no comments |
|
05.11.2013, 14:11 | #3 |
Участник
|
Для чего хотите запретить создание пакета? если дело касается только разноски накладной и думаете, что она может повторно разнестись, то это не так
|
|
05.11.2013, 15:36 | #4 |
Участник
|
Да она с ошибками вываливается, если повторно пытается обрабатываться.. И приходится разбираться - это ошибки конфигурации или потому что второй раз пытаются обрабатывать..
Ну или производная задача - пользователи хотят видеть, по какому заказу они обработали накладную (создали пакет). Может есть решение такой задачи? |
|
05.11.2013, 16:03 | #5 |
Участник
|
Без программирования наверное никуда.
В табличке Batch есть поле типа Parameters - куда записываются параметры запуска операции переданные через pack(), т.е. чтобы добраться до параметров запуска и проверить нужный вам заказ, потребуется проделать примерно следующее : 1. Выбрать все записи из Batch с типом ожидание(дополнительно можно отфильтровать записи по полю ClassNumber). 2. Для каждой такой записи извлечь из Batch.Parameters поле ParmId, найти запись в таблице SalesParmTable и проверить не ваш ли заказ там находится. А так в случае, если у вас как правило разносится один заказ, то можно сделать вот, что(чтобы быстро проверять есть ли уже заказ в пакете или нет) : 1. Добавить пару полей RefTableId, RefRecId в табличку Batch. 2. Перекрыть метод initBatch(метод runBaseBatch, специально сделанный для инициализации доп. параметров пакета) в классе SalesFormLetter_Invoice и записать ссылку на заказ. 3. Добавить проверку куда-нибудь в разноску накладной, которая бы проверяла существование пакета.
__________________
Sergey Nefedov |
|
05.11.2013, 16:19 | #6 |
Участник
|
Спасибо всем за ответы!
Сергей, Вам особенно благодарен за подробный ответ. Попробую реализовать. Только уточнить хотел - в Parameters лежит контейнер же? В нем ищем ParmId.. Все верно? |
|
05.11.2013, 16:25 | #7 |
Участник
|
Да, в parameters лежит контейнер, в нем на какой-то позиции должно находиться значение ParmId(самую позицию можно посмотреть в методе pack, который вызывается при вставке в пакет данных по обработке накладной).
__________________
Sergey Nefedov |
|
|
За это сообщение автора поблагодарили: Phoenix78 (1). |
06.11.2013, 06:29 | #8 |
Участник
|
Ставьте плюсик
__________________
// no comments |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|