(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
- —
- Ошибка при вызове метода контекста (Записать)
Вчера заметил, что перестали обновляется цены, проверил выгрузку и обнаружил что часть номенклатуры не записывается. Номенклатура_СоздатьОбновить 020: {ВнешняяОбработка.APPLIX_RU_ЗагрузкаИзExcel_ЗМ.МодульОбъекта(70081)}: Ошибка при вызове метода контекста (Записать): Ошибка при выполнении обработчика — ‘ПередЗаписью’: {Справочник.Номенклатура.МодульМенеджера(2911)}: Преобразование значения к типу Булево не может быть выполнено |
|
Ошибка при попытке обновить номенклатуру |
|
1С:Предприятие 8.3 (8.3.20.1674) Прикрепленные файлы |
|
Модуль создал номенклатуру, теперь ее невозможно открыть ТекстыЗапросов = Новый Массив; ИменаОбъектовМетаданных = Новый Массив; Для Каждого СсылкиПоТипу Из СсылкиПоТипам Цикл ПолноеИмяОбъектаМетаданных = ОбъектМетаданных.ПолноеИмя(); Прикрепленные файлы |
|
пришлите ваш файл и скриншоты всех настроек колонок |
|
у нас загрузилось нормально доступ к базе дадите? попробуем на вашей базе отладкой посмотреть что не так |
|
Сергей Юданов Пользователь Сообщений: 23 |
#9
30.05.2022 15:03:02 Разобрались сами. На некоторые позиции номенклатуры в поле (Вид номенклатуры) было назначено не значение, а почему-то название категории в котором содержались значения. |
ПОСЛЕДНИЕ СООБЩЕНИЯ
Сейчас на форуме (гостей: 44)
Всего зарегистрированных пользователей: 2224
Приняло участие в обсуждении: 367
Всего тем: 822
Ошибка при вызове метода контекста (Записать): Произошла исключительная ситуация |
Я |
04.07.14 — 17:29
Собственно, выпадает на ошибке:
{Форма.Экспорт.Форма(868)}: Ошибка при вызове метода контекста (Записать)
Спр.Записать();
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.2.19.106): Не удалось записать: «Номенклатура»!
Есть предположения, как отловить причину паники 1цэ?
Попытка и описаниеОшибки аналогичны.
1 — 04.07.14 — 17:30
остановка по ошибке
2 — 04.07.14 — 17:31
Посмотреть ЖР не предлагать?
3 — 04.07.14 — 17:31
Конфа? Отладка?
4 — 07.07.14 — 11:11
(1) {Форма.Экспорт.Форма(869)}: Ошибка при вызове метода контекста (Записать): Произошла исключительная ситуация (1C:Enterprise 8.2.19.106): Не удалось записать: «Номенклатура»!
(2) Спасибо, по этой ошибке там пусто.
(3) Конфа отраслёвая типовая, но дело не в ней, а в новой сигнатуре ошибки.
5 — 07.07.14 — 11:11
(3) т.к. это внешняя обработка
6 — 07.07.14 — 11:16
1) Вставить перед записью Спр.ОбменДанными.Загрузка = Истина;
2) Открыть записанный объект.
3) Записать в форме -> Посмотреть на что ругается.
Кастую пророка на незаполненную единицу измерения
7 — 07.07.14 — 11:18
(5) «т.к. это внешняя обработка» добавь в код обработку исключительной ситуации и посмотри на ошибку
8 — 07.07.14 — 11:23
через попытку-исключение так же выводится описание ошибки.
ОбменДанными.Загрузка не помогает, это не косяк конфигурации, а платформа валится.
(6) п.3 сейчас опробую
9 — 07.07.14 — 11:53
(8) не, это косяк в конфигурации. Открывай все процедуры ПередЗаписью и ПриЗаписи, сколько их там? Штук 40. И во всех всобачь точки останова.
10 — 07.07.14 — 12:07
всем спасибо, причину нашёл (не был заполнен обязательный реквизит-ссылка).
Но, достало, что 1С позволяет объекту назначить обязательный реквизит, но при ошибке записи не указывает на него.
11 — 07.07.14 — 12:13
Какой реквизит-то: единица измерения?
12 — 07.07.14 — 13:09
(11) да. При этом всё было сделано правильно — сначала номенклатура.обменданными.загрузка = истина, затем запись, затем создавалась ед.изм и повторно записывалась номенклатура.
Собака зарылась при записи ед.изм, в попытке она не записалась, а платформа при записи номенклатуры не захотела вещать, что же ей не понравилось
SeraFim
13 — 07.07.14 — 13:11
(6)телепат 80-го левела!))
Разобрался.
Проблема была в правилах регистрации.
Если кому-то интересно, то если во время проведения документа в типовой конфигурации появляется ошибка
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1137)}: Ошибка при вызове метода контекста (Записать)
Результат = Форма.Записать(ПараметрыЗаписи);
первым делом проверьте , не изменялись ли какие-либо планы обмена для синхронизации. Возможно, в каком-то из настроенных обменов были изменены правила регистрации, что и приводит к упомянутой ошибке. В таком случае, если обмен является типовым, установите галочку использования типовых правил регистрации в соответствующем диалоговом окне.
В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.