AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.07.2009, 19:19   #1  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Ошибка в AX2009 EE: SalesFormLetter_xxx
Коллега сообщает: в указанных классах восточноевропейцы добавили генерацию RecId вручную. К сожалению, забыли пару мест:

SalesFormLetter_PackingSlip\chooseLinesFromWMSArrival:
X++:
    void createParmTable()
    {
        if (this.allowCreateParmTable())
        {
            if (!localSalesParmTable.ParmId)
            {
                this.createParmTable(localSalesParmTable,
                                      localSalesTable,
                                      inventSiteId,
                                      localSalesTable.SalesName);

                // PAHA, Error when invoicing from shipment -->
                //RecId is needed
                localSalesParmTable.RecId  = systemSequence.reserveValues(1, tablenum(SalesParmTable));
                // PAHA, Error when invoicing from shipment <--

                recordInsertSalesParmTable.add(localSalesParmTable);
                salesParmTableMap.insert(this.salesParmTableMapKey(localSalesParmTable.SalesId, inventSiteId, '', '', ''), localSalesParmTable);

                salesParmSubTable = SalesParmSubTable::createFromSalesParmTable(localSalesParmTable,false);
                recordInsertSalesParmSubTable.add(salesParmSubTable);

                tableRefUsed = true;
                this.allowCreateParmTable(this.allowEmptyTable());
            }
        }
    }
SalesFormLetter_Invoice\chooseLinesFromWMSShipment:
X++:
    void createParmTable()
    {
        if (this.allowCreateParmTable())
        {
            localSalesParmTable.clear();
            localSalesParmTable.TableRefId  = tableRef;

            this.createParmTable(localSalesParmTable, SalesTable::find(previousSalesId));

            // PAHA, Error when invoicing from shipment -->
            //RecId is needed
            localSalesParmTable.RecId  = systemSequence.reserveValues(1, tablenum(SalesParmTable));
            // PAHA, Error when invoicing from shipment <--

            recordInsertSalesParmTable.add(localSalesParmTable);
            salesParmTableMap.insert(this.salesParmTableMapKey(localSalesParmTable.SalesId, '', '', '', ''), localSalesParmTable);
            localSalesParmSubTable = SalesParmSubTable::createFromSalesParmTable(localSalesParmTable,false);
            recordInsertSalesParmSubTable.add(localSalesParmSubTable);

            tableRefUsed = true;
            this.allowCreateParmTable(this.allowEmptyTable());
        }
    }
Старый 06.07.2009, 21:41   #2  
Jabberwocky is offline
Jabberwocky
Microsoft Dynamics
Аватар для Jabberwocky
Сотрудники Microsoft Dynamics
 
274 / 307 (11) ++++++
Регистрация: 02.09.2005
Адрес: Москва
А Ваш коллега не задумался, для чего была добавлена генерация RecId?

Просто везде после строчки:
X++:
localSalesParmTable.RecId  = systemSequence.reserveValues(1, tablenum(SalesParmTable));
стоят вызовы:

X++:
AddressTrans_RU::createFromSalesParmTable(localSalesParmTable);
PlInventPackageParm::updateFromSalesParmTable(localSalesParmTable);
Для корректной работы этих методов необходимо, чтобы буфер localSalesParmTable уже содержал "реальный" RecId.

В вышеприведенных методах

SalesFormLetter_PackingSlip\chooseLinesFromWMSArrival, SalesFormLetter_Invoice\chooseLinesFromWMSShipment

эти вызовы не используются.
__________________
You should use Bing before asking dumb questions.

Последний раз редактировалось Jabberwocky; 06.07.2009 в 21:43.
За это сообщение автора поблагодарили: EVGL (3).
Старый 06.07.2009, 21:51   #3  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Спасибо за разъяснение, передал коллеге!
Старый 06.07.2009, 22:48   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Хм, а что при вставке записи recId не перезатирается ? Или там добавлен код подавляющий это ?
Старый 07.07.2009, 07:04   #5  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Цитата:
Сообщение от EVGL Посмотреть сообщение
...
SalesFormLetter_PackingSlip\chooseLinesFromWMSArrival:

SalesFormLetter_Invoice\chooseLinesFromWMSShipment:
...
Цитата:
Сообщение от Jabberwocky Посмотреть сообщение
А Ваш коллега не задумался, для чего была добавлена генерация RecId?

Просто везде после строчки:
X++:
localSalesParmTable.RecId  = systemSequence.reserveValues(1, tablenum(SalesParmTable));
стоят вызовы:

X++:
AddressTrans_RU::createFromSalesParmTable(localSalesParmTable);
PlInventPackageParm::updateFromSalesParmTable(localSalesParmTable);
Для корректной работы этих методов необходимо, чтобы буфер localSalesParmTable уже содержал "реальный" RecId.

В вышеприведенных методах

SalesFormLetter_PackingSlip\chooseLinesFromWMSArrival, SalesFormLetter_Invoice\chooseLinesFromWMSShipment

эти вызовы не используются.
Цитата:
Сообщение от Logger Посмотреть сообщение
Хм, а что при вставке записи recId не перезатирается ? Или там добавлен код подавляющий это ?
На самом деле все-таки видимо это ошибка(не проверял на реальных данных), в выше означенных методах, как и в других chooseLines... идет вызов
X++:
this.recordInsertListInit()
провалившись в него можно увидеть метод suspendRecIds()
X++:
systemSequence = new systemSequence();
systemSequence.suspendRecIds(tableNum(SalesParmLine));
systemSequence.suspendRecIds(tableNum(SalesParmTable));
Отсюда можно сделать вывод, что генерацией recId будут заниматься вручную, т.е. по идее не важно идут вызовы
X++:
AddressTrans_RU::createFromSalesParmTable(localSalesParmTable);
PlInventPackageParm::updateFromSalesParmTable(localSalesParmTable);
или нет, recId выделять все равно нужно.

Последний раз редактировалось SRF; 07.07.2009 в 07:09.
За это сообщение автора поблагодарили: EVGL (5).
Старый 07.07.2009, 11:32   #6  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Коллега Пауль комментирует:
Цитата:
kewl, also ist die sql-fehlermeldung die kommt nicht by design
Цитата:
Похоже, сообщение об ошибке SQL [при создании накладной из отгрузки] все-таки не было предусмотрено проектом
Старый 09.02.2012, 19:35   #7  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
:( Beware of ...
Вот вроде бы все ничего, но только при вызове методов reSelect и reArrange порой пересоздаются записи SalesParmTable. А вот создание AddressTrans_RU для них никто не предусмотрел...

И еще - при создании записи AddressTrans_RU методом createFromIds почему-то никто не подумал, что с недавних пор некоторые таблицы связаны с таблицей Address посредством DirPartyTable.
__________________
Axapta non erubescit
Теги
recid, salesformletter, заказ на продажу, ошибка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
SysQuery::range(): ловушка в AX2009 EE EVGL DAX: Программирование 11 29.06.2009 14:30
Ошибка в InterCompanyInventDim (AX4 и AX2009) Bishop DAX: Программирование 2 17.12.2008 15:08
ошибка на dis в CustVendSettle? (для владельцев DAX 3.0 SP 6 EE) Diman DAX: Программирование 3 07.09.2007 13:20
Ошибка синхронизации при накате SP4 EE FP1 Silence DAX: Администрирование 11 07.03.2006 18:27
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:54.