8.х Ошибка в модуле БухгалтерскийУчетРасчетовСКонтрагентами

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем cdiamond, 3 апр 2009.

  1. TopicStarter Overlay
    cdiamond
    Offline

    cdiamond Опытный в 1С

    Регистрация:
    25 июн 2008
    Сообщения:
    133
    Симпатии:
    0
    Баллы:
    26
    Ошибка возникает при операции "Восстановление состояния расчетов с контрагентами", на документе "Авнсовый отчет", с расчетом в у.е. При этом ручками документ проводится нормально.
    Отладчиком отловил момент ошибки, она происходит в модуле БухгалтерскийУчетРасчетовСКонтрагентами, процедура РаспределениеСуммовойРазницы():
    Обратим внимание на переменную ПроводкиНУ:
    Код:
    Если ТипЗнч(СтруктураДвижений) = Тип("Структура") Тогда
    Если СтруктураДвижений.Свойство("Налоговый") Тогда
    ПроводкиНУ = СтруктураДвижений.Налоговый;
    Иначе
    ПроводкиНУ = ОбщегоНазначения.ПолучитьНаборЗаписейПоСсылке(Ссылка,  РегистрыБухгалтерии["Налоговый"]);
    СтруктураДвижений.Вставить("Налоговый", ПроводкиНУ);
    КонецЕсли; 
    Иначе //КоллекцияДвижений 
    Если СтруктураДвижений.Найти("Налоговый") <> Неопределено Тогда
    ПроводкиНУ = СтруктураДвижений.Налоговый;
    Иначе
    Возврат;
    КонецЕсли; 
    КонецЕсли; 
    
    
    
    
    Далее с этой переменной происходит нечто странное (до этого момента она никак не использовалась):
    Код:
    //Удалим из СтруктураПараметров элемент "ПроводкиНУ", "Налоговый", чтобы избежать передачи мутабельного значения в модуль УчетНДСФормированиеДвижений
    ПроводкиНУ = неопределено;
    Налоговый = неопределено;
    
    Если СтруктураПараметров.Свойство("ПроводкиНУ") Тогда
    ПроводкиНУ = СтруктураПараметров.ПроводкиНУ;
    СтруктураПараметров.Удалить("ПроводкиНУ");
    КонецЕсли;
    Если СтруктураПараметров.Свойство("Налоговый") Тогда
    Налоговый = СтруктураПараметров.Налоговый;
    СтруктураПараметров.Удалить("Налоговый");
    КонецЕсли;
    
    
    Если НаправлениеРасчетовСКонтрагентом = Перечисления.ВидыРасчетовСКонтрагентами.ПоРеализации Тогда
    УчетНДСФормированиеДвижений.КорректировкаРегистровНДСПоСуммовымРазницам_Реализация(СтруктураПараметров, СуммоваяРазницаПоДокументам);
    Иначе
    УчетНДСФормированиеДвижений.КорректировкаРегистровНДСПоСуммовымРазницам_Приобретение(СтруктураПараметров, СуммоваяРазницаПоДокументам);
    КонецЕсли;
    
    //Добавим в СтруктураПараметров удаленный ранее элемент ПроводкиНУ, Налоговый
    Если ПроводкиНУ <> неопределено Тогда
    СтруктураПараметров.Вставить("ПроводкиНУ",ПроводкиНУ);
    ПроводкиНУ = неопределено;
    КонецЕсли;
    Если Налоговый <> неопределено Тогда
    СтруктураПараметров.Вставить("Налоговый",Налоговый);
    Налоговый = неопределено;
    КонецЕсли;
    
    
    
    
    Этот кусок появился в 20 или 21 версии, в 19 его точно не было.
    Кстати, что означает загадочное слово "мутабельный"? :unsure:
    После него ПроводкиНУ при любом раскладе имеет значение Неопределено.
    Тем не менее, в конце процедуры она передается параметром:
    Код:
    БухгалтерскийУчет.ДополнитьНаборЗаписейРегистраЗаписямиТаблицы(ПроводкиНУ,КорректировкиПроводокНУ);
    
    
    
    
    там предполагается что она является структурой, и происходит обрыв по исключению.

    Как правильно выправить данную ситуацию - вообще закомментировать последнюю строку, или компенсировать злодеяние второго фрагмента дублированием первого фрагмента перед последним куском?
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Мутабельный - это, например, ТЗ со ссылками...

    Разберитесь, какие данные он ожидает получить.

Поделиться этой страницей