Перейти до основного
Підтримка
Вхід
Вхід за допомогою облікового запису Microsoft
Увійдіть або створіть обліковий запис.
Вітаємо,
Виберіть інший обліковий запис.
У вас є кілька облікових записів
Виберіть обліковий запис, за допомогою якого потрібно ввійти.

Причини

Після інсталяції KB3034441 Іспанська версії Microsoft Dynamics NAV 2009 року, під час застосування та про звичайний оплати від клієнта або постачальника записів, що книга, головної книги додано записи для одного облікового запису, яка не див. Виконайте дії, описані в розділі зміни коду , щоб вирішити цю проблему. Ця проблема виникає в таких продуктів:

  • Іспанська версії Microsoft Dynamics NAV 2009-R2

  • Іспанська версії Microsoft Dynamics NAV 2009 пакетом оновлень 1

Вирішення

Відомості про виправлення

Корпорація Майкрософт випустила підтримуване виправлення доступна. Однак, застосовувати лише для вирішення проблеми, описаної в цій статті. Він придатний лише для систем, які зазнають цієї конкретної проблеми. Те, що це виправлення може потребувати додаткового тестування. Таким чином, якщо ви не завдає значної, рекомендовано почекати до виходу чергового пакета оновлень Microsoft Dynamics NAV, 2009 або наступної версії Microsoft Dynamics NAV, що містить це виправлення.

Примітка. В окремих випадках оплату звернення до служби підтримки може бути скасовано якщо технічної підтримки професійного для Microsoft Dynamics і пов'язані продукти визначає телефонів служби. Плата стягується на додаткові питання і проблеми, які не пов'язані з оновленням.

Відомості про інсталяцію

Корпорація Майкрософт надає приклади програмного коду тільки для ілюстрації, без гарантій – прямих або інших. Це включає, але не обмежується, будь-яких гарантій придатності до продажу та придатності для певної мети. У цій статті припускається, що ви знайомі з, що демонструє мову програмування та інструменти, які використовуються для створення та налагодження процедури. Співробітники служби підтримки корпорації Майкрософт можуть пояснити функціональні особливості кожної конкретної процедури. Проте вони не будуть змінювати приклади для реалізації додаткових можливостей або створювати процедури на вимогу окремих користувачів.

Примітка. Перш ніж інсталювати це виправлення, переконайтеся, що всіх користувачів Microsoft Dynamics NAV-клієнт відключився системи. Це стосується, служби Microsoft Dynamics NAV Application Server (NAS). Ви повинні тільки клієнт користувача, який увійшов до системи, під час виконання цього виправлення.

Щоб застосувати це виправлення, потрібно мати ліцензію для розробників.

Корпорація Майкрософт рекомендує, що обліковий запис користувача Windows, вхід вікна або у вікні бази даних вхід призначити "Супер" роль ID. Якщо обліковий запис користувача не призначено роль ID "Супер", необхідно переконатися, що обліковий запис користувача, має такі дозволи:

  • Змінити дозвіл об'єкт, який буде змінити.

  • Права для виконання системи об'єкт з Ідентифікатором 5210 об'єкт і, код 9015 системи-об'єкт

    об'єкт.

Примітка. Маєте відповідних прав у сховища даних, якщо не потрібно виконати дані відновлення не потрібно.

Зміни коду

Примітка. Завжди тест код вирішення в середовищі контрольовані перед інсталяцією розглянутого виправлення виробництва комп'ютерів.

Щоб вирішити цю проблему, виконайте такі дії.

  1. Змінити код PostDtldCustLedgEntries функції в полі генералом Jnl.-повідомлення рядка codeunit (12), як описано нижче:
    Наявний код 1

    ...LOCAL PROCEDURE PostDtldCustLedgEntries@46(GenJnlLine2@1000 : Record 81;VAR DtldCVLedgEntryBuf@1001 : Record 383;CustPostingGr@1002 : Record 92;GLSetup@1003 : Record 98;NextTransactionNo@1004 : Integer;CustLedgEntryInserted@1012 : Boolean);
    VAR
    DtldCustLedgEntry@1005 : Record 379;
    Currency@1007 : Record 4;
    GenPostingSetup@1008 : Record 252;
    TotalAmountLCY@1009 : Decimal;
    TotalAmountAddCurr@1010 : Decimal;
    PaymentDiscAcc@1011 : Code[20];
    DtldCustLedgEntryNoOffset@1006 : Integer;
    PaymentTolAcc@1013 : Code[20];
    ...

    Код на заміну 1

    ...LOCAL PROCEDURE PostDtldCustLedgEntries@46(GenJnlLine2@1000 : Record 81;VAR DtldCVLedgEntryBuf@1001 : Record 383;CustPostingGr@1002 : Record 92;GLSetup@1003 : Record 98;NextTransactionNo@1004 : Integer;CustLedgEntryInserted@1012 : Boolean);
    VAR
    DtldCustLedgEntry@1005 : Record 379;
    Currency@1007 : Record 4;
    GenPostingSetup@1008 : Record 252;

    // Add the following line.
    DtldCustLedgEntry3@1100044 : Record 379;
    // End of the added line.

    TotalAmountLCY@1009 : Decimal;
    TotalAmountAddCurr@1010 : Decimal;
    PaymentDiscAcc@1011 : Code[20];
    DtldCustLedgEntryNoOffset@1006 : Integer;
    PaymentTolAcc@1013 : Code[20];
    ...

    Наявний код 2

    ...ReceivableAccAmtLCY@1100001 : Decimal;
    ReceivableAccAmtAddCurr@1100000 : Decimal;
    DtldCustLedgEntry2@1100003 : TEMPORARY Record 379;
    ExistDtldCVLedgEntryBuf@1000003 : Boolean;
    FindBill@1100004 : Boolean;
    BEGIN
    TotalAmountLCY := 0;
    TotalAmountAddCurr := 0;
    PositiveLCYAppAmt := 0;
    PositiveACYAppAmt := 0;
    ...

    Код на заміну 2

    ...ReceivableAccAmtLCY@1100001 : Decimal;
    ReceivableAccAmtAddCurr@1100000 : Decimal;
    DtldCustLedgEntry2@1100003 : TEMPORARY Record 379;
    ExistDtldCVLedgEntryBuf@1000003 : Boolean;
    FindBill@1100004 : Boolean;

    // Add the following line.
    EntryUnapplied@1100051 : Boolean;
    // End of the added line.

    BEGIN
    TotalAmountLCY := 0;
    TotalAmountAddCurr := 0;
    PositiveLCYAppAmt := 0;
    PositiveACYAppAmt := 0;
    ...

    Наявний код 3

    ... TotalAmountAddCurr := 0;
    PositiveLCYAppAmt := 0;
    PositiveACYAppAmt := 0;
    NegativeLCYAppAmt := 0;
    NegativeACYAppAmt := 0;

    IF GenJnlLine2."Account Type" = GenJnlLine2."Account Type"::Customer THEN BEGIN
    IF DtldCustLedgEntry.FINDLAST THEN
    DtldCustLedgEntryNoOffset := DtldCustLedgEntry."Entry No."
    ELSE
    ...

    Код на заміну 3

    ...TotalAmountAddCurr := 0;
    PositiveLCYAppAmt := 0;
    PositiveACYAppAmt := 0;
    NegativeLCYAppAmt := 0;
    NegativeACYAppAmt := 0;

    // Add the following line.
    EntryUnapplied := FALSE;
    // End of the added line.

    IF GenJnlLine2."Account Type" = GenJnlLine2."Account Type"::Customer THEN BEGIN
    IF DtldCustLedgEntry.FINDLAST THEN
    DtldCustLedgEntryNoOffset := DtldCustLedgEntry."Entry No."
    ELSE
    ...

    Наявний код 4

    ... END;
    InsertGLEntry(TRUE);
    GenJnlLine."Posting Date" := OriginalPostingDate;
    END;

    // Delete the following line.
    PostReceivableDocs(GenJnlLine);
    // End of the deleted line.

    IF NOT GLEntryTmp.FINDFIRST AND ExistDtldCVLedgEntryBuf THEN BEGIN
    InitGLEntry(CustPostingGr."Receivables Account",PositiveLCYAppAmt,PositiveACYAppAmt,FALSE,TRUE);
    InsertGLEntry(FALSE);
    InitGLEntry(CustPostingGr."Receivables Account",NegativeLCYAppAmt,NegativeACYAppAmt,FALSE,TRUE);
    ...

    Заміна з кодом 4

    ... END;
    InsertGLEntry(TRUE);
    GenJnlLine."Posting Date" := OriginalPostingDate;
    END;

    // Add the following lines.
    WITH DtldCustLedgEntry3 DO BEGIN
    SETCURRENTKEY("Cust. Ledger Entry No.");
    SETRANGE("Cust. Ledger Entry No.",DtldCustLedgEntry."Cust. Ledger Entry No.");
    SETFILTER("Applies-to Bill No.",'<>%1','');
    SETRANGE(Unapplied,TRUE);
    EntryUnapplied := NOT ISEMPTY;
    END;

    PostReceivableDocs(EntryUnapplied);
    // End of the added lines.

    IF NOT GLEntryTmp.FINDFIRST AND ExistDtldCVLedgEntryBuf THEN BEGIN
    InitGLEntry(CustPostingGr."Receivables Account",PositiveLCYAppAmt,PositiveACYAppAmt,FALSE,TRUE);
    InsertGLEntry(FALSE);
    InitGLEntry(CustPostingGr."Receivables Account",NegativeLCYAppAmt,NegativeACYAppAmt,FALSE,TRUE);
    ...
  2. Змінити код PostDtldVendLedgEntries функції в полі генералом Jnl.-повідомлення рядка codeunit (12), як описано нижче:
    Наявний код 1

    ...  PROCEDURE PostDtldVendLedgEntries@32(GenJnlLine2@1000 : Record 81;VAR DtldCVLedgEntryBuf@1001 : Record 383;VendPostingGr@1002 : Record 93;NextTransactionNo@1003 : Integer;VendLedgEntryInserted@1011 : Boolean);
    VAR
    DtldVendLedgEntry@1004 : Record 380;
    Currency@1006 : Record 4;
    GenPostingSetup@1007 : Record 252;
    TotalAmountLCY@1008 : Decimal;
    TotalAmountAddCurr@1009 : Decimal;
    PaymentDiscAcc@1010 : Code[20];
    DtldVendLedgEntryNoOffset@1005 : Integer;
    PaymentTolAcc@1012 : Code[20];
    ...

    Код на заміну 1

    ...PROCEDURE PostDtldVendLedgEntries@32(GenJnlLine2@1000 : Record 81;VAR DtldCVLedgEntryBuf@1001 : Record 383;VendPostingGr@1002 : Record 93;NextTransactionNo@1003 : Integer;VendLedgEntryInserted@1011 : Boolean);
    VAR
    DtldVendLedgEntry@1004 : Record 380;
    Currency@1006 : Record 4;
    GenPostingSetup@1007 : Record 252;

    // Add the following line.
    DtldVendLedgEntry3@1100055 : Record 380;
    // End of the added line.

    TotalAmountLCY@1008 : Decimal;
    TotalAmountAddCurr@1009 : Decimal;
    PaymentDiscAcc@1010 : Code[20];
    DtldVendLedgEntryNoOffset@1005 : Integer;
    PaymentTolAcc@1012 : Code[20];
    ...

    Наявний код 2

    ...PayableAccAmtLCY@1100002 : Decimal;
    PayableAccAmtAddCurr@1100010 : Decimal;
    DtldVendLedgEntry2@1100003 : Record 380;
    ExistDtldCVLedgEntryBuf@1100004 : Boolean;
    FindBill@1100005 : Boolean;
    BEGIN
    TotalAmountLCY := 0;
    TotalAmountAddCurr := 0;
    PositiveLCYAppAmt := 0;
    PositiveACYAppAmt := 0;
    ...

    Код на заміну 2

    ...PayableAccAmtLCY@1100002 : Decimal;
    PayableAccAmtAddCurr@1100010 : Decimal;
    DtldVendLedgEntry2@1100003 : Record 380;
    ExistDtldCVLedgEntryBuf@1100004 : Boolean;
    FindBill@1100005 : Boolean;

    // Add the following line.
    EntryUnapplied@1100051 : Boolean;
    // End of the added line.

    BEGIN
    TotalAmountLCY := 0;
    TotalAmountAddCurr := 0;
    PositiveLCYAppAmt := 0;
    PositiveACYAppAmt := 0;
    ...

    Наявний код 3

    ...TotalAmountAddCurr := 0;
    PositiveLCYAppAmt := 0;
    PositiveACYAppAmt := 0;
    NegativeLCYAppAmt := 0;
    NegativeACYAppAmt := 0;

    IF GenJnlLine2."Account Type" = GenJnlLine2."Account Type"::Vendor THEN BEGIN
    IF DtldVendLedgEntry.FINDLAST THEN
    DtldVendLedgEntryNoOffset := DtldVendLedgEntry."Entry No."
    ELSE
    ...

    Код на заміну 3

    ...TotalAmountAddCurr := 0;
    PositiveLCYAppAmt := 0;
    PositiveACYAppAmt := 0;
    NegativeLCYAppAmt := 0;
    NegativeACYAppAmt := 0;

    // Add the following line.
    EntryUnapplied := FALSE;
    // End of the added line.

    IF GenJnlLine2."Account Type" = GenJnlLine2."Account Type"::Vendor THEN BEGIN
    IF DtldVendLedgEntry.FINDLAST THEN
    DtldVendLedgEntryNoOffset := DtldVendLedgEntry."Entry No."
    ELSE
    ...

    Наявний код 4

    ...END;
    InsertGLEntry(TRUE);
    GenJnlLine."Posting Date" := OriginalPostingDate;
    END;

    // Delete the following line.
    PostPayableDocs(GenJnlLine);
    // End of the deleted line.

    IF NOT GLEntryTmp.FINDFIRST AND ExistDtldCVLedgEntryBuf THEN BEGIN
    InitGLEntry(VendPostingGr."Payables Account",PositiveLCYAppAmt,PositiveACYAppAmt,FALSE,TRUE);
    InsertGLEntry(FALSE);
    InitGLEntry(VendPostingGr."Payables Account",NegativeLCYAppAmt,NegativeACYAppAmt,FALSE,TRUE);
    ...

    Заміна з кодом 4

    ...END;
    InsertGLEntry(TRUE);
    GenJnlLine."Posting Date" := OriginalPostingDate;
    END;

    // Add the following lines.
    WITH DtldVendLedgEntry3 DO BEGIN
    SETCURRENTKEY("Vendor Ledger Entry No.");
    SETRANGE("Vendor Ledger Entry No.",DtldVendLedgEntry."Vendor Ledger Entry No.");
    SETFILTER("Applies-to Bill No.",'<>%1','');
    SETRANGE(Unapplied,TRUE);
    EntryUnapplied := NOT ISEMPTY;
    END;

    PostPayableDocs(EntryUnapplied);
    // End of the added lines.

    IF NOT GLEntryTmp.FINDFIRST AND ExistDtldCVLedgEntryBuf THEN BEGIN
    InitGLEntry(VendPostingGr."Payables Account",PositiveLCYAppAmt,PositiveACYAppAmt,FALSE,TRUE);
    InsertGLEntry(FALSE);
    InitGLEntry(VendPostingGr."Payables Account",NegativeLCYAppAmt,NegativeACYAppAmt,FALSE,TRUE);
    ...
  3. Змінити код PostPayableDocs функції в полі генералом Jnl.-повідомлення рядка codeunit (12), як описано нижче:
    Наявний код 1

    ...ELSE
    VATEntry."Bill-to/Pay-to No." := GenJnlLine2."Account No.";
    END;
    END;

    // Delete the following line.
    LOCAL PROCEDURE PostPayableDocs@1100009(VAR GenJnlLine@1100000 : Record 81);
    // End of the deleted line.

    BEGIN
    IF (DocAmountLCY <> 0) OR (CollDocAmountLCY <> 0) THEN
    IF NextEntryNo2 = NextEntryNo THEN
    NextEntryNo := NextEntryNo - 1;
    IF DocAmountLCY <> 0 THEN BEGIN
    ...

    Код на заміну 1

    ...ELSE
    VATEntry."Bill-to/Pay-to No." := GenJnlLine2."Account No.";
    END;
    END;

    // Add the following line.
    LOCAL PROCEDURE PostPayableDocs@1100009(EntryUnapplied@1100001 : Boolean);
    // End of the added line.

    BEGIN
    IF (DocAmountLCY <> 0) OR (CollDocAmountLCY <> 0) THEN
    IF NextEntryNo2 = NextEntryNo THEN
    NextEntryNo := NextEntryNo - 1;
    IF DocAmountLCY <> 0 THEN BEGIN
    ...

    Наявний код 2

    ...BEGIN
    IF (DocAmountLCY <> 0) OR (CollDocAmountLCY <> 0) THEN
    IF NextEntryNo2 = NextEntryNo THEN
    NextEntryNo := NextEntryNo - 1;
    IF DocAmountLCY <> 0 THEN BEGIN

    // Delete the following lines.
    // VSTF330588.begin
    //IF (GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::Invoice) THEN BEGIN
    IF (GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::Invoice) OR
    (GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::" ")
    THEN BEGIN
    // VSTF330588.end
    // End of the deleted lines.

    VendPostingGr.TESTFIELD("Payables Account");
    InitGLEntry(VendPostingGr."Payables Account",DocAmountLCY,DocAmtCalcAddCurrency(DocAmountLCY),TRUE,TRUE);
    GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
    GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
    InsertGLEntry(TRUE);
    ...

    Код на заміну 2

    ...BEGIN
    IF (DocAmountLCY <> 0) OR (CollDocAmountLCY <> 0) THEN
    IF NextEntryNo2 = NextEntryNo THEN
    NextEntryNo := NextEntryNo - 1;
    IF DocAmountLCY <> 0 THEN BEGIN

    // Add the following lines.
    IF (GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::Invoice) OR
    EntryUnapplied
    THEN BEGIN
    // End of the added lines.

    VendPostingGr.TESTFIELD("Payables Account");
    InitGLEntry(VendPostingGr."Payables Account",DocAmountLCY,DocAmtCalcAddCurrency(DocAmountLCY),TRUE,TRUE);
    GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
    GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
    InsertGLEntry(TRUE);
    ...
  4. Змінити код PostReceivableDocs функції в полі генералом Jnl.-повідомлення рядка codeunit (12), як описано нижче:
    Наявний код 1

    ... GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
    InsertGLEntry(TRUE);
    END;
    END;

    // Delete the following line.
    LOCAL PROCEDURE PostReceivableDocs@1100003(VAR GenJnlLine@1100000 : Record 81);
    // End of the deleted line.

    BEGIN
    IF (DocAmountLCY <> 0) OR (DiscDocAmountLCY <> 0) OR (CollDocAmountLCY <> 0) OR (RejDocAmountLCY <> 0) OR
    (DiscRiskFactAmountLCY <> 0) OR (DiscUnriskFactAmountLCY <> 0) OR (CollFactAmountLCY <> 0) THEN
    IF NextEntryNo2 = NextEntryNo THEN
    NextEntryNo := NextEntryNo - 1;
    ...

    Код на заміну 1

    ...GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
    InsertGLEntry(TRUE);
    END;
    END;

    // Add the following line.
    LOCAL PROCEDURE PostReceivableDocs@1100003(EntryUnapplied@1100001 : Boolean);
    // End of the added line.

    BEGIN
    IF (DocAmountLCY <> 0) OR (DiscDocAmountLCY <> 0) OR (CollDocAmountLCY <> 0) OR (RejDocAmountLCY <> 0) OR
    (DiscRiskFactAmountLCY <> 0) OR (DiscUnriskFactAmountLCY <> 0) OR (CollFactAmountLCY <> 0) THEN
    IF NextEntryNo2 = NextEntryNo THEN
    NextEntryNo := NextEntryNo - 1;
    ...

    Наявний код 2

    ...IF (DocAmountLCY <> 0) OR (DiscDocAmountLCY <> 0) OR (CollDocAmountLCY <> 0) OR (RejDocAmountLCY <> 0) OR
    (DiscRiskFactAmountLCY <> 0) OR (DiscUnriskFactAmountLCY <> 0) OR (CollFactAmountLCY <> 0) THEN
    IF NextEntryNo2 = NextEntryNo THEN
    NextEntryNo := NextEntryNo - 1;
    IF DocAmountLCY <> 0 THEN BEGIN

    // Delete the following lines.
    // VSTF330588.begin
    //IF (GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::Invoice) THEN BEGIN
    IF (GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::Invoice) OR
    (GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::" ")
    THEN BEGIN
    // VSTF330588.end
    // End of the deleted lines.

    CustPostingGr.TESTFIELD("Receivables Account");
    InitGLEntry(CustPostingGr."Receivables Account",DocAmountLCY,DocAmtCalcAddCurrency(DocAmountLCY),TRUE,TRUE);
    GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
    GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
    InsertGLEntry(TRUE);
    ...

    Код на заміну 2

    ...IF (DocAmountLCY <> 0) OR (DiscDocAmountLCY <> 0) OR (CollDocAmountLCY <> 0) OR (RejDocAmountLCY <> 0) OR
    (DiscRiskFactAmountLCY <> 0) OR (DiscUnriskFactAmountLCY <> 0) OR (CollFactAmountLCY <> 0) THEN
    IF NextEntryNo2 = NextEntryNo THEN
    NextEntryNo := NextEntryNo - 1;
    IF DocAmountLCY <> 0 THEN BEGIN

    // Add the following lines.
    IF (GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::Invoice) OR
    EntryUnapplied
    THEN BEGIN
    // End of the added lines.

    CustPostingGr.TESTFIELD("Receivables Account");
    InitGLEntry(CustPostingGr."Receivables Account",DocAmountLCY,DocAmtCalcAddCurrency(DocAmountLCY),TRUE,TRUE);
    GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
    GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
    InsertGLEntry(TRUE);
    ...

Попередні вимоги

Ви повинні мати одну з таких продуктів, щоб застосувати це виправлення:

  • Іспанська версії Microsoft Dynamics NAV 2009-R2

  • Іспанська версії Microsoft Dynamics NAV 2009 пакетом оновлень 1

Крім того, ви повинні мати KB3034441 , інстальовано.

Відомості про видалення

Це виправлення не можна видалити.

Стан

Корпорація Майкрософт підтвердила існування цієї неполадки у продуктах Майкрософт, перелічених у розділі "Застосовується до".

Примітка. Це "Швидка публікація" статті, надана службою підтримки корпорації Майкрософт. Відомості в цій статті надано без змін у відповідь на повідомлення про проблеми. З огляду на швидкість публікації матеріали можуть містити орфографічні помилки. Їх може бути змінено в будь-який час без повідомлення. Див. Умови використанняінші міркування.

Потрібна додаткова довідка?

Потрібні додаткові параметри?

Ознайомтеся з перевагами передплати, перегляньте навчальні курси, дізнайтесь, як захистити свій пристрій тощо.

Спільноти допомагають ставити запитання й відповідати на них, надавати відгуки та дізнаватися думки висококваліфікованих експертів.

Чи ця інформація була корисною?

Наскільки ви задоволені якістю мови?
Що вплинуло на ваші враження?
Натиснувши кнопку "Надіслати", ви надасте свій відгук для покращення продуктів і служб Microsoft. Ваш ІТ-адміністратор зможе збирати ці дані. Декларація про конфіденційність.

Дякуємо за відгук!

×