Ошибка метода контекста

Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V83.COMConnector.1): Версия компоненты ‘comcntr’ отличается от версии корневого модуля ‘core83’

Часто бывает, что при настроенной синхронизации после обновления платформы появляется ошибка «Произошла исключительная ситуация (V83.COMConnector.1): Версия компоненты ‘comcntr’ отличается от версии корневого модуля ‘core83′». Так происходит потому, что автоматически не зарегистрировалась компонента comcntr.dll из-за проблем с правами пользователя на компьютере.

Решить данную проблему можно двумя способами.

Способ №1.

Переустановить платформу под правами Администратора или под пользователем, у которого есть такие права.

Способ №2.

Если не получилось как в способе №1, то можно вручную зарегистрировать самому эту компоненту.

Перед этим нам необходимо изменить Параметры контроль учетной записи.

Для Windows 7 нам необходимо зайти в Пуск затем в Панель управления.

Для Windows 10 нам необходимо в левом нижнем углу панели задач в строке поиска набрать Панель управления и перейти по открывшейся ссылке.

В правом верхнем углу Панели управления выбрать Просмотр-Мелкие значки и затем в списке перейти в Учетные записи пользователей.

Там выбрать Изменить параметры контроля учетных записей.


Затем поставить ползунок в самом нижнем положении.

И перезапустить компьютер.

После перезагрузки необходимо:

Для Windows 7 надо перейти в Пуск, затем в строке поиска ввести cmd.exe,нам покажет что найдена Командная строка и, щелкнув по ней правой клавишей мыши, выбрать «Запуск от имени администратора».

Для Windows 10 нам необходимо в левом нижнем углу панели задач в строке поиска набрать Командная панель или cmd.exe и, щелкнув по ней правой клавишей мыши, выбрать «Запуск от имени администратора».

У нас откроется Командная строка, где нам необходимо ввести команду:

1.Для платформы x86

Regsvr32 «C:\Program Files (х86)\1cv8\номер версии вашей платформы\bin\comcntr.dll» (regsvr32пробел»C:\Program Files (х86)\1cv8\номер версии вашей платформы\bin\comcntr.dll»).

2.Для платформы х64

Regsvr32 «C:\Program Files\1cv8\номер версии вашей платформы\bin\comcntr.dll» (regsvr32пробел»C:\Program Files\1cv8\номер версии вашей платформы\bin\comcntr.dll»).

Затем нажать клавишу Enter.

Если все сделали правильно, то увидите вот такое окно.

После этого необходимо перезагрузить компьютер. Как включится, пробуйте снова сделать синхронизацию.

1с КА 2.4 Ошибка при вызове метода контекста (Записать) Поступление безналичных ДС

(8) А в какой именно строке? Просмотрела всю процедуру, не могу понять.

Процедура ЗаполнитьОперативныеВзаиморасчеты(ОсновныеПараметры) Экспорт #Область ИнициализацияЗапросаИПеременных АналитикаУчетаПоПартнерам = ОсновныеПараметры.АналитикаУчетаПоПартнерам; ОбъектРасчетов = ОсновныеПараметры.ОбъектРасчетов; ВалютаРасчетов = ОсновныеПараметры.ВалютаРасчетов; ЭтоРасчетыСКлиентами = ОсновныеПараметры.ЭтоРасчетыСКлиентами; Регистратор = ОсновныеПараметры.Регистратор; Порядок = ОсновныеПараметры.Порядок; ВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить(); ВалютаУправленческогоУчета = Константы.ВалютаУправленческогоУчета.Получить(); АналитикаОбъектаРасчета = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(АналитикаУчетаПоПартнерам,»Организация»); Организация = АналитикаОбъектаРасчета.Организация; &nbsp//Если график исполнения в договоре, то вместо графика заказа будет уточняться график договора. &nbsp//Если пользователь каким-то образом ввел заказы с графиками по такому договору, то все этапы таких заказов будут отнесены к графику договора &nbsp//и закрываться будут по ФИФО независимо от привязки накладных к заказам Если ТипЗнч(ОбъектРасчетов) = Тип(«СправочникСсылка.ДоговорыКонтрагентов») Тогда ГрафикИсполненияДоговора = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектРасчетов,»ГрафикИсполненияДоговора»); ГрафикВДоговоре = ЗначениеЗаполнено(ГрафикИсполненияДоговора); Иначе ГрафикИсполненияДоговора = Неопределено; ГрафикВДоговоре = ЛОЖЬ; КонецЕсли; Если ЭтоРасчетыСКлиентами Тогда РасчетыПоЗаказу = ТипЗнч(ОбъектРасчетов) = Тип(«ДокументСсылка.ЗаказКлиента») ИЛИ ТипЗнч(ОбъектРасчетов) = Тип(«ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента»); Иначе РасчетыПоЗаказу = ТипЗнч(ОбъектРасчетов) = Тип(«ДокументСсылка.ЗаказПоставщику»); КонецЕсли; СписокТиповПлатежек = ТипыПлатежныхДокументов(); РасчетыПоПлатежке = СписокТиповПлатежек.Найти(ТипЗнч(ОбъектРасчетов)) <> Неопределено; ХозяйственныеОперацииНеОтгрузка = ХозяйственныеОперацииНеОтгрузка(); Если НЕ РасчетыПоПлатежке И ТипЗнч(ОбъектРасчетов) = Тип(«ДокументСсылка.ПервичныйДокумент») Тогда ТипПервичногоДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектРасчетов,»ТипПервичногоДокумента»); РасчетыПоПлатежке = ТипПервичногоДокумента = Перечисления.ТипыПервичныхДокументов.ОплатаПоставщику ИЛИ ТипПервичногоДокумента = Перечисления.ТипыПервичныхДокументов.ОплатаОтКлиента; КонецЕсли; ГлобальныеПеременные = Новый Структура; ГлобальныеПеременные.Вставить(«ЕжедневнаяПереоценка», Константы.ПереоцениватьВалютныеСредстваПоДням.Получить()); &nbsp//Для уточнения плана оплат — в переменной хранится последний момент времени плана оплат, &nbsp//чтобы при добавлении записи в план оплат можно было сразу определить есть ли планы оплат с датой больше, чем добавляемая запись. ГлобальныеПеременные.Вставить(«МаксимальныйПорядокПланаОплат»,»»); ГлобальныеПеременные.Вставить(«ВалютаРасчетов», ВалютаРасчетов); ГлобальныеПеременные.Вставить(«ГрафикВДоговоре», ГрафикВДоговоре); ГлобальныеПеременные.Вставить(«ЭтоРасчетыСКлиентами», ЭтоРасчетыСКлиентами); ГлобальныеПеременные.Вставить(«ПорядокПереоценки», Новый Соответствие); &nbsp//Хозяйственные операции для заполнения. ХозяйственныеОперации = Новый Соответствие; Если ЭтоРасчетыСКлиентами Тогда ХозяйственныеОперации.Вставить(«ЗачетАванса», Перечисления.ХозяйственныеОперации.ЗачетАвансаКлиента); ХозяйственныеОперации.Вставить(«ПогашениеЗадолженности», Перечисления.ХозяйственныеОперации.ПогашениеЗадолженностиКлиента); ХозяйственныеОперации.Вставить(«ВозвратАванса», Перечисления.ХозяйственныеОперации.ВозвратОплатыКлиенту); ХозяйственныеОперации.Вставить(«ПереоценкаПоложительная», Перечисления.ХозяйственныеОперации.КурсовыеРазницыКлиентыПрибыль); ХозяйственныеОперации.Вставить(«ПереоценкаОтрицательная», Перечисления.ХозяйственныеОперации.КурсовыеРазницыКлиентыУбыток); ХозяйственныеОперации.Вставить(«Планирование», Перечисления.ХозяйственныеОперации.ПланированиеПоЗаказуКлиента); Иначе ХозяйственныеОперации.Вставить(«ЗачетАванса», Перечисления.ХозяйственныеОперации.ЗачетАвансаПоставщику); ХозяйственныеОперации.Вставить(«ПогашениеЗадолженности», Перечисления.ХозяйственныеОперации.ПогашениеЗадолженностиПоставщику); ХозяйственныеОперации.Вставить(«ВозвратАванса», Перечисления.ХозяйственныеОперации.ВозвратДенежныхСредствОтПоставщика); ХозяйственныеОперации.Вставить(«ПереоценкаПоложительная», Перечисления.ХозяйственныеОперации.КурсовыеРазницыПоставщикиУбыток); ХозяйственныеОперации.Вставить(«ПереоценкаОтрицательная», Перечисления.ХозяйственныеОперации.КурсовыеРазницыПоставщикиПрибыль); ХозяйственныеОперации.Вставить(«Планирование», Перечисления.ХозяйственныеОперации.ПланированиеПоЗаказуПоставщику); КонецЕсли; ХозяйственныеОперации.Вставить(«ПереносАванса», Перечисления.ХозяйственныеОперации.ПереносАванса); ГлобальныеПеременные.Вставить(«ХозяйственныеОперации», ХозяйственныеОперации); Запрос = Новый Запрос; Менеджер = Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = Менеджер; Запрос.УстановитьПараметр(«ОбъектРасчетов», ОбъектРасчетов); Запрос.УстановитьПараметр(«АналитикаУчетаПоПартнерам», АналитикаУчетаПоПартнерам); Запрос.УстановитьПараметр(«Организация», Организация); Запрос.УстановитьПараметр(«ВалютаУпр», ВалютаУправленческогоУчета); Запрос.УстановитьПараметр(«ВалютаРегл», ВалютаРегламентированногоУчета); Запрос.УстановитьПараметр(«СписокТиповЗаказов», СписокТиповРегистраторовПланов()); Запрос.УстановитьПараметр(«ВалютаРасчетов», ВалютаРасчетов); Запрос.УстановитьПараметр(«Порядок», Порядок); Запрос.УстановитьПараметр(«ГрафикВДоговоре», ГрафикВДоговоре); Запрос.УстановитьПараметр(«ГрафикИсполненияДоговора», ГрафикИсполненияДоговора); Запрос.УстановитьПараметр(«РасчетыПоЗаказу», РасчетыПоЗаказу); Запрос.УстановитьПараметр(«ЭтоРасчетыСКлиентами», ЭтоРасчетыСКлиентами); Запрос.УстановитьПараметр(«Регистратор», Регистратор); Запрос.УстановитьПараметр(«ПорядокЗачетаПоДатеПлатежа», Константы.ПорядокЗачетаДокументовПоДатеОперации.Получить() = 1); #КонецОбласти #Область ИнициализацияНаборовЗаписей Если ЭтоРасчетыСКлиентами Тогда НаборЗаписейПоСрокам = РегистрыНакопления.РасчетыСКлиентамиПоСрокам.СоздатьНаборЗаписей(); НаборЗаписейПланОплат = РегистрыНакопления.РасчетыСКлиентамиПланОплат.СоздатьНаборЗаписей(); НаборЗаписейПланОтгрузокПоставок = РегистрыНакопления.РасчетыСКлиентамиПланОтгрузок.СоздатьНаборЗаписей(); Иначе НаборЗаписейПоСрокам = РегистрыНакопления.РасчетыСПоставщикамиПоСрокам.СоздатьНаборЗаписей(); НаборЗаписейПланОплат = РегистрыНакопления.РасчетыСПоставщикамиПланОплат.СоздатьНаборЗаписей(); НаборЗаписейПланОтгрузокПоставок = РегистрыНакопления.РасчетыСПоставщикамиПланПоставок.СоздатьНаборЗаписей(); КонецЕсли; Если ОсновныеПараметры.Свойство(«ДополнительныеСвойстваПроведения») И ОсновныеПараметры.ДополнительныеСвойстваПроведения <> Неопределено Тогда НаборЗаписейПоСрокам.ДополнительныеСвойства.Вставить(«ПроверятьИзмененияРегистра», Истина); Если ОсновныеПараметры.Свойство(«Регистратор») Тогда &nbsp// При изменении проведения документа будут изменения в регистре, но по ним не следует регистрировать документ к отражению, &nbsp// так как он в любом случае изменит свои данные отражения при проведении (или распроведении). НаборЗаписейПоСрокам.ДополнительныеСвойства.Вставить(«НеотражаемыйДокумент», ОсновныеПараметры.Регистратор); КонецЕсли; КонецЕсли; РегистраторРасчетовОбъект = РегистраторРасчетов(ОбъектРасчетов, АналитикаУчетаПоПартнерам, ВалютаРасчетов, ЭтоРасчетыСКлиентами, Организация); РегистраторРасчетов = РегистраторРасчетовОбъект.Ссылка; НаборЗаписейПоСрокам.Отбор.Регистратор.Установить(РегистраторРасчетов); НаборЗаписейПланОплат.Отбор.Регистратор.Установить(РегистраторРасчетов); НаборЗаписейПланОтгрузокПоставок.Отбор.Регистратор.Установить(РегистраторРасчетов); #КонецОбласти &nbsp//Движения до начала пересчета и остатки. СформироватьВТДанныхРегистровДоНачалаРасчетов(Запрос, ЭтоРасчетыСКлиентами); &nbsp//Данные регистров с порядком меньше порядка начала расчета, далее дополняются. ТаблицаРасчетовПоСрокам = Менеджер.Таблицы.ПолучитьДанные().Выгрузить(); ТаблицаПланОплат = Менеджер.Таблицы.ПолучитьДанные().Выгрузить(); ТаблицаПланОтгрузокПоставок = Менеджер.Таблицы.ПолучитьДанные().Выгрузить(); &nbsp//Движения после начала пересчета и остатки до начала пересчета для распределения. РасчетыОтгрузкиПоставки = ПолучитьОтгрузкиПоставки(Запрос, Порядок); ПланыОплат = ПолучитьПланыОплат(Запрос, Порядок, ЭтоРасчетыСКлиентами); ПланыОтгрузокПоставок = ПолучитьПланыОтгрузокПоставок(Запрос, Порядок, ЭтоРасчетыСКлиентами); РасчетыОплаты = ПолучитьОплаты(Запрос, Порядок); Если РасчетыОплаты.Количество() = 0 И РасчетыОтгрузкиПоставки.Количество() = 0 И ТаблицаРасчетовПоСрокам.Количество() = 0 И НЕ ОсновныеПараметры.ТолькоПланы Тогда НаборЗаписейПоСрокам.Записать(); КонецЕсли; Если ПланыОплат.Количество() = 0 И РасчетыОтгрузкиПоставки.Количество() = 0 И ТаблицаПланОплат.Количество() = 0 Тогда НаборЗаписейПланОплат.Записать(); КонецЕсли; Если ПланыОтгрузокПоставок.Количество() = 0 И ТаблицаПланОтгрузокПоставок.Количество() = 0 Тогда НаборЗаписейПланОтгрузокПоставок.Записать(); КонецЕсли; НужнаПереоценка = (ВалютаРасчетов <> ВалютаРегламентированногоУчета ИЛИ ВалютаРасчетов <> ВалютаУправленческогоУчета) И РасчетыОтгрузкиПоставки.Количество() > 0 И НЕ ОсновныеПараметры.ТолькоПланы; Если НужнаПереоценка Тогда ДатаНачалаКурсов = Мин(РасчетыОтгрузкиПоставки.Период, ?(РасчетыОплаты.Количество() > 0, РасчетыОплаты.Период, РасчетыОтгрузкиПоставки.Период)); ТаблицаКурсовВалют = ПолучитьКурсыВалют(Запрос, ДатаНачалаКурсов, ГлобальныеПеременные); ГлобальныеПеременные.Вставить(«ТаблицаКурсовВалют», ТаблицаКурсовВалют); КонецЕсли; ДокументыРасчетаКурсовыхРазниц = Документы.РасчетКурсовыхРазниц.ДокументыПереоценки(Организация, ?(РасчетыОтгрузкиПоставки.Количество() > 0, РасчетыОтгрузкиПоставки.ДатаВозникновения, ТекущаяДатаСеанса()), ТекущаяДатаСеанса(), ЭтоРасчетыСКлиентами); ГлобальныеПеременные.Вставить(«ДокументыРасчетаКурсовыхРазниц», ДокументыРасчетаКурсовыхРазниц); &nbsp//Добавляем приходные записи по плану оплаты (заказы , график договора) &nbsp//накладные не добавляем, т.к они могут быть уменьшены авансами. Для Каждого Стр Из ПланыОплат Цикл Если НЕ Стр.ПриходДобавлен Тогда НовСтр = ТаблицаПланОплат.Добавить(); НовСтр.ВидДвижения = ВидДвиженияНакопления.Приход; НовСтр.ДокументРегистратор = Стр.Регистратор; НовСтр.ДокументПлан = Стр.Регистратор; НовСтр.ВариантОплаты = Стр.ВариантОплаты; НовСтр.Период = Стр.Период; НовСтр.ДатаВозникновения = Стр.ДатаВозникновения; НовСтр.ДатаПлановогоПогашения = Стр.ДатаПлановогоПогашения; НовСтр.КОплате = Стр.КОплате; НовСтр.ПорядокОперации = Стр.ПорядокОперации; НовСтр.ПорядокЗачета = Стр.ПорядокОперации; НовСтр.ХозяйственнаяОперация = ГлобальныеПеременные.ХозяйственныеОперации; КонецЕсли; КонецЦикла; &nbsp//Добавляем приходные записи планов отгрузок. Для Каждого Стр Из ПланыОтгрузокПоставок Цикл Если НЕ Стр.ПриходДобавлен Тогда НовСтр = ТаблицаПланОтгрузокПоставок.Добавить(); НовСтр.ВидДвижения = ВидДвиженияНакопления.Приход; НовСтр.ДокументРегистратор = Стр.Регистратор; НовСтр.ДокументПлан = Стр.Регистратор; НовСтр.Период = Стр.Период; НовСтр.ДатаВозникновения = Стр.ДатаВозникновения; НовСтр.ДатаПлановогоПогашения = Стр.ДатаПлановогоПогашения; НовСтр.Сумма = Стр.КОтгрузкеПоставке; НовСтр.ПорядокЗачета = Стр.ПорядокОперации; НовСтр.ПорядокОперации = Стр.ПорядокОперации; КонецЕсли; КонецЦикла; &nbsp//Для определения курса корректировки реализации в минус. &nbsp//Ключ — ДокументСсылка.РеализациТоваровУслуг, ДокументСсылка.АктВыполненныхРабот &nbsp//Значение — Структура &nbsp// * СуммаДокумента, СуммаДокументаРегл, СуммаДокументаУпр — нужны для определения среднего курса реализации при проведении корректировок. ДанныеНакладных = Новый Соответствие; ТаблицаДанныхНакладных = ПолучитьДанныеНакладных(Запрос); Для Каждого Строка Из ТаблицаДанныхНакладных Цикл ДанныеНакладных.Вставить(Строка.Накладная, СтруктураСумм(Строка.Сумма, Строка.СуммаРегл, Строка.СуммаУпр)); КонецЦикла; ГлобальныеПеременные.Вставить(«ДанныеНакладных», ДанныеНакладных); ЗаписейОплаты = РасчетыОплаты.Количество(); ЗаписейОтгрузкиПоставки = РасчетыОтгрузкиПоставки.Количество(); ЗаписейОбработать = ЗаписейОплаты + ЗаписейОтгрузкиПоставки; Индексы = Новый Структура; &nbsp//Индекс текущей обрабатываемой строки отгрузок. Индексы.Вставить(«ИндексОтгрузкиПоставки», 0); &nbsp//Индекс текущей обрабатываемой строки оплат. Индексы.Вставить(«ИндексОплаты», 0); &nbsp//Для распределения копеек в рамках документа. ТекущийДокументОплаты = Неопределено; ТекущийДокументОтгрузкиПоставки = Неопределено; &nbsp//Сколько строк отгрузки пропущено для зачета корректировкой реализации. ПропускОтгрузкиПоставки = 0; Пока Индексы.ИндексОплаты + Индексы.ИндексОтгрузкиПоставки < ЗаписейОбработать Цикл Если Индексы.ИндексОплаты <= ЗаписейОплаты — 1 И Индексы.ИндексОтгрузкиПоставки <= ЗаписейОтгрузкиПоставки — 1 Тогда СтрокаОплаты = РасчетыОплаты; СтрокаОтгрузкиПоставки = РасчетыОтгрузкиПоставки; &nbsp//Оплата раньше отгрузки. Если СтрокаОплаты.ПорядокОперации < СтрокаОтгрузкиПоставки.ПорядокОперации &nbsp//В пределах регистратора (при расчетах по накладным) должен происходить зачет аванса. ИЛИ СтрокаОплаты.Регистратор = СтрокаОтгрузкиПоставки.Регистратор Тогда &nbsp//Переброс аванса на расчетный документ — накладную. НеОтгрузка = ХозяйственныеОперацииНеОтгрузка.Найти(СтрокаОтгрузкиПоставки.ХозяйственнаяОперация) <> Неопределено; ДвойнаяЗаписьНеНужна = НеОтгрузка &nbsp//Если расчеты по платежке, то эти движения уже отражены в оперативных расчетах в рамках переноса с одного объекта расчетов на другой. ИЛИ РасчетыПоПлатежке; &nbsp//Приход предоплаты. Если НЕ СтрокаОплаты.ПриходДобавлен Тогда ПересчитатьСуммыЕслиЭтоКорректировка(ГлобальныеПеременные, СтрокаОплаты); ДобавитьПриход(ГлобальныеПеременные, ТаблицаРасчетовПоСрокам, СтрокаОплаты, «Оплата»); КонецЕсли; &nbsp//Уменьшаем план отгрузки, если есть. Если НЕ СтрокаОтгрузкиПоставки.ПланОтгрузокПоставокСписан Тогда СписатьПланОтгрузкиПоставки(ГлобальныеПеременные, ТаблицаПланОтгрузокПоставок, СтрокаОтгрузкиПоставки, ПланыОтгрузокПоставок); КонецЕсли; Если СтрокаОтгрузкиПоставки.Сумма <> 0 Тогда Если ТекущийДокументОплаты <> СтрокаОплаты.РасчетныйДокумент Тогда ПредоплатаРаспределеноРегл = 0; ПредоплатаРаспределеноУпр = 0; ТекущийДокументОплаты = СтрокаОплаты.РасчетныйДокумент; КонецЕсли; Если ТекущийДокументОтгрузкиПоставки <> СтрокаОтгрузкиПоставки.РасчетныйДокумент Тогда ДолгРаспределеноРегл = 0; ДолгРаспределеноУпр = 0; ТекущийДокументОтгрузкиПоставки = СтрокаОтгрузкиПоставки.РасчетныйДокумент; КонецЕсли; &nbsp//Добавляем запись списания предоплаты. НовСтр_Предоплата_Расход = ТаблицаРасчетовПоСрокам.Добавить(); НовСтр_Предоплата_Расход.ВидДвижения = ВидДвиженияНакопления.Расход; НовСтр_Предоплата_Расход.ДокументРегистратор = СтрокаОтгрузкиПоставки.Регистратор; НовСтр_Предоплата_Расход.ВалютаДокумента = СтрокаОтгрузкиПоставки.ВалютаДокумента; НовСтр_Предоплата_Расход.Период = СтрокаОтгрузкиПоставки.Период; НовСтр_Предоплата_Расход.РасчетныйДокумент = СтрокаОплаты.РасчетныйДокумент; НовСтр_Предоплата_Расход.ДатаВозникновения = СтрокаОплаты.ДатаВозникновения; НовСтр_Предоплата_Расход.ДатаПлановогоПогашения = Дата(1,1,1); НовСтр_Предоплата_Расход.ПорядокЗачета = СтрокаОплаты.ПорядокОперации; НовСтр_Предоплата_Расход.ПорядокОперации = СтрокаОтгрузкиПоставки.ПорядокОперации; НовСтр_Предоплата_Расход.СтатьяДвиженияДенежныхСредств = СтрокаОтгрузкиПоставки.СтатьяДвиженияДенежныхСредств; НовСтр_Предоплата_Расход.КорОбъектРасчетов = СтрокаОплаты.КорОбъектРасчетов; СуммаСписания = Мин(СтрокаОплаты.Сумма, СтрокаОтгрузкиПоставки.Сумма); &nbsp//Возврат аванса с ручным курсом отражаем по курсу возврата. Если СтрокаОтгрузкиПоставки.ЭтоВозвратАванса И СтрокаОтгрузкиПоставки.РучнойКурсРегл Тогда ПредоплатаРеглПредв = СтрокаОтгрузкиПоставки.СуммаРегл / СтрокаОтгрузкиПоставки.Сумма * СуммаСписания; &nbsp//Ошибки округления сразу зачитываем, если что они переоценятся. ИначеЕсли СтрокаОтгрузкиПоставки.РучнойКурсРегл И СтрокаОтгрузкиПоставки.Сумма = СуммаСписания Тогда ПредоплатаРеглПредв = СтрокаОтгрузкиПоставки.СуммаРегл; &nbsp//Остальные авансы по курсу аванса. Иначе ПредоплатаРеглПредв = СтрокаОплаты.СуммаРегл / СтрокаОплаты.Сумма * СуммаСписания; КонецЕсли; Если СтрокаОтгрузкиПоставки.ЭтоВозвратАванса И СтрокаОтгрузкиПоставки.РучнойКурсУпр Тогда ПредоплатаУпрПредв = СтрокаОтгрузкиПоставки.СуммаУпр / СтрокаОтгрузкиПоставки.Сумма * СуммаСписания; ИначеЕсли СтрокаОтгрузкиПоставки.РучнойКурсУпр И СтрокаОтгрузкиПоставки.Сумма = СуммаСписания Тогда ПредоплатаУпрПредв = СтрокаОтгрузкиПоставки.СуммаУпр; Иначе ПредоплатаУпрПредв = СтрокаОплаты.СуммаУпр / СтрокаОплаты.Сумма * СуммаСписания; КонецЕсли; Если СтрокаОтгрузкиПоставки.ЭтоВозвратАванса Тогда НовСтр_Предоплата_Расход.ХозяйственнаяОперация = ХозяйственныеОперации; ИначеЕсли РасчетыПоПлатежке И НЕ СтрокаОтгрузкиПоставки.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВзаимозачетЗадолженности Тогда НовСтр_Предоплата_Расход.ХозяйственнаяОперация = ХозяйственныеОперации; ИначеЕсли НеОтгрузка Тогда НовСтр_Предоплата_Расход.ХозяйственнаяОперация = СтрокаОтгрузкиПоставки.ХозяйственнаяОперация; Иначе НовСтр_Предоплата_Расход.ХозяйственнаяОперация = ХозяйственныеОперации; КонецЕсли; НовСтр_Предоплата_Расход.Предоплата = СуммаСписания; НовСтр_Предоплата_Расход.ПредоплатаРегл = Окр(ПредоплатаРеглПредв + ПредоплатаРаспределеноРегл — Окр(ПредоплатаРаспределеноРегл, 2), 2); НовСтр_Предоплата_Расход.ПредоплатаУпр = Окр(ПредоплатаУпрПредв + ПредоплатаРаспределеноУпр — Окр(ПредоплатаРаспределеноУпр, 2), 2); ПредоплатаРаспределеноРегл = ПредоплатаРаспределеноРегл + ПредоплатаРеглПредв; ПредоплатаРаспределеноУпр = ПредоплатаРаспределеноУпр + ПредоплатаУпрПредв; &nbsp//Уменьшаем строку оплаты на сумму зачета СтрокаОплаты.Сумма = СтрокаОплаты.Сумма — НовСтр_Предоплата_Расход.Предоплата; СтрокаОплаты.СуммаРегл = СтрокаОплаты.СуммаРегл — НовСтр_Предоплата_Расход.ПредоплатаРегл; СтрокаОплаты.СуммаУпр = СтрокаОплаты.СуммаУпр — НовСтр_Предоплата_Расход.ПредоплатаУпр; Если НЕ ДвойнаяЗаписьНеНужна Тогда &nbsp//Отражаем приход на сумму долга по курсу предоплаты. НовСтр_Долг_Приход = ТаблицаРасчетовПоСрокам.Добавить(); ЗаполнитьЗначенияСвойств(НовСтр_Долг_Приход, НовСтр_Предоплата_Расход , ,»Предоплата, ПредоплатаУпр, ПредоплатаРегл, КорОбъектРасчетов»); НовСтр_Долг_Приход.ВидДвижения = ВидДвиженияНакопления.Приход; НовСтр_Долг_Приход.Период = СтрокаОтгрузкиПоставки.Период; НовСтр_Долг_Приход.ДатаВозникновения = СтрокаОтгрузкиПоставки.Период; НовСтр_Долг_Приход.ДатаПлановогоПогашения = СтрокаОтгрузкиПоставки.ДатаПлановогоПогашения; НовСтр_Долг_Приход.РасчетныйДокумент = СтрокаОтгрузкиПоставки.Регистратор; НовСтр_Долг_Приход.ПорядокЗачета = СтрокаОтгрузкиПоставки.ПорядокЗачета; НовСтр_Долг_Приход.ХозяйственнаяОперация = СтрокаОтгрузкиПоставки.ХозяйственнаяОперация; НовСтр_Долг_Приход.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.ПустаяСсылка(); НовСтр_Долг_Приход.Долг = НовСтр_Предоплата_Расход.Предоплата; Если СтрокаОтгрузкиПоставки.РучнойКурсУпр Тогда НовСтр_Долг_Приход.ДолгУпр = СтрокаОтгрузкиПоставки.КурсУпр * СуммаСписания; Иначе НовСтр_Долг_Приход.ДолгУпр = НовСтр_Предоплата_Расход.ПредоплатаУпр; КонецЕсли; Если СтрокаОтгрузкиПоставки.РучнойКурсРегл Тогда НовСтр_Долг_Приход.ДолгРегл = СтрокаОтгрузкиПоставки.КурсРегл * СуммаСписания; Иначе НовСтр_Долг_Приход.ДолгРегл = НовСтр_Предоплата_Расход.ПредоплатаРегл; КонецЕсли; &nbsp//Переносим предоплату на расчетный документ отгрузки. НовСтр_Долг_Расход = ТаблицаРасчетовПоСрокам.Добавить(); ЗаполнитьЗначенияСвойств(НовСтр_Долг_Расход, НовСтр_Долг_Приход); НовСтр_Долг_Расход.ВидДвижения = ВидДвиженияНакопления.Расход; НовСтр_Долг_Расход.ХозяйственнаяОперация = ХозяйственныеОперации; НовСтр_Долг_Расход.ДатаПлановогоПогашения = СтрокаОтгрузкиПоставки.ДатаПлановогоПогашения; НовСтр_Долг_Расход.РасчетныйДокумент = СтрокаОтгрузкиПоставки.Регистратор; НовСтр_Долг_Расход.ДатаВозникновения = СтрокаОтгрузкиПоставки.Период; НовСтр_Долг_Расход.ПорядокЗачета = СтрокаОтгрузкиПоставки.ПорядокЗачета; НовСтр_Долг_Расход.ДокументРегистратор = СтрокаОтгрузкиПоставки.Регистратор; НовСтр_Долг_Расход.СтатьяДвиженияДенежныхСредств = СтрокаОтгрузкиПоставки.СтатьяДвиженияДенежныхСредств; НовСтр_Долг_Расход.Долг = НовСтр_Предоплата_Расход.Предоплата; НовСтр_Долг_Расход.ДолгУпр = НовСтр_Предоплата_Расход.ПредоплатаУпр; НовСтр_Долг_Расход.ДолгРегл = НовСтр_Предоплата_Расход.ПредоплатаРегл; &nbsp//Если курс переноса предоплаты и прихода по долгу не совпал, делаем переоценку. &nbsp//Возможно, когда и в оплате и в накладной ручные суммы в валюте регл. или упр. учета. Если НовСтр_Долг_Приход.ДолгРегл <> НовСтр_Долг_Расход.ДолгРегл ИЛИ НовСтр_Долг_Приход.ДолгУпр <> НовСтр_Долг_Расход.ДолгУпр Тогда ДобавитьЗаписьПереоценки(ГлобальныеПеременные, ТаблицаРасчетовПоСрокам, СтрокаОтгрузкиПоставки.Период, НовСтр_Долг_Приход, «Долг», НовСтр_Долг_Расход.ДолгРегл — НовСтр_Долг_Приход.ДолгРегл, НовСтр_Долг_Расход.ДолгУпр — НовСтр_Долг_Приход.ДолгУпр); КонецЕсли; КонецЕсли; Если СтрокаОтгрузкиПоставки.РучнойКурсРегл И НЕ ДвойнаяЗаписьНеНужна Тогда &nbsp//Остаток должен быть уменьшен ровно на ту сумму, на которую уже сформирован приход в двойной записи. ДолгРеглПредв = НовСтр_Долг_Приход.ДолгРегл; Иначе &nbsp//Иначе пропорционально уменьшаем остаток строки. ДолгРеглПредв = СтрокаОтгрузкиПоставки.КурсРегл * СуммаСписания; КонецЕсли; Если СтрокаОтгрузкиПоставки.РучнойКурсУпр И НЕ ДвойнаяЗаписьНеНужна Тогда ДолгУпрПредв = НовСтр_Долг_Приход.ДолгУпр; Иначе ДолгУпрПредв = СтрокаОтгрузкиПоставки.КурсУпр * СуммаСписания; КонецЕсли; Если ГлобальныеПеременные.ДанныеНакладных = Неопределено Тогда ГлобальныеПеременные.ДанныеНакладных.Вставить(СтрокаОтгрузкиПоставки.Регистратор, СтруктураСумм()); КонецЕсли; СтрокаОтгрузкиПоставки.Сумма = СтрокаОтгрузкиПоставки.Сумма — СуммаСписания; СтрокаОтгрузкиПоставки.СуммаРегл = СтрокаОтгрузкиПоставки.СуммаРегл — Окр(ДолгРеглПредв + ДолгРаспределеноРегл — Окр(ДолгРаспределеноРегл,2),2); СтрокаОтгрузкиПоставки.СуммаУпр = СтрокаОтгрузкиПоставки.СуммаУпр — Окр(ДолгУпрПредв + ДолгРаспределеноУпр — Окр(ДолгРаспределеноУпр,2),2); ДолгРаспределеноРегл = ДолгРаспределеноРегл + ДолгРеглПредв; ДолгРаспределеноУпр = ДолгРаспределеноУпр + ДолгУпрПредв; ДанныеНакладной = ГлобальныеПеременные.ДанныеНакладных; ДанныеНакладной.СуммаДокумента = ДанныеНакладной.СуммаДокумента + СуммаСписания; ДанныеНакладной.СуммаДокументаРегл = ДанныеНакладной.СуммаДокументаРегл + НовСтр_Предоплата_Расход.ПредоплатаРегл;//- ДанныеНакладной.СуммаДокументаУпр = ДанныеНакладной.СуммаДокументаУпр + НовСтр_Предоплата_Расход.ПредоплатаУпр; &nbsp//Уменьшаем график оплаты условной задолженности на разницу суммы зачтенного аванса и строк накладной сверх заказа. СуммаУменьшенияГрафика = ВзаиморасчетыСервер.СписатьСумму(СуммаСписания, СтрокаОтгрузкиПоставки.КОплате); Если СуммаСписания > 0 И НЕ СтрокаОплаты.ГрафикСписан Тогда СкорректироватьПлановыеОплаты(ГлобальныеПеременные, ТаблицаПланОплат, СтрокаОплаты, СуммаСписания, «Аванс», ПланыОплат); КонецЕсли; Если СтрокаОплаты.Сумма = 0 Тогда Индексы.ИндексОплаты = Индексы.ИндексОплаты + 1; Если Окр(СтрокаОплаты.СуммаРегл, 2) <> 0 ИЛИ Окр(СтрокаОплаты.СуммаУпр, 2) <> 0 Тогда ДобавитьЗаписьПереоценки(ГлобальныеПеременные, ТаблицаРасчетовПоСрокам, СтрокаОтгрузкиПоставки.Период, СтрокаОплаты, «Предоплата», -Окр(СтрокаОплаты.СуммаРегл, 2), -Окр(СтрокаОплаты.СуммаУпр, 2)); КонецЕсли; КонецЕсли; КонецЕсли; Если СтрокаОтгрузкиПоставки.Сумма = 0 Тогда Индексы.ИндексОтгрузкиПоставки = Индексы.ИндексОтгрузкиПоставки + 1; Если СтрокаОтгрузкиПоставки.СуммаРегл <> 0 ИЛИ СтрокаОтгрузкиПоставки.СуммаУпр <> 0 Тогда ДобавитьЗаписьПереоценки(ГлобальныеПеременные, ТаблицаРасчетовПоСрокам, НачалоДня(СтрокаОплаты.Период), СтрокаОтгрузкиПоставки, «Долг», -Окр(СтрокаОтгрузкиПоставки.СуммаРегл, 2), -Окр(СтрокаОтгрузкиПоставки.СуммаУпр, 2)); КонецЕсли; КонецЕсли; &nbsp//Отгрузка раньше оплаты. Иначе &nbsp//Обычная оплата. Если НЕ СтрокаОплаты.ЭтоКорректировка Тогда &nbsp//Добавляем строку прихода долга по отгрузке/поставке. Если НЕ СтрокаОтгрузкиПоставки.ПриходДобавлен И СтрокаОтгрузкиПоставки.Сумма <> 0 Тогда ПересчитатьСуммыЕслиЭтоКорректировка(ГлобальныеПеременные, СтрокаОтгрузкиПоставки); ДобавитьПриход(ГлобальныеПеременные, ТаблицаРасчетовПоСрокам, СтрокаОтгрузкиПоставки, «ОтгрузкаПоставка»); &nbsp//Уточняется план только на сумму по заказу. СкорректироватьПлановыеОплаты(ГлобальныеПеременные, ТаблицаПланОплат, СтрокаОтгрузкиПоставки, СтрокаОтгрузкиПоставки.Сумма — СтрокаОтгрузкиПоставки.КОплате, «УточнениеПлана»,ПланыОплат); &nbsp//Добавляются записи плана на всю сумму включая уточнение и сверхзаказа. СкорректироватьПлановыеОплаты(ГлобальныеПеременные, ТаблицаПланОплат, СтрокаОтгрузкиПоставки, СтрокаОтгрузкиПоставки.Сумма, «ОтгрузкаПоставка», ПланыОплат); КонецЕсли; &nbsp//Списываем план отгрузки если есть. Если НЕ СтрокаОтгрузкиПоставки.ПланОтгрузокПоставокСписан Тогда СписатьПланОтгрузкиПоставки(ГлобальныеПеременные, ТаблицаПланОтгрузокПоставок, СтрокаОтгрузкиПоставки, ПланыОтгрузокПоставок); КонецЕсли; Если СтрокаОтгрузкиПоставки.Сумма <> 0 Тогда &nbsp//Переоценка накладной до даты оплаты. Если НужнаПереоценка Тогда ПереоценитьДолг(ГлобальныеПеременные, ТаблицаРасчетовПоСрокам, СтрокаОтгрузкиПоставки, СтрокаОплаты); КонецЕсли; &nbsp//Если расчетный документ накладная изменился, то сбрасываем служебные реквизиты распределения копеек. Если ТекущийДокументОтгрузкиПоставки <> СтрокаОтгрузкиПоставки.РасчетныйДокумент Тогда ДолгРаспределеноРегл = 0; ДолгРаспределеноУпр = 0; ТекущийДокументОтгрузкиПоставки = СтрокаОтгрузкиПоставки.РасчетныйДокумент; КонецЕсли; &nbsp//Добавляем строку погашения задолженности. НовСтр_Долг_Расход = ТаблицаРасчетовПоСрокам.Добавить(); НовСтр_Долг_Расход.ВидДвижения = ВидДвиженияНакопления.Расход; НовСтр_Долг_Расход.ДокументРегистратор = СтрокаОплаты.Регистратор; &nbsp//Взаимозачет считаем взаимозачетом Если СтрокаОплаты.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВзаимозачетЗадолженности Тогда НовСтр_Долг_Расход.ХозяйственнаяОперация = СтрокаОплаты.ХозяйственнаяОперация; Иначе НовСтр_Долг_Расход.ХозяйственнаяОперация = ХозяйственныеОперации; КонецЕсли; НовСтр_Долг_Расход.ВалютаДокумента = СтрокаОплаты.ВалютаДокумента; НовСтр_Долг_Расход.Период = СтрокаОплаты.Период; НовСтр_Долг_Расход.ПорядокОпера

В конструкции «ГДЕ» мы преднамеренно ошиблись, поставив «И», но не прописав еще одно условие. Совершенно логично, что 1С не сможет справиться с таким запросом и выдаст ошибку:

{МодульСеанса(21)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
{(13, 4)}: Синтаксическая ошибка
И <<?>>

Рассмотрим еще один пример:

Перенесем ошибочный код в обработчик «ПередЗаписью» справочника «Версии программ» и попробуем записать справочник программно. Видим ошибку:

{МодульСеанса(8)}: Ошибка при вызове метода контекста (Записать)
Выборка.ПолучитьОбъект().Записать();
по причине:
Ошибка при выполнении обработчика — ‘ПередЗаписью’
по причине:
{Справочник.ВерсииПрограмм.МодульОбъекта(20)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
{(13, 4)}: Синтаксическая ошибка
И <<?>>

Несмотря на то, что ошибка заключается в выполнения метода «Выполнить», система ругается и на строчку кода, где вызывается программная запись объекта.

Контекстные правила и методы

Любой программный продукт архитектурно состоит из модулей (module, англ.), частей. Модульные части программы 1С и их местоположение показаны на рисунке:

Программные модули, в свою очередь, состоят из разделов:

Контекст (context, англ.) — это одно из важнейших понятий в программировании. В 1С под ним понимается окружение модуля и его разделов, — какие именно переменные, свойства, объекты, метод (method) и события могут быть ему доступны в каждой конкретной точке. В разных точках context, как правило, уже другой.

Разработчик (доработчик) должен понимать — какие контекстные свойства имеет точка и какой method является доступным для использования в ней.

В восьмёрке выделены контекстные виды:

  • В любой точке конфигурации доступен Глобальный context. Отдельная ветка синтаксис-помощника показывает доступные для вызова функции:
  • Локальный context (более низкого уровня) доступен в точках каждой модульной части;
  • Ещё ниже уровень — локальный context процедуры и так далее.

Базовыми являются основные четыре правила для доступа процедур, переменных, и ф-ций в модулях:

  • В общих модульных частях не будут доступными для экспорта переменные, процедуры и ф-ции модульных приложений;
  • В модульных приложениях есть доступ для экспорта процедур и ф-ций общих модулей;
  • Для общих мод. частей открыт доступ к экспорту процедур и ф-ций прочих общих модулей;
  • Для модульных прикладных объектов и для модульных форм являются доступными переменные, функции и процедуры модулей приложений для экспорта и общих модулей.

Если какой-либо форме присвоен основной реквизит, то в контексте этой формы будут содержаться свойство и method, отвечающие этому основному реквизиту. К примеру, в модуле формы для элемента справочника Номенклатура доступен method и свойства объекта СправочникОбъект.Номенклатура.

Иллюстрация приведённых правил на схеме:

Стрелками обозначено что одной из модульных частей предоставляется возможность другим по обращению к своим переменным, функциям и процедурам для экспорта. Напоминаем, — в общем модуле не существует объявления переменных.

Что полезно знать об ошибках

Напоследок проведём общий анализ ошибок в 1С. Любая из них может быть причиной тех, которым посвящена тема статьи:

  • Нарушение как логической, так физической целостности информационной базы;
  • Ошибки пользователей при обращении с платформой;
  • Ошибочно введённый разработчиком (доработчиком) код;
  • Человеческий фактор — например, забывчивость;
  • Чрезвычайные ситуации (отсутствие света, метель, дождь, град, ураган, наводнение).

Провести анализ ошибки:

  • Сравнить релизы платформы и конфигурации;
  • Прочитать полный текст сообщения до конца, некоторое время подумать и понять то, что написала машина. Очень часто люди не читают такие сообщения целиком. Но бывает, что именно в конце его содержатся рекомендации к её устранению;
  • Проанализировать насколько давней она является и обстоятельства её появления;
  • Можно ли её воспроизвести;
  • Невоспроизводимые ранее не встречавшиеся ошибки, как правило, не исправляются;
  • Повторяется ли ошибка с другого компьютера или другим пользователем. В этом случае рассмотреть очистку кэша, настройку прав, очистку пользовательских настроек.

Дополнительно о причинах ошибок:

  • Часть ошибок — это результат использования нелицензионного программного обеспечения (и windows тоже);
  • Повреждённая платформа — это самый распространённый пример. Всего один патч способен взломать версию платформы. После чего можно не обнаружить базу (или лицензию);
  • При первичном столкновении с ошибкой стоит поискать решение в поисковике — возможно решение её уже кем-то найдено;
  • Следите за актуальностью релиза конфигурации (особенно если из них сдаётся регламентированная отчётность);
  • Актуальность релиза платформы — для каждой конфигурации рекомендован свой релиз;
    Все события, происходящие в 1С, протоколируются в технологическом журнале!
  • Перед началом каких-то действий с базой необходимо делать архивную копию!

Теперь вы знаете что такое context, почему возникают связанные с ним ошибки, как анализировать ошибки в 1С и как их решать.