1с ошибка при вызове метода контекста write

(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;

                            ТекущийДокументОтгрузкиПоставки = СтрокаОтгрузкиПоставки.РасчетныйДокумент;

                        КонецЕсли;

                        

                        //Добавляем строку погашения задолженности.

                        НовСтр_Долг_Расход = ТаблицаРасчетовПоСрокам.Добавить();

                        НовСтр_Долг_Расход.ВидДвижения                   = ВидДвиженияНакопления.Расход;

                        НовСтр_Долг_Расход.ДокументРегистратор           = СтрокаОплаты.Регистратор;

                        //Взаимозачет считаем взаимозачетом

                        Если СтрокаОплаты.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВзаимозачетЗадолженности Тогда

                            НовСтр_Долг_Расход.ХозяйственнаяОперация         = СтрокаОплаты.ХозяйственнаяОперация;

                        Иначе

                            НовСтр_Долг_Расход.ХозяйственнаяОперация         = ХозяйственныеОперации[«ПогашениеЗадолженности»];

                        КонецЕсли;

                        НовСтр_Долг_Расход.ВалютаДокумента               = СтрокаОплаты.ВалютаДокумента;

                        НовСтр_Долг_Расход.Период                        = СтрокаОплаты.Период;

                        НовСтр_Долг_Расход.ПорядокОпера

  • Главная
  •  — 
  • Форум
  •  — 
  • ТЕХПОДДЕРЖКА
  •  — 
  • ЭКСЕЛОН — Загрузка в 1С из EXCEL
  •  — 
  • Ошибка при вызове метода контекста (Записать)
 

Вчера заметил, что перестали обновляется цены, проверил выгрузку и обнаружил что часть номенклатуры не записывается.
Возможно это как то связано с переходом на 1с 11.5
Сегодня обновил модуль проблема осталась

Номенклатура_СоздатьОбновить 020: {ВнешняяОбработка.APPLIX_RU_ЗагрузкаИзExcel_ЗМ.МодульОбъекта(70081)}: Ошибка при вызове метода контекста (Записать): Ошибка при выполнении обработчика — ‘ПередЗаписью’: {Справочник.Номенклатура.МодульМенеджера(2911)}: Преобразование значения к типу Булево не может быть выполнено

 

Ошибка при попытке обновить номенклатуру

 

1С:Предприятие 8.3 (8.3.20.1674)
Управление торговлей, редакция 11 (11.5.7.336)
модуль загрузки 16.5.8

Прикрепленные файлы

 

Модуль создал номенклатуру, теперь ее невозможно открыть

ТекстыЗапросов = Новый Массив;
ПараметрыЗапроса = Новый Структура;

ИменаОбъектовМетаданных = Новый Массив;

Для Каждого СсылкиПоТипу Из СсылкиПоТипам Цикл
Тип = СсылкиПоТипу.Ключ;
ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип);
Если ОбъектМетаданных = Неопределено Тогда
ВызватьИсключение
НСтр(«ru = ‘Неверный первый параметр Ссылки в функции ОбщегоНазначения.ЗначенияРеквизитовОбъектов:
          |- Значения массива должны быть ссылками'»);
КонецЕсли;

ПолноеИмяОбъектаМетаданных = ОбъектМетаданных.ПолноеИмя();
ИменаОбъектовМетаданных.Добавить(ПолноеИмяОбъектаМетаданных);

Прикрепленные файлы

 

пришлите ваш файл и скриншоты всех настроек колонок

 
 
 

у нас загрузилось нормально

доступ к базе дадите? попробуем на вашей базе отладкой посмотреть что не так

 

Сергей Юданов

Пользователь

Сообщений: 23
Регистрация: 09.04.2019

#9


0
 

30.05.2022 15:03:02

Разобрались сами.

На некоторые позиции номенклатуры в поле (Вид номенклатуры) было назначено не значение, а почему-то название категории в котором содержались значения.

ПОСЛЕДНИЕ СООБЩЕНИЯ

Сейчас на форуме (гостей: 44)

Всего зарегистрированных пользователей: 2224

Приняло участие в обсуждении: 367

Всего тем: 822

Ошибка при вызове метода контекста (Записать): Произошла исключительная ситуация

Я
   Cratos

04.07.14 — 17:29

Собственно, выпадает на ошибке:

{Форма.Экспорт.Форма(868)}: Ошибка при вызове метода контекста (Записать)

  Спр.Записать();

по причине:

Произошла исключительная ситуация (1C:Enterprise 8.2.19.106): Не удалось записать: «Номенклатура»!

Есть предположения, как отловить причину паники 1цэ?

Попытка и описаниеОшибки аналогичны.

   sergey198

1 — 04.07.14 — 17:30

остановка по ошибке

   VikingKosmo

2 — 04.07.14 — 17:31

Посмотреть ЖР не предлагать?

   DS

3 — 04.07.14 — 17:31

Конфа? Отладка?

   Cratos

4 — 07.07.14 — 11:11

(1) {Форма.Экспорт.Форма(869)}: Ошибка при вызове метода контекста (Записать): Произошла исключительная ситуация (1C:Enterprise 8.2.19.106): Не удалось записать: «Номенклатура»!

(2) Спасибо, по этой ошибке там пусто.

(3) Конфа отраслёвая типовая, но дело не в ней, а в новой сигнатуре ошибки.

   Cratos

5 — 07.07.14 — 11:11

(3) т.к. это внешняя обработка

   Timon1405

6 — 07.07.14 — 11:16

1) Вставить  перед записью Спр.ОбменДанными.Загрузка = Истина;

2) Открыть записанный объект.

3) Записать в форме -> Посмотреть на что ругается.

Кастую пророка на незаполненную единицу измерения

   Cyberhawk

7 — 07.07.14 — 11:18

(5) «т.к. это внешняя обработка» добавь в код обработку исключительной ситуации и посмотри на ошибку

   Cratos

8 — 07.07.14 — 11:23

через попытку-исключение так же выводится описание ошибки.

ОбменДанными.Загрузка не помогает, это не косяк конфигурации, а платформа валится.

(6) п.3 сейчас опробую

   hhhh

9 — 07.07.14 — 11:53

(8) не, это косяк в конфигурации. Открывай все процедуры ПередЗаписью и ПриЗаписи, сколько их там? Штук 40. И во всех всобачь точки останова.

   Cratos

10 — 07.07.14 — 12:07

всем спасибо, причину нашёл (не был заполнен обязательный реквизит-ссылка).

Но, достало, что 1С позволяет объекту назначить обязательный реквизит, но при ошибке записи не указывает на него.

   Timon1405

11 — 07.07.14 — 12:13

Какой реквизит-то: единица измерения?

   Cratos

12 — 07.07.14 — 13:09

(11) да. При этом всё было сделано правильно — сначала номенклатура.обменданными.загрузка = истина, затем запись, затем создавалась ед.изм и повторно записывалась номенклатура.

Собака зарылась при записи ед.изм, в попытке она не записалась, а платформа при записи номенклатуры не захотела вещать, что же ей не понравилось

  

SeraFim

13 — 07.07.14 — 13:11

(6)телепат 80-го левела!))

Разобрался.




Проблема была в правилах регистрации.

Если кому-то интересно, то если во время проведения документа в типовой конфигурации появляется ошибка

{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1137)}: Ошибка при вызове метода контекста (Записать)

Результат = Форма.Записать(ПараметрыЗаписи);

первым делом проверьте , не изменялись ли какие-либо планы обмена для синхронизации. Возможно, в каком-то из настроенных обменов были изменены правила регистрации, что и приводит к упомянутой ошибке. В таком случае, если обмен является типовым, установите галочку использования типовых правил регистрации в соответствующем диалоговом окне.

В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:


	 Запрос = Новый Запрос;
	 Запрос.Текст =
	         "ВЫБРАТЬ
	          |        Номенклатура.Ссылка КАК Ссылка,
	          |        Номенклатура.ВерсияДанных КАК ВерсияДанных,
	          |        Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	          |        Номенклатура.Родитель КАК Родитель,
	          |        Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	          |        Номенклатура.Код КАК Код,
	          |        Номенклатура.Наименование КАК Наименование,
	          |        Номенклатура.Артикул КАК Артикул,
	          |        Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	          |        Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	          |        Номенклатура.Предопределенный КАК Предопределенный,
	          |        Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	          |ИЗ
	          |        Справочник.Номенклатура КАК Номенклатура
	          |ГДЕ
	          |         ";
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 КонецЦикла;
Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора
Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.


	 Запрос = Новый Запрос;
	            Запрос.Текст =
	                       "ВЫБРАТЬ
	                        |          Номенклатура.Ссылка КАК Ссылка,
	                        |          Номенклатура.ВерсияДанных КАК ВерсияДанных,
	                        |          Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	                        |          Номенклатура.Родитель КАК Родитель,
	                        |          Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	                        |          Номенклатура.Код КАК Код,
	                        |          Номенклатура.Наименование КАК Наименование,
	                        |          Номенклатура.Артикул КАК Артикул,
	                        |          Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	                        |          Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	                        |          Номенклатура.Предопределенный КАК Предопределенный,
	                        |          Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	                        |ИЗ
	                        |          Справочник.Номенклатура КАК Номенклатура
	                        |ГДЕ
	                        |          НЕ Номенклатура.ЭтоГруппа ";
	 НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
	 КонецЦикла;
Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной
Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Рис.3 Синтакс-помощник
Рис.3 Синтакс-помощник

В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает
Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

  • 1с ошибка при вызове конструктора чтениеzipфайла некорректный формат файла
  • 1с ошибка при вызове конструктора сомобъект invalid class string
  • 1с ошибка при вызове конструктора сомобъект excel
  • 1с ошибка при вызове конструктора сомобъект 2147221005 0x800401f3
  • 1с ошибка при вызове конструктора картинка