20.03.2011, 20:30 | #1 |
Участник
|
Массовое создание СФ. Почему берет номера из списка удаленных СФ?
сломал всю голову, потратил воскресенье на разбор ситуации.
не могу понять. вопрос: Почему берет номера из списка удаленных СФ при массовом создании СФ в ax2009 SP5? подробнее: если из заказа на продажу разнести накладную. то потом из накладной или из заказа на продажу для разноски СФ открывается специальная форма. Эта форма позволяет вручную выбрать номер СФ из списка ранее удаленных (NumberSequenceList). Если же вручную старый номер не указан, то берется новый номер из номерной серии. За это отвечает код в методе init в классе \Classes\FactureJourCreateCust_RU\initJournal (и в соседних по иерархии классах) теперь юзаем массовое создание СФ (из периодических заданий, или из формы заказов выбрано несколько или еще как... неважно) при массовом создании ручное поле никогда не заполняется (по-крайней мере, я не обнаружил случаев) другими словами, при массовом создании должны ВСЕГДА браться новые номера СФ. при массовом создании не должны браться номера из списка удаленных (и это правильное поведение, именно это и нужно). Однако ж, происходит следующее: = некоторое число СФ получает новые номера = а в конце некоторые СФ получют номера из списка удаленных никакой корреляции не нашел. Разумные предположения у меня кончились. Но барабашки точно нет. Похоже, я пропустил что-то тривиальное. Вопрос: Кто-нибудь сталкивался с этой задачей? Может натолнете на мысль куда рыть? Почему берет номера из списка удаленных СФ при массовом создании СФ? |
|
20.03.2011, 22:59 | #2 |
Участник
|
Мне казалось, что в стандартной системе номерная серия СФ ничем не отличается от обычной номерной серии. Т.е. если настроить номерную серию как непрерывную, то ранее удаленные номера используются автоматически. Или так было в совсем древней версии? Стандартной нумерацией СФ уже давно не пользовался
__________________
Ivanhoe as is.. |
|
21.03.2011, 10:03 | #3 |
Участник
|
Я думаю, такой эффект возникает из-за того, что для генерации номер СФ используется не стандартный класс NumberSeq, а его потомок NumberSeq_RU, в котором как раз перекрыт метод getNumFromList(), используемый для выборки номеров из истории использования.
|
|
21.03.2011, 10:43 | #4 |
Участник
|
Цитата:
вопрос только - почему часть печатает правильно (использует новые номера), а часть неправильно (использует удаленные). что является триггером, который переключает в другой режим? ничего не понимаю. |
|
21.03.2011, 19:46 | #5 |
Участник
|
Цитата:
Сообщение от mazzy
Эта форма позволяет вручную выбрать номер СФ из списка ранее удаленных (NumberSequenceList). Если же вручную старый номер не указан, то берется новый номер из номерной серии. За это отвечает код в методе init в классе \Classes\FactureJourCreateCust_RU\initJournal (и в соседних по иерархии классах) Пример. Номер следующей фактуры в серии - 10, в списке свободных номеров есть 9, 8, 7, 5, 3, 2, 1. Так вот при обработке счета-фактуры номер у нее будет 7. (т.е. 10-1 = 9, а дальше двигаемся то дех пор пока не получим разрыв больше чем 1, т.е. до 7). Вполне возможно, что в какой-то момент массовой обработки счетов-фактур у вас возникает ситуация описанная выше, т.е. номер - 1 оказывается в списке освобожденных, как результат номера начинают браться из списка освобожденных номеров
__________________
Sergey Nefedov |
|
21.03.2011, 22:05 | #6 |
Участник
|
Как-то тоже голову ломал над этим алгоритмом. Там действительно в _RU переопределено получение следующего номера. Как я понял, алгоритм номер из середины сам не может выдать, это доступно только в ручном режиме.
Пример 1 Были сф с номерами: 1, 2, 3 , 4 , 5. NextNum = 6 Удаляем сф с номеами 2, 5. Создастся фактура с номером 5, 6, 7... Пример 2 Были сф с номерами: 1, 2, 3 , 4 , 5. NextNum = 6 Удаляем сф с номерами 1, 2, 3. Создастся сф с номером 6, 7, 8... Пример 3 Были сф с номерами: 1, 2, 3 , 4 , 5. NextNum = 6 Удаляем сф с номерами 1, 4, 5. Создастся сф с номером 4, 5, 6... |
|
21.03.2011, 22:35 | #7 |
Axapta
|
Тоже когда-то давно разбирался с нумирацией счетов-фактур. Вот цитата из нашего баг-трекинга:
Цитата:
ОШИБКА
При освобождении номера счета-фактуры, номер освобождается, но не используется при обработке следующего счета-фактуры, т.е. нумерация не является непрерывной. //oip: Думаю, это не ошибка. В стандартной Аксапте специально и именно для счета-фактуры сделано, что номер берется "минимальный, но до первый дырки". Пример: 1) "Следующий" номер - 256. Зарезервированы 255, 254, 251, 250. Будет взят 254, так как после него "дырка". 2) "Следующий" номер - 256. Зарезервированы 251, 250. Будет взят 256, так как после него "дырка" (нет 255-го). |
|