06.03.2008, 17:54 | #1 |
Участник
|
Проблема: одинаковые клиенты
Добрый день!
В систему по ошибке внесли одного и того же клиента два раза, естественно, под разными кодами. Есть заказы, подтверждения, счета на оплату и платежи и на того и на другого. Нет отгрузок и сопоставлений. В идеале хотелось бы программно исправить эту ситуацию, оставив одного клиента, или хотя бы оценить масштаб трагедии. Подскажите, плиз, в каких таблицах еще необходимо исправить, кроме следующих: SalesTable, SalesLine, InventTrans, CustConfirmJour, CustInvoice4PaymJour_RU, LedgerJournalTrans, CustVendPaymJournalFee. Заранее спасибо. P.S. Ахарта 3.0, SP3. |
|
06.03.2008, 18:08 | #2 |
Участник
|
CustTrans
CustTransOpen P.S. Отсторнировать платежи и поменять клиентов в заказах не прокатит?
__________________
|
|
06.03.2008, 18:09 | #3 |
Участник
|
В качестве бреда:
1. Посмотреть на таблицы, где код клиента - часть ПК 2. Слить данные в жтих таблицах 3. Снести одного клиента 4. Переименовать первичный ключ второго в первого. |
|
06.03.2008, 18:18 | #4 |
Участник
|
2 ppson "Отсторнировать платежи и поменять клиентов в заказах"
Прицениваемся и к этому Последний раз редактировалось Lelya; 06.03.2008 в 18:24. |
|
06.03.2008, 20:02 | #5 |
Участник
|
Цитата:
Надо в общем журнале сделать проводку зачета между клиентами. сопоставить. Неправильного клиента полностью заблокировать (есть такой реквизит в клиенте) |
|
07.03.2008, 11:16 | #6 |
Участник
|
|
|
07.03.2008, 12:11 | #7 |
Lean Six Sigma
|
Если такие ошибки часто появляются, то:
X++: void merge(RecId mainRecordId,RecId secondRecordId) { CustTable _tableMain; CustTable _tableLine; SalesJournalAutoSummary journalSummary; SalesPrintCopies printCopies; CustBankAccount custBankAccount; RContractTable contractTable; RContractTable contractTableNew; LedgerBalancesDimTrans dimTrans; Dimensions dim, dimNew; ; startLengthyOperation(); ttsbegin; select forUpdate _tableMain where _tableMain.RecId == mainRecordId; if (_tableMain.RecId == 0) { ttsabort; throw error('??? ??????? ??????!'); } select forUpdate _tableLine where _tableLine.RecId == secondRecordId; if (_tableLine.RecId != 0) { delete_from journalSummary where journalSummary.CustAccount == _tableLine.AccountNum; delete_from printCopies where printCopies.CustAccount == _tableLine.AccountNum; delete_from custBankAccount where custBankAccount.CustAccount == _tableLine.AccountNum; while select forUpdate contractTable where contractTable.RContractPartnerType == RContractPartnerType::Cust && contractTable.RContractPartnerCode == _tableLine.AccountNum exists join contractTableNew where contractTableNew.RContractPartnerType == RContractPartnerType::Cust && contractTableNew.RContractPartnerCode == _tableMain.AccountNum && contractTableNew.RContractAccount == contractTable.RContractAccount && contractTableNew.RContractCode == contractTable.RContractCode { contractTable.delete(); } select forUpdate dimNew where dimNew.DimensionCode == SysDimension::Partner && dimNew.Num == _tableMain.AccountNum; if (dim.RecId == 0 || dimNew.RecId == 0) { ttsabort; throw error('?? ??????? ?????????, ??????????????? ????????????!'); } _tableLine.merge(_tableMain); dim.merge(dimNew); } ttscommit; endLengthyOperation(); } |
|
07.03.2008, 12:18 | #8 |
Lean Six Sigma
|
В связанных таблицах править руками - не самый лучший способ когда есть и прекрасно работает custTable.merge(xxx);
|
|
07.03.2008, 13:56 | #9 |
Участник
|
Присоединюсь пожалуй, чем не устраивает вариант Belugin?
3. Снести одного клиента 4. Переименовать первичный ключ второго в первого. |
|
07.03.2008, 15:23 | #10 |
Lean Six Sigma
|
Если никто не обратил внимание, то мой код как раз и реализует вариант, предложенный Белугиным.
|
|
|
За это сообщение автора поблагодарили: belugin (3). |
07.03.2008, 15:33 | #11 |
Участник
|
|
|
07.03.2008, 15:36 | #12 |
Участник
|
А еще могут быть связи по recID
Последний раз редактировалось belugin; 07.03.2008 в 15:40. Причина: орфо |
|
|
За это сообщение автора поблагодарили: MikeR (5). |