Имя: Пароль:
1C
1С v8
1с КА 2.4 Ошибка при вызове метода контекста (Записать) Поступление безналичных ДС
, ,
0 mihalich979
 
10.07.19
11:47
при проведении поступления от клиента

вываливается ошибка:
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1886)}: Ошибка при вызове метода контекста (Записать)
    Результат = Форма.Записать(ПараметрыЗаписи);
по причине:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{ОбщийМодуль.ПроведениеСерверУТ.Модуль(405)}: Ошибка при вызове метода контекста (Записать)
    Объект.Движения.Записать();
по причине:
Ошибка при выполнении обработчика - 'ПриЗаписи'

что самое интересное

если снять галку "Проведено банком" то документ проводится, но естественно проводок не делает.

ставим обратно галку "проведено банком" и документ перестает проводиться и вываливается ошибка.
1 PiotrLoginov
 
10.07.19
12:23
других сообщений при ошибке нет? не верится, что вся информация заканчивается на строке "по причине:
Ошибка при выполнении обработчика - 'ПриЗаписи'"
2 mihalich979
 
10.07.19
12:48
(1) именно так.
3 mihalich979
 
10.07.19
14:22
вечером сниму копию и локально по отлаживаю.
4 rilovnikova
 
10.07.19
22:14
Здравствуйте, получилось решить? У меня такая же проблема в ут, не могу найти, в чем косяк
5 palsergeich
 
10.07.19
22:23
Без отладки никак.
У меня валилось на корявой реализации нового механизма взаиморасчетов в ЕРП, только отладка, только хардкор
6 palsergeich
 
10.07.19
22:23
Точно с таким же текстом
7 palsergeich
 
10.07.19
22:27
И останова по ошибке не ловит)
Они по ходу методолога поменяли, а вот сделать нормально - нишмогла
8 PaulBC
 
11.07.19
03:08
(0) валится на проверке даты запрета в ОперативныеВзаиморасчетыСервер.ЗаполнитьОперативныеВзаиморасчеты
У себя пока убрал проверку, в 2.4.9 вроде переделали.
9 rilovnikova
 
11.07.19
09:50
(8) А в какой именно строке? Просмотрела всю процедуру, не могу понять.


Процедура ЗаполнитьОперативныеВзаиморасчеты(ОсновныеПараметры) Экспорт
    
    #Область ИнициализацияЗапросаИПеременных
    
    АналитикаУчетаПоПартнерам      = ОсновныеПараметры.АналитикаУчетаПоПартнерам;
    ОбъектРасчетов                 = ОсновныеПараметры.ОбъектРасчетов;
    ВалютаРасчетов                 = ОсновныеПараметры.ВалютаРасчетов;
    ЭтоРасчетыСКлиентами           = ОсновныеПараметры.ЭтоРасчетыСКлиентами;
    Регистратор                    = ОсновныеПараметры.Регистратор;
    Порядок                        = ОсновныеПараметры.Порядок;
    
    ВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
    ВалютаУправленческогоУчета     = Константы.ВалютаУправленческогоУчета.Получить();
    АналитикаОбъектаРасчета = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(АналитикаУчетаПоПартнерам,"Организация");
    
    Организация = АналитикаОбъектаРасчета.Организация;
    
    //Если график исполнения в договоре, то вместо графика заказа будет уточняться график договора.
    //Если пользователь каким-то образом ввел заказы с графиками по такому договору, то все этапы таких заказов будут отнесены к графику договора
    //и закрываться будут по ФИФО независимо от привязки накладных к заказам
    Если ТипЗнч(ОбъектРасчетов) = Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда
        ГрафикИсполненияДоговора = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектРасчетов,"ГрафикИсполненияДоговора");
        ГрафикВДоговоре = ЗначениеЗаполнено(ГрафикИсполненияДоговора);
    Иначе
        ГрафикИсполненияДоговора = Неопределено;
        ГрафикВДоговоре = ЛОЖЬ;
    КонецЕсли;
    
    Если ЭтоРасчетыСКлиентами Тогда
        РасчетыПоЗаказу = ТипЗнч(ОбъектРасчетов) = Тип("ДокументСсылка.ЗаказКлиента")
                        ИЛИ ТипЗнч(ОбъектРасчетов) = Тип("ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента");
    Иначе
        РасчетыПоЗаказу = ТипЗнч(ОбъектРасчетов) = Тип("ДокументСсылка.ЗаказПоставщику");
    КонецЕсли;
    
    СписокТиповПлатежек = ТипыПлатежныхДокументов();
    РасчетыПоПлатежке = СписокТиповПлатежек.Найти(ТипЗнч(ОбъектРасчетов)) <> Неопределено;
    ХозяйственныеОперацииНеОтгрузка = ХозяйственныеОперацииНеОтгрузка();
    
    Если НЕ РасчетыПоПлатежке И ТипЗнч(ОбъектРасчетов) = Тип("ДокументСсылка.ПервичныйДокумент") Тогда
        ТипПервичногоДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектРасчетов,"ТипПервичногоДокумента");
        РасчетыПоПлатежке = ТипПервичногоДокумента = Перечисления.ТипыПервичныхДокументов.ОплатаПоставщику
                        ИЛИ ТипПервичногоДокумента = Перечисления.ТипыПервичныхДокументов.ОплатаОтКлиента;
    КонецЕсли;
    
    ГлобальныеПеременные = Новый Структура;
    ГлобальныеПеременные.Вставить("ЕжедневнаяПереоценка", Константы.ПереоцениватьВалютныеСредстваПоДням.Получить());
    //Для уточнения плана оплат - в переменной хранится последний момент времени плана оплат,
    //чтобы при добавлении записи в план оплат можно было сразу определить есть ли планы оплат с датой больше, чем добавляемая запись.
    ГлобальныеПеременные.Вставить("МаксимальныйПорядокПланаОплат","");
    ГлобальныеПеременные.Вставить("ВалютаРасчетов", ВалютаРасчетов);
    ГлобальныеПеременные.Вставить("ГрафикВДоговоре", ГрафикВДоговоре);
    ГлобальныеПеременные.Вставить("ЭтоРасчетыСКлиентами", ЭтоРасчетыСКлиентами);
    ГлобальныеПеременные.Вставить("ПорядокПереоценки", Новый Соответствие);
    
    //Хозяйственные операции для заполнения.
    ХозяйственныеОперации = Новый Соответствие;
    
    Если ЭтоРасчетыСКлиентами Тогда
        ХозяйственныеОперации.Вставить("ЗачетАванса",             Перечисления.ХозяйственныеОперации.ЗачетАвансаКлиента);
        ХозяйственныеОперации.Вставить("ПогашениеЗадолженности",  Перечисления.ХозяйственныеОперации.ПогашениеЗадолженностиКлиента);
        ХозяйственныеОперации.Вставить("ВозвратАванса",           Перечисления.ХозяйственныеОперации.ВозвратОплатыКлиенту);
        ХозяйственныеОперации.Вставить("ПереоценкаПоложительная", Перечисления.ХозяйственныеОперации.КурсовыеРазницыКлиентыПрибыль);
        ХозяйственныеОперации.Вставить("ПереоценкаОтрицательная", Перечисления.ХозяйственныеОперации.КурсовыеРазницыКлиентыУбыток);
        ХозяйственныеОперации.Вставить("Планирование",            Перечисления.ХозяйственныеОперации.ПланированиеПоЗаказуКлиента);
    Иначе
        ХозяйственныеОперации.Вставить("ЗачетАванса",             Перечисления.ХозяйственныеОперации.ЗачетАвансаПоставщику);
        ХозяйственныеОперации.Вставить("ПогашениеЗадолженности",  Перечисления.ХозяйственныеОперации.ПогашениеЗадолженностиПоставщику);
        ХозяйственныеОперации.Вставить("ВозвратАванса",           Перечисления.ХозяйственныеОперации.ВозвратДенежныхСредствОтПоставщика);
        ХозяйственныеОперации.Вставить("ПереоценкаПоложительная", Перечисления.ХозяйственныеОперации.КурсовыеРазницыПоставщикиУбыток);
        ХозяйственныеОперации.Вставить("ПереоценкаОтрицательная", Перечисления.ХозяйственныеОперации.КурсовыеРазницыПоставщикиПрибыль);
        ХозяйственныеОперации.Вставить("Планирование",            Перечисления.ХозяйственныеОперации.ПланированиеПоЗаказуПоставщику);
    КонецЕсли;
    ХозяйственныеОперации.Вставить("ПереносАванса", Перечисления.ХозяйственныеОперации.ПереносАванса);
    
    ГлобальныеПеременные.Вставить("ХозяйственныеОперации", ХозяйственныеОперации);
    
    Запрос                         = Новый Запрос;
    Менеджер                       = Новый МенеджерВременныхТаблиц;
    Запрос.МенеджерВременныхТаблиц = Менеджер;
    
    Запрос.УстановитьПараметр("ОбъектРасчетов",             ОбъектРасчетов);
    Запрос.УстановитьПараметр("АналитикаУчетаПоПартнерам",  АналитикаУчетаПоПартнерам);
    Запрос.УстановитьПараметр("Организация",                Организация);
    Запрос.УстановитьПараметр("ВалютаУпр",                  ВалютаУправленческогоУчета);
    Запрос.УстановитьПараметр("ВалютаРегл",                 ВалютаРегламентированногоУчета);
    Запрос.УстановитьПараметр("СписокТиповЗаказов",         СписокТиповРегистраторовПланов());
    Запрос.УстановитьПараметр("ВалютаРасчетов",             ВалютаРасчетов);
    Запрос.УстановитьПараметр("Порядок",                    Порядок);
    Запрос.УстановитьПараметр("ГрафикВДоговоре",            ГрафикВДоговоре);
    Запрос.УстановитьПараметр("ГрафикИсполненияДоговора",   ГрафикИсполненияДоговора);
    Запрос.УстановитьПараметр("РасчетыПоЗаказу",            РасчетыПоЗаказу);
    Запрос.УстановитьПараметр("ЭтоРасчетыСКлиентами",       ЭтоРасчетыСКлиентами);
    Запрос.УстановитьПараметр("Регистратор",                Регистратор);
    Запрос.УстановитьПараметр("ПорядокЗачетаПоДатеПлатежа", Константы.ПорядокЗачетаДокументовПоДатеОперации.Получить() = 1);
    
    #КонецОбласти
    
    #Область ИнициализацияНаборовЗаписей
    
    Если ЭтоРасчетыСКлиентами Тогда
        НаборЗаписейПоСрокам = РегистрыНакопления.РасчетыСКлиентамиПоСрокам.СоздатьНаборЗаписей();
        НаборЗаписейПланОплат = РегистрыНакопления.РасчетыСКлиентамиПланОплат.СоздатьНаборЗаписей();
        НаборЗаписейПланОтгрузокПоставок = РегистрыНакопления.РасчетыСКлиентамиПланОтгрузок.СоздатьНаборЗаписей();
    Иначе
        НаборЗаписейПоСрокам = РегистрыНакопления.РасчетыСПоставщикамиПоСрокам.СоздатьНаборЗаписей();
        НаборЗаписейПланОплат = РегистрыНакопления.РасчетыСПоставщикамиПланОплат.СоздатьНаборЗаписей();
        НаборЗаписейПланОтгрузокПоставок = РегистрыНакопления.РасчетыСПоставщикамиПланПоставок.СоздатьНаборЗаписей();
    КонецЕсли;
    
    Если ОсновныеПараметры.Свойство("ДополнительныеСвойстваПроведения") И ОсновныеПараметры.ДополнительныеСвойстваПроведения <> Неопределено Тогда
        НаборЗаписейПоСрокам.ДополнительныеСвойства.Вставить("ПроверятьИзмененияРегистра", Истина);
        Если ОсновныеПараметры.Свойство("Регистратор") Тогда
            // При изменении проведения документа будут изменения в регистре, но по ним не следует регистрировать документ к отражению,
            //    так как он в любом случае изменит свои данные отражения при проведении (или распроведении).
            НаборЗаписейПоСрокам.ДополнительныеСвойства.Вставить("НеотражаемыйДокумент", ОсновныеПараметры.Регистратор);
        КонецЕсли;
    КонецЕсли;
    
    РегистраторРасчетовОбъект = РегистраторРасчетов(ОбъектРасчетов, АналитикаУчетаПоПартнерам, ВалютаРасчетов, ЭтоРасчетыСКлиентами, Организация);
    РегистраторРасчетов = РегистраторРасчетовОбъект.Ссылка;
    
    НаборЗаписейПоСрокам.Отбор.Регистратор.Установить(РегистраторРасчетов);
    НаборЗаписейПланОплат.Отбор.Регистратор.Установить(РегистраторРасчетов);
    НаборЗаписейПланОтгрузокПоставок.Отбор.Регистратор.Установить(РегистраторРасчетов);
    
    #КонецОбласти
    
    //Движения до начала пересчета и остатки.
    СформироватьВТДанныхРегистровДоНачалаРасчетов(Запрос, ЭтоРасчетыСКлиентами);
    //Данные регистров с порядком меньше порядка начала расчета, далее дополняются.
    ТаблицаРасчетовПоСрокам     = Менеджер.Таблицы["ВТРасчетыПоСрокамДо"].ПолучитьДанные().Выгрузить();
    ТаблицаПланОплат            = Менеджер.Таблицы["ВТРасчетыПланОплатДо"].ПолучитьДанные().Выгрузить();
    ТаблицаПланОтгрузокПоставок = Менеджер.Таблицы["ВТРасчетыПланОтгрузокПоставокДо"].ПолучитьДанные().Выгрузить();
    
    //Движения после начала пересчета и остатки до начала пересчета для распределения.
    РасчетыОтгрузкиПоставки    = ПолучитьОтгрузкиПоставки(Запрос, Порядок);
    ПланыОплат                 = ПолучитьПланыОплат(Запрос, Порядок, ЭтоРасчетыСКлиентами);
    ПланыОтгрузокПоставок      = ПолучитьПланыОтгрузокПоставок(Запрос, Порядок, ЭтоРасчетыСКлиентами);
    РасчетыОплаты              = ПолучитьОплаты(Запрос, Порядок);
    
    Если РасчетыОплаты.Количество() = 0 И РасчетыОтгрузкиПоставки.Количество() = 0 И ТаблицаРасчетовПоСрокам.Количество() = 0 И НЕ ОсновныеПараметры.ТолькоПланы Тогда
        НаборЗаписейПоСрокам.Записать();
    КонецЕсли;
    Если ПланыОплат.Количество() = 0 И РасчетыОтгрузкиПоставки.Количество() = 0 И ТаблицаПланОплат.Количество() = 0 Тогда
        НаборЗаписейПланОплат.Записать();
    КонецЕсли;
    Если ПланыОтгрузокПоставок.Количество() = 0 И ТаблицаПланОтгрузокПоставок.Количество() = 0 Тогда
        НаборЗаписейПланОтгрузокПоставок.Записать();
    КонецЕсли;
    
    НужнаПереоценка = (ВалютаРасчетов <> ВалютаРегламентированногоУчета ИЛИ ВалютаРасчетов <> ВалютаУправленческогоУчета)
        И РасчетыОтгрузкиПоставки.Количество() > 0
        И НЕ ОсновныеПараметры.ТолькоПланы;
    
    Если НужнаПереоценка Тогда
        ДатаНачалаКурсов = Мин(РасчетыОтгрузкиПоставки[0].Период,
                                    ?(РасчетыОплаты.Количество() > 0,
                                        РасчетыОплаты[0].Период,
                                        РасчетыОтгрузкиПоставки[0].Период));
        ТаблицаКурсовВалют = ПолучитьКурсыВалют(Запрос, ДатаНачалаКурсов, ГлобальныеПеременные);
        ГлобальныеПеременные.Вставить("ТаблицаКурсовВалют", ТаблицаКурсовВалют);
    КонецЕсли;
    
    ДокументыРасчетаКурсовыхРазниц = Документы.РасчетКурсовыхРазниц.ДокументыПереоценки(Организация,
        ?(РасчетыОтгрузкиПоставки.Количество() > 0, РасчетыОтгрузкиПоставки[0].ДатаВозникновения, ТекущаяДатаСеанса()),
        ТекущаяДатаСеанса(),
        ЭтоРасчетыСКлиентами);
    
    ГлобальныеПеременные.Вставить("ДокументыРасчетаКурсовыхРазниц", ДокументыРасчетаКурсовыхРазниц);
    
    //Добавляем приходные записи по плану оплаты (заказы , график договора)
    //накладные не добавляем, т.к они могут быть уменьшены авансами.
    Для Каждого Стр Из ПланыОплат Цикл
        Если НЕ Стр.ПриходДобавлен Тогда
            НовСтр = ТаблицаПланОплат.Добавить();
            НовСтр.ВидДвижения               = ВидДвиженияНакопления.Приход;
            НовСтр.ДокументРегистратор       = Стр.Регистратор;
            НовСтр.ДокументПлан              = Стр.Регистратор;
            НовСтр.ВариантОплаты             = Стр.ВариантОплаты;
            НовСтр.Период                    = Стр.Период;
            НовСтр.ДатаВозникновения         = Стр.ДатаВозникновения;
            НовСтр.ДатаПлановогоПогашения    = Стр.ДатаПлановогоПогашения;
            НовСтр.КОплате                   = Стр.КОплате;
            НовСтр.ПорядокОперации           = Стр.ПорядокОперации;
            НовСтр.ПорядокЗачета             = Стр.ПорядокОперации;
            НовСтр.ХозяйственнаяОперация     = ГлобальныеПеременные.ХозяйственныеОперации["Планирование"];
        КонецЕсли;
    КонецЦикла;
    
    //Добавляем приходные записи планов отгрузок.
    Для Каждого Стр Из ПланыОтгрузокПоставок Цикл
        Если НЕ Стр.ПриходДобавлен Тогда
            НовСтр = ТаблицаПланОтгрузокПоставок.Добавить();
            НовСтр.ВидДвижения               = ВидДвиженияНакопления.Приход;
            НовСтр.ДокументРегистратор       = Стр.Регистратор;
            НовСтр.ДокументПлан              = Стр.Регистратор;
            НовСтр.Период                    = Стр.Период;
            НовСтр.ДатаВозникновения         = Стр.ДатаВозникновения;
            НовСтр.ДатаПлановогоПогашения    = Стр.ДатаПлановогоПогашения;
            НовСтр.Сумма                     = Стр.КОтгрузкеПоставке;
            НовСтр.ПорядокЗачета             = Стр.ПорядокОперации;
            НовСтр.ПорядокОперации           = Стр.ПорядокОперации;
        КонецЕсли;
    КонецЦикла;
    
    //Для определения курса корректировки реализации в минус.
    //Ключ     - ДокументСсылка.РеализациТоваровУслуг, ДокументСсылка.АктВыполненныхРабот
    //Значение - Структура
    //     * СуммаДокумента, СуммаДокументаРегл, СуммаДокументаУпр - нужны для определения среднего курса реализации при проведении корректировок.
    ДанныеНакладных = Новый Соответствие;
    ТаблицаДанныхНакладных = ПолучитьДанныеНакладных(Запрос);
    Для Каждого Строка Из ТаблицаДанныхНакладных Цикл
        ДанныеНакладных.Вставить(Строка.Накладная,
                                    СтруктураСумм(Строка.Сумма,
                                                    Строка.СуммаРегл,
                                                    Строка.СуммаУпр));
    КонецЦикла;
    ГлобальныеПеременные.Вставить("ДанныеНакладных", ДанныеНакладных);
    
    ЗаписейОплаты           = РасчетыОплаты.Количество();
    ЗаписейОтгрузкиПоставки = РасчетыОтгрузкиПоставки.Количество();
    ЗаписейОбработать       = ЗаписейОплаты + ЗаписейОтгрузкиПоставки;
    
    Индексы = Новый Структура;
    //Индекс текущей обрабатываемой строки отгрузок.
    Индексы.Вставить("ИндексОтгрузкиПоставки", 0);
    //Индекс текущей обрабатываемой строки оплат.
    Индексы.Вставить("ИндексОплаты", 0);
    
    //Для распределения копеек в рамках документа.
    ТекущийДокументОплаты           = Неопределено;
    ТекущийДокументОтгрузкиПоставки = Неопределено;
    
    //Сколько строк отгрузки пропущено для зачета корректировкой реализации.
    ПропускОтгрузкиПоставки = 0;
    
    Пока Индексы.ИндексОплаты + Индексы.ИндексОтгрузкиПоставки < ЗаписейОбработать Цикл
        
        Если Индексы.ИндексОплаты <= ЗаписейОплаты - 1 И Индексы.ИндексОтгрузкиПоставки <= ЗаписейОтгрузкиПоставки - 1 Тогда
            
            СтрокаОплаты           = РасчетыОплаты[Индексы.ИндексОплаты];
            СтрокаОтгрузкиПоставки = РасчетыОтгрузкиПоставки[Индексы.ИндексОтгрузкиПоставки];
            
            //Оплата раньше отгрузки.
            Если СтрокаОплаты.ПорядокОперации < СтрокаОтгрузкиПоставки.ПорядокОперации
                //В пределах регистратора (при расчетах по накладным) должен происходить зачет аванса.
                ИЛИ СтрокаОплаты.Регистратор = СтрокаОтгрузкиПоставки.Регистратор Тогда
                
                //Переброс аванса на расчетный документ - накладную.
                НеОтгрузка = ХозяйственныеОперацииНеОтгрузка.Найти(СтрокаОтгрузкиПоставки.ХозяйственнаяОперация) <> Неопределено;
                ДвойнаяЗаписьНеНужна = НеОтгрузка
                    //Если расчеты по платежке, то эти движения уже отражены в оперативных расчетах в рамках переноса с одного объекта расчетов на другой.
                    ИЛИ РасчетыПоПлатежке;
                
                //Приход предоплаты.
                Если НЕ СтрокаОплаты.ПриходДобавлен Тогда
                    ПересчитатьСуммыЕслиЭтоКорректировка(ГлобальныеПеременные, СтрокаОплаты);
                    ДобавитьПриход(ГлобальныеПеременные, ТаблицаРасчетовПоСрокам, СтрокаОплаты, "Оплата");
                КонецЕсли;
                
                //Уменьшаем план отгрузки, если есть.
                Если НЕ СтрокаОтгрузкиПоставки.ПланОтгрузокПоставокСписан Тогда
                    СписатьПланОтгрузкиПоставки(ГлобальныеПеременные, ТаблицаПланОтгрузокПоставок, СтрокаОтгрузкиПоставки, ПланыОтгрузокПоставок);
                КонецЕсли;
                
                Если СтрокаОтгрузкиПоставки.Сумма <> 0 Тогда
                
                    Если ТекущийДокументОплаты <> СтрокаОплаты.РасчетныйДокумент Тогда
                        ПредоплатаРаспределеноРегл = 0;
                        ПредоплатаРаспределеноУпр  = 0;
                        ТекущийДокументОплаты      = СтрокаОплаты.РасчетныйДокумент;
                    КонецЕсли;
                    
                    Если ТекущийДокументОтгрузкиПоставки <> СтрокаОтгрузкиПоставки.РасчетныйДокумент Тогда
                        ДолгРаспределеноРегл       = 0;
                        ДолгРаспределеноУпр        = 0;
                        ТекущийДокументОтгрузкиПоставки = СтрокаОтгрузкиПоставки.РасчетныйДокумент;
                    КонецЕсли;
                    
                    //Добавляем запись списания предоплаты.
                    НовСтр_Предоплата_Расход                          = ТаблицаРасчетовПоСрокам.Добавить();
                    НовСтр_Предоплата_Расход.ВидДвижения              = ВидДвиженияНакопления.Расход;
                    НовСтр_Предоплата_Расход.ДокументРегистратор      = СтрокаОтгрузкиПоставки.Регистратор;
                    НовСтр_Предоплата_Расход.ВалютаДокумента          = СтрокаОтгрузкиПоставки.ВалютаДокумента;
                    НовСтр_Предоплата_Расход.Период                   = СтрокаОтгрузкиПоставки.Период;
                    НовСтр_Предоплата_Расход.РасчетныйДокумент        = СтрокаОплаты.РасчетныйДокумент;
                    НовСтр_Предоплата_Расход.ДатаВозникновения        = СтрокаОплаты.ДатаВозникновения;
                    НовСтр_Предоплата_Расход.ДатаПлановогоПогашения   = Дата(1,1,1);
                    НовСтр_Предоплата_Расход.ПорядокЗачета            = СтрокаОплаты.ПорядокОперации;
                    НовСтр_Предоплата_Расход.ПорядокОперации          = СтрокаОтгрузкиПоставки.ПорядокОперации;
                    НовСтр_Предоплата_Расход.СтатьяДвиженияДенежныхСредств = СтрокаОтгрузкиПоставки.СтатьяДвиженияДенежныхСредств;
                    
                    НовСтр_Предоплата_Расход.КорОбъектРасчетов        = СтрокаОплаты.КорОбъектРасчетов;
                    
                    СуммаСписания = Мин(СтрокаОплаты.Сумма, СтрокаОтгрузкиПоставки.Сумма);
                    
                    //Возврат аванса с ручным курсом отражаем по курсу возврата.
                    Если СтрокаОтгрузкиПоставки.ЭтоВозвратАванса И СтрокаОтгрузкиПоставки.РучнойКурсРегл Тогда
                        ПредоплатаРеглПредв = СтрокаОтгрузкиПоставки.СуммаРегл / СтрокаОтгрузкиПоставки.Сумма * СуммаСписания;
                    //Ошибки округления сразу зачитываем, если что они переоценятся.
                    ИначеЕсли СтрокаОтгрузкиПоставки.РучнойКурсРегл И СтрокаОтгрузкиПоставки.Сумма = СуммаСписания Тогда
                        ПредоплатаРеглПредв = СтрокаОтгрузкиПоставки.СуммаРегл;
                    //Остальные авансы по курсу аванса.
                    Иначе
                        ПредоплатаРеглПредв = СтрокаОплаты.СуммаРегл / СтрокаОплаты.Сумма * СуммаСписания;
                    КонецЕсли;
                    
                    Если СтрокаОтгрузкиПоставки.ЭтоВозвратАванса И СтрокаОтгрузкиПоставки.РучнойКурсУпр Тогда
                        ПредоплатаУпрПредв = СтрокаОтгрузкиПоставки.СуммаУпр / СтрокаОтгрузкиПоставки.Сумма * СуммаСписания;
                    ИначеЕсли СтрокаОтгрузкиПоставки.РучнойКурсУпр И СтрокаОтгрузкиПоставки.Сумма = СуммаСписания Тогда
                        ПредоплатаУпрПредв = СтрокаОтгрузкиПоставки.СуммаУпр;
                    Иначе
                        ПредоплатаУпрПредв = СтрокаОплаты.СуммаУпр / СтрокаОплаты.Сумма * СуммаСписания;
                    КонецЕсли;
                    
                    Если СтрокаОтгрузкиПоставки.ЭтоВозвратАванса Тогда
                        НовСтр_Предоплата_Расход.ХозяйственнаяОперация = ХозяйственныеОперации["ВозвратАванса"];
                    ИначеЕсли РасчетыПоПлатежке И НЕ СтрокаОтгрузкиПоставки.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВзаимозачетЗадолженности Тогда
                        НовСтр_Предоплата_Расход.ХозяйственнаяОперация = ХозяйственныеОперации["ПереносАванса"];
                    ИначеЕсли НеОтгрузка Тогда
                        НовСтр_Предоплата_Расход.ХозяйственнаяОперация = СтрокаОтгрузкиПоставки.ХозяйственнаяОперация;
                    Иначе
                        НовСтр_Предоплата_Расход.ХозяйственнаяОперация = ХозяйственныеОперации["ЗачетАванса"];
                    КонецЕсли;
                    
                    НовСтр_Предоплата_Расход.Предоплата     = СуммаСписания;
                    НовСтр_Предоплата_Расход.ПредоплатаРегл = Окр(ПредоплатаРеглПредв + ПредоплатаРаспределеноРегл - Окр(ПредоплатаРаспределеноРегл, 2), 2);
                    НовСтр_Предоплата_Расход.ПредоплатаУпр  = Окр(ПредоплатаУпрПредв + ПредоплатаРаспределеноУпр - Окр(ПредоплатаРаспределеноУпр, 2), 2);
                    
                    ПредоплатаРаспределеноРегл = ПредоплатаРаспределеноРегл + ПредоплатаРеглПредв;
                    ПредоплатаРаспределеноУпр  = ПредоплатаРаспределеноУпр  + ПредоплатаУпрПредв;
                    
                    //Уменьшаем строку оплаты на сумму зачета
                    СтрокаОплаты.Сумма         = СтрокаОплаты.Сумма     - НовСтр_Предоплата_Расход.Предоплата;
                    СтрокаОплаты.СуммаРегл     = СтрокаОплаты.СуммаРегл - НовСтр_Предоплата_Расход.ПредоплатаРегл;
                    СтрокаОплаты.СуммаУпр      = СтрокаОплаты.СуммаУпр  - НовСтр_Предоплата_Расход.ПредоплатаУпр;
                    
                    Если НЕ ДвойнаяЗаписьНеНужна Тогда
                        //Отражаем приход на сумму долга по курсу предоплаты.
                        НовСтр_Долг_Приход = ТаблицаРасчетовПоСрокам.Добавить();
                        ЗаполнитьЗначенияСвойств(НовСтр_Долг_Приход, НовСтр_Предоплата_Расход , ,"Предоплата, ПредоплатаУпр, ПредоплатаРегл, КорОбъектРасчетов");
                        
                        НовСтр_Долг_Приход.ВидДвижения                   = ВидДвиженияНакопления.Приход;
                        НовСтр_Долг_Приход.Период                        = СтрокаОтгрузкиПоставки.Период;
                        НовСтр_Долг_Приход.ДатаВозникновения             = СтрокаОтгрузкиПоставки.Период;
                        НовСтр_Долг_Приход.ДатаПлановогоПогашения        = СтрокаОтгрузкиПоставки.ДатаПлановогоПогашения;
                        НовСтр_Долг_Приход.РасчетныйДокумент             = СтрокаОтгрузкиПоставки.Регистратор;
                        НовСтр_Долг_Приход.ПорядокЗачета                 = СтрокаОтгрузкиПоставки.ПорядокЗачета;
                        НовСтр_Долг_Приход.ХозяйственнаяОперация         = СтрокаОтгрузкиПоставки.ХозяйственнаяОперация;
                        НовСтр_Долг_Приход.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.ПустаяСсылка();
                        
                        НовСтр_Долг_Приход.Долг                          = НовСтр_Предоплата_Расход.Предоплата;
                        Если СтрокаОтгрузкиПоставки.РучнойКурсУпр Тогда
                            НовСтр_Долг_Приход.ДолгУпр                   = СтрокаОтгрузкиПоставки.КурсУпр * СуммаСписания;
                        Иначе
                            НовСтр_Долг_Приход.ДолгУпр                   = НовСтр_Предоплата_Расход.ПредоплатаУпр;
                        КонецЕсли;
                        Если СтрокаОтгрузкиПоставки.РучнойКурсРегл Тогда
                            НовСтр_Долг_Приход.ДолгРегл                  = СтрокаОтгрузкиПоставки.КурсРегл * СуммаСписания;
                        Иначе
                            НовСтр_Долг_Приход.ДолгРегл                  = НовСтр_Предоплата_Расход.ПредоплатаРегл;
                        КонецЕсли;
                        
                        //Переносим предоплату на расчетный документ отгрузки.
                        НовСтр_Долг_Расход = ТаблицаРасчетовПоСрокам.Добавить();
                        ЗаполнитьЗначенияСвойств(НовСтр_Долг_Расход, НовСтр_Долг_Приход);
                        НовСтр_Долг_Расход.ВидДвижения                   = ВидДвиженияНакопления.Расход;
                        НовСтр_Долг_Расход.ХозяйственнаяОперация         = ХозяйственныеОперации["ЗачетАванса"];
                        НовСтр_Долг_Расход.ДатаПлановогоПогашения        = СтрокаОтгрузкиПоставки.ДатаПлановогоПогашения;
                        НовСтр_Долг_Расход.РасчетныйДокумент             = СтрокаОтгрузкиПоставки.Регистратор;
                        НовСтр_Долг_Расход.ДатаВозникновения             = СтрокаОтгрузкиПоставки.Период;
                        НовСтр_Долг_Расход.ПорядокЗачета                 = СтрокаОтгрузкиПоставки.ПорядокЗачета;
                        НовСтр_Долг_Расход.ДокументРегистратор           = СтрокаОтгрузкиПоставки.Регистратор;
                        НовСтр_Долг_Расход.СтатьяДвиженияДенежныхСредств = СтрокаОтгрузкиПоставки.СтатьяДвиженияДенежныхСредств;
                        
                        НовСтр_Долг_Расход.Долг                          = НовСтр_Предоплата_Расход.Предоплата;
                        НовСтр_Долг_Расход.ДолгУпр                       = НовСтр_Предоплата_Расход.ПредоплатаУпр;
                        НовСтр_Долг_Расход.ДолгРегл                      = НовСтр_Предоплата_Расход.ПредоплатаРегл;
                        
                        //Если курс переноса предоплаты и прихода по долгу не совпал, делаем переоценку.
                        //Возможно, когда и в оплате и в накладной ручные суммы в валюте регл. или упр. учета.
                        Если НовСтр_Долг_Приход.ДолгРегл <> НовСтр_Долг_Расход.ДолгРегл
                            ИЛИ НовСтр_Долг_Приход.ДолгУпр <> НовСтр_Долг_Расход.ДолгУпр Тогда
                            ДобавитьЗаписьПереоценки(ГлобальныеПеременные,
                                                        ТаблицаРасчетовПоСрокам,
                                                        СтрокаОтгрузкиПоставки.Период,
                                                        НовСтр_Долг_Приход,
                                                        "Долг",
                                                        НовСтр_Долг_Расход.ДолгРегл - НовСтр_Долг_Приход.ДолгРегл,
                                                        НовСтр_Долг_Расход.ДолгУпр - НовСтр_Долг_Приход.ДолгУпр);
                        КонецЕсли;
                        
                    КонецЕсли;
                    
                    Если СтрокаОтгрузкиПоставки.РучнойКурсРегл И НЕ ДвойнаяЗаписьНеНужна Тогда
                        //Остаток должен быть уменьшен ровно на ту сумму, на которую уже сформирован приход в двойной записи.
                        ДолгРеглПредв = НовСтр_Долг_Приход.ДолгРегл;
                    Иначе
                        //Иначе пропорционально уменьшаем остаток строки.
                        ДолгРеглПредв = СтрокаОтгрузкиПоставки.КурсРегл * СуммаСписания;
                    КонецЕсли;
                    
                    Если СтрокаОтгрузкиПоставки.РучнойКурсУпр И НЕ ДвойнаяЗаписьНеНужна Тогда
                        ДолгУпрПредв = НовСтр_Долг_Приход.ДолгУпр;
                    Иначе
                        ДолгУпрПредв = СтрокаОтгрузкиПоставки.КурсУпр * СуммаСписания;
                    КонецЕсли;
                    
                    Если ГлобальныеПеременные.ДанныеНакладных[СтрокаОтгрузкиПоставки.Регистратор] = Неопределено Тогда
                        ГлобальныеПеременные.ДанныеНакладных.Вставить(СтрокаОтгрузкиПоставки.Регистратор, СтруктураСумм());
                    КонецЕсли;
                    
                    СтрокаОтгрузкиПоставки.Сумма     = СтрокаОтгрузкиПоставки.Сумма - СуммаСписания;
                    СтрокаОтгрузкиПоставки.СуммаРегл = СтрокаОтгрузкиПоставки.СуммаРегл - Окр(ДолгРеглПредв + ДолгРаспределеноРегл - Окр(ДолгРаспределеноРегл,2),2);
                    СтрокаОтгрузкиПоставки.СуммаУпр  = СтрокаОтгрузкиПоставки.СуммаУпр - Окр(ДолгУпрПредв + ДолгРаспределеноУпр - Окр(ДолгРаспределеноУпр,2),2);
                    
                    ДолгРаспределеноРегл = ДолгРаспределеноРегл + ДолгРеглПредв;
                    ДолгРаспределеноУпр  = ДолгРаспределеноУпр  + ДолгУпрПредв;
                    
                    ДанныеНакладной                    = ГлобальныеПеременные.ДанныеНакладных[СтрокаОтгрузкиПоставки.Регистратор];
                    ДанныеНакладной.СуммаДокумента     = ДанныеНакладной.СуммаДокумента     + СуммаСписания;
                    ДанныеНакладной.СуммаДокументаРегл = ДанныеНакладной.СуммаДокументаРегл + НовСтр_Предоплата_Расход.ПредоплатаРегл; //-
                    ДанныеНакладной.СуммаДокументаУпр  = ДанныеНакладной.СуммаДокументаУпр  + НовСтр_Предоплата_Расход.ПредоплатаУпр;
                    
                    //Уменьшаем график оплаты условной задолженности на разницу суммы зачтенного аванса и строк накладной сверх заказа.
                    СуммаУменьшенияГрафика = ВзаиморасчетыСервер.СписатьСумму(СуммаСписания, СтрокаОтгрузкиПоставки.КОплате);
                    Если СуммаСписания > 0 И НЕ СтрокаОплаты.ГрафикСписан Тогда
                        СкорректироватьПлановыеОплаты(ГлобальныеПеременные, ТаблицаПланОплат, СтрокаОплаты, СуммаСписания, "Аванс", ПланыОплат);
                    КонецЕсли;
                    
                    Если СтрокаОплаты.Сумма = 0 Тогда
                        Индексы.ИндексОплаты = Индексы.ИндексОплаты + 1;
                        Если Окр(СтрокаОплаты.СуммаРегл, 2) <> 0 ИЛИ Окр(СтрокаОплаты.СуммаУпр, 2) <> 0 Тогда
                            ДобавитьЗаписьПереоценки(ГлобальныеПеременные, ТаблицаРасчетовПоСрокам, СтрокаОтгрузкиПоставки.Период,
                                СтрокаОплаты, "Предоплата", -Окр(СтрокаОплаты.СуммаРегл, 2), -Окр(СтрокаОплаты.СуммаУпр, 2));
                        КонецЕсли;
                    КонецЕсли;
                КонецЕсли;
                
                Если СтрокаОтгрузкиПоставки.Сумма = 0 Тогда
                    Индексы.ИндексОтгрузкиПоставки = Индексы.ИндексОтгрузкиПоставки + 1;
                    Если СтрокаОтгрузкиПоставки.СуммаРегл <> 0 ИЛИ СтрокаОтгрузкиПоставки.СуммаУпр <> 0 Тогда
                        ДобавитьЗаписьПереоценки(ГлобальныеПеременные, ТаблицаРасчетовПоСрокам, НачалоДня(СтрокаОплаты.Период),
                            СтрокаОтгрузкиПоставки, "Долг", -Окр(СтрокаОтгрузкиПоставки.СуммаРегл, 2), -Окр(СтрокаОтгрузкиПоставки.СуммаУпр, 2));
                    КонецЕсли;
                КонецЕсли;
                
            //Отгрузка раньше оплаты.
            Иначе
                //Обычная оплата.
                Если НЕ СтрокаОплаты.ЭтоКорректировка Тогда
                    
                    //Добавляем строку прихода долга по отгрузке/поставке.
                    Если НЕ СтрокаОтгрузкиПоставки.ПриходДобавлен И СтрокаОтгрузкиПоставки.Сумма <> 0 Тогда
                        
                        ПересчитатьСуммыЕслиЭтоКорректировка(ГлобальныеПеременные, СтрокаОтгрузкиПоставки);
                        ДобавитьПриход(ГлобальныеПеременные, ТаблицаРасчетовПоСрокам, СтрокаОтгрузкиПоставки, "ОтгрузкаПоставка");
                        
                        //Уточняется план только на сумму по заказу.
                        СкорректироватьПлановыеОплаты(ГлобальныеПеременные, ТаблицаПланОплат, СтрокаОтгрузкиПоставки, СтрокаОтгрузкиПоставки.Сумма - СтрокаОтгрузкиПоставки.КОплате, "УточнениеПлана",ПланыОплат);
                        //Добавляются записи плана на всю сумму включая уточнение и сверхзаказа.
                        СкорректироватьПлановыеОплаты(ГлобальныеПеременные, ТаблицаПланОплат, СтрокаОтгрузкиПоставки, СтрокаОтгрузкиПоставки.Сумма, "ОтгрузкаПоставка", ПланыОплат);
                    КонецЕсли;
                    
                    //Списываем план отгрузки если есть.
                    Если НЕ СтрокаОтгрузкиПоставки.ПланОтгрузокПоставокСписан Тогда
                        СписатьПланОтгрузкиПоставки(ГлобальныеПеременные, ТаблицаПланОтгрузокПоставок, СтрокаОтгрузкиПоставки, ПланыОтгрузокПоставок);
                    КонецЕсли;
                    
                    Если СтрокаОтгрузкиПоставки.Сумма <> 0 Тогда
                    
                        //Переоценка накладной до даты оплаты.
                        Если НужнаПереоценка Тогда
                            ПереоценитьДолг(ГлобальныеПеременные, ТаблицаРасчетовПоСрокам, СтрокаОтгрузкиПоставки, СтрокаОплаты);
                        КонецЕсли;
                        
                        //Если расчетный документ накладная изменился, то сбрасываем служебные реквизиты распределения копеек.
                        Если ТекущийДокументОтгрузкиПоставки <> СтрокаОтгрузкиПоставки.РасчетныйДокумент Тогда
                            ДолгРаспределеноРегл       = 0;
                            ДолгРаспределеноУпр        = 0;
                            ТекущийДокументОтгрузкиПоставки = СтрокаОтгрузкиПоставки.РасчетныйДокумент;
                        КонецЕсли;
                        
                        //Добавляем строку погашения задолженности.
                        НовСтр_Долг_Расход = ТаблицаРасчетовПоСрокам.Добавить();
                        НовСтр_Долг_Расход.ВидДвижения                   = ВидДвиженияНакопления.Расход;
                        НовСтр_Долг_Расход.ДокументРегистратор           = СтрокаОплаты.Регистратор;
                        //Взаимозачет считаем взаимозачетом
                        Если СтрокаОплаты.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВзаимозачетЗадолженности Тогда
                            НовСтр_Долг_Расход.ХозяйственнаяОперация         = СтрокаОплаты.ХозяйственнаяОперация;
                        Иначе
                            НовСтр_Долг_Расход.ХозяйственнаяОперация         = ХозяйственныеОперации["ПогашениеЗадолженности"];
                        КонецЕсли;
                        НовСтр_Долг_Расход.ВалютаДокумента               = СтрокаОплаты.ВалютаДокумента;
                        НовСтр_Долг_Расход.Период                        = СтрокаОплаты.Период;
                        НовСтр_Долг_Расход.ПорядокОпера
10 PaulBC
 
11.07.19
10:15
(9) в областях #Область ПроверкаДатыЗапрета
Началось с одной из версий 2.4.8
Смотрел тестовую 2.4.9 - там вообще из этой процедуры проверку убрали.
11 rilovnikova
 
11.07.19
10:43
(10) Эх, у меня нет такой области от слова совсем... может есть еще идеи?
12 mihalich979
 
11.07.19
11:26
в люкальной копии более полная инфа по ошибке

по причине:
Ошибка при выполнении обработчика - 'ПриЗаписи'
по причине:
{ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль(214)}: Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)

{ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль(214)}: Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
            Если СтрокаОплаты.ПорядокОперации < СтрокаОтгрузкиПоставки.ПорядокОперации

Кусок кода:

#Область РасчетФактическойЗадолженности
    
    Пока Индексы.ИндексОплаты + Индексы.ИндексОтгрузкиПоставки < ЗаписейОбработать Цикл
        
        Если Индексы.ИндексОплаты <= ЗаписейОплаты - 1 И Индексы.ИндексОтгрузкиПоставки <= ЗаписейОтгрузкиПоставки - 1 Тогда
            
            СтрокаОплаты           = РасчетыОплаты[Индексы.ИндексОплаты];
            СтрокаОтгрузкиПоставки = РасчетыОтгрузкиПоставки[Индексы.ИндексОтгрузкиПоставки];
            
            //Оплата раньше отгрузки.
            Если СтрокаОплаты.ПорядокОперации < СтрокаОтгрузкиПоставки.ПорядокОперации
                //В пределах регистратора (при расчетах по накладным) должен происходить зачет аванса.


при проведении

СтрокаОплаты.ПорядокОперации = 201907094235959330М00-000262
СтрокаОтгрузкиПоставки.ПорядокОперации = Null
13 mihalich979
 
11.07.19
11:44
очень интересно.

есть строка Реализация клиенту от 28.09.2019 года

в которой не заполнен "ПорядокОперации" который сравнивается.

поэтому ошибка.
14 rilovnikova
 
11.07.19
11:49
(13) Спасибо, буду тоже локально смотреть)
15 mihalich979
 
11.07.19
11:59
в итоге ввели начальные остатки некорректно указали дату расчетного документа

должны были указать 28/09/2018
а указали 28/09/2019

вот что значит лезть в прошлый год.
16 mihalich979
 
11.07.19
12:02
(1) отладка на сервере не включена вот и нет ошибки.
и там все очень мутно. все в облаке. связь с облаком через 3-е лицо.
Карочи проще локально отлаживать чем отладку включать :)

а локально все высветилось сразу.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn