Объект расчетов не встал после переноса из УТ10 в УТ11

После переноса данных с УТ 10 на УТ11.5 не проводится документ заказа покупателю, ошибка:

Ошибка при вызове метода контекста (Записать)
{ОбщийМодуль.ОбъектыРасчетовСервер.Модуль(1445)}:ВызватьИсключение (СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
{ОбщийМодуль.ОбъектыРасчетовСервер.Модуль(231)}:ЗаполнитьОбъектРасчетов(Объект, МассивСтруктур, РежимЗаписи);
{ОбщийМодуль.ВзаиморасчетыСервер.Модуль(8587)}:ОбъектыРасчетовСервер.ПроверитьОбъектыРасчетовПередЗаписью(Объект, ДополненныеПараметрыМеханизма.МассивПараметров, РежимЗаписи, Отказ);
{Документ.ЗаказКлиента.МодульОбъекта(466)}:ВзаиморасчетыСервер.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи);
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(2019)}:Результат = Форма.Записать(ПараметрыЗаписи);
{Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(8002)}:ОбщегоНазначенияУТКлиент.ОбработатьЗаписьОбъектаВФорме(ЭтотОбъект, ПараметрыДляЗаписи);

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
Не удалось найти объект расчетов для договора Основной договор.
[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ИсключениеВызванноеИзВстроенногоЯзыка]

Обнаружено, что если открыть форму договора и записать его, то после этого документ проводится нормально.

Программная перезапись договора не помогает. Ошибка возникает у тех договоров, где не заполнен объект расчетов.

Трассировка записи договора из формы показывает такой стек:

Поэтому можно выполнить в групповой обработке такой код:

Сообщить(ОбрабатываемыйОбъект);
ВзаиморасчетыСервер.ПередЗаписью(ОбрабатываемыйОбъект, ложь);
ОбрабатываемыйОбъект.Записать();

Среда: УТ 11.5.20.68. Объем 1 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментариев 9

  1. Артур:

    Аналогичный перенос из УТ 10.3.21 на УАС 11.5.20.104 Перезапись на сервере не помогает, только в форме запись в форме заполняет ОбъектРасчетов

    • ну как видите, я у себя нашел отладчиком, что он проставляет при записи из формы. это суровое undocumented 1с и чем дальше в ERP, тем страшней.

  2. Артур:

    Да, чем дальше в 1С, тем страшней, видимо ваш код работал в предыдущих версиях, а сейчас нет. Я догадываюсь что какие параметры сохраняются на форме и подставляются, а на сервере они не работают, но пока копаться в этом деле нет времени.

  3. Артур:

    В моем случае помог следующий код: (для закладки Произвольный алгоритм стандартной обработки «Групповое изменение реквизитов».
    // Доступные переменные:
    // Объект — обрабатываемый объект

    МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Объект.Ссылка);
    ПараметрыМеханизма = МенеджерОбъекта.ПараметрыВзаиморасчеты(Объект.Ссылка);

    ДополненныеПараметрыМеханизма = ВзаиморасчетыСервер.ДополненныеПараметрыМеханизма(Объект.Ссылка, ПараметрыМеханизма);
    РежимЗаписи = РежимЗаписиДокумента.Запись;
    Отказ = Ложь;
    УстановитьПривилегированныйРежим(Истина);
    ОбъектыРасчетовСервер.ПроверитьОбъектыРасчетовПередЗаписью(Объект, ДополненныеПараметрыМеханизма.МассивПараметров, РежимЗаписи, Отказ);
    Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов;
    Объект.Записать();
    УстановитьПривилегированныйРежим(Ложь);

  4. Radjabov Radjab:

    Где можно найти эту обработку?

    • Если про групповую обработку, выслал вам на почту. Но говорят, в новых версиях УТ уже поменялся алгоритм объекта расчетов, может не взлететь.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *