При обновлении 1С Бухгалтерия для Украины 1.2 на версию 2.0 возникает следующая ошибка:
{ОбщийМодуль.ЗарплатаКадрыОбновлениеСПредыдущейРедакции.Модуль(4485)}: Ошибка при вызове метода контекста (Записать)
НаборЗаписей.Записать();
по причине:
Запись с такими ключевыми полями существует! : ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам: 01.08.2015, ТОВ "РОМАШКА", С**** Анастасія Олександрівна, (Регистр сведений: Лицевые счета сотрудников по зарплатным проектам; Номер строки: 4)
Очевидно, что ошибка возникает при записи в периодический регистр сведений «ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам». По какой-то причине обработка обновления пытается продублировать уже существующий в этом регистре набор записей.
В регистре сведений «ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам» 3 измерения: Организация, ФизЛицо и Банк.
Чтобы воспроизвести ситуацию, исходя из кода обработки, составим следующий запрос и выполним его в архивной копии Бухгалтерии 1.2:
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПараметрыВыплатыЗПРаботниковСрезПоследних.Период КАК Период,
ПараметрыВыплатыЗПРаботниковСрезПоследних.Организация КАК Организация,
ПараметрыВыплатыЗПРаботниковСрезПоследних.Банк КАК Банк,
ПараметрыВыплатыЗПРаботниковСрезПоследних.НомерКарточки КАК НомерКарточки,
ПараметрыВыплатыЗПРаботниковСрезПоследних.ДатаДействия КАК ДатаДействия,
ПараметрыВыплатыЗПРаботниковСрезПоследних.Сотрудник.ФизЛицо КАК ФизическоеЛицо
ПОМЕСТИТЬ ВТДанныеОБанковскихКарточках
ИЗ
РегистрСведений.ПараметрыВыплатыЗПРаботников.СрезПоследних() КАК ПараметрыВыплатыЗПРаботниковСрезПоследних
ГДЕ
ПараметрыВыплатыЗПРаботниковСрезПоследних.Активность = ИСТИНА
И ПараметрыВыплатыЗПРаботниковСрезПоследних.СпособВыплаты = ЗНАЧЕНИЕ(Перечисление.СпособыВыплатыЗарплаты.ЧерезБанк)
;
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ДанныеОБанковскихКарточках.Период, МЕСЯЦ) КАК Месяц,
МАКСИМУМ(ДанныеОБанковскихКарточках.Период) КАК Период,
ДанныеОБанковскихКарточках.Организация КАК Организация,
ДанныеОБанковскихКарточках.ФизическоеЛицо КАК ФизическоеЛицо
ПОМЕСТИТЬ ВТВТДанныеОБанковскихКарточкахПоПериодам
ИЗ
ВТДанныеОБанковскихКарточках КАК ДанныеОБанковскихКарточках
СГРУППИРОВАТЬ ПО
ДанныеОБанковскихКарточках.Организация,
ДанныеОБанковскихКарточках.ФизическоеЛицо,
НАЧАЛОПЕРИОДА(ДанныеОБанковскихКарточках.Период, МЕСЯЦ)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДанныеОБанковскихКарточкахПоПериодам.Период КАК Период,
ДанныеОБанковскихКарточках.Организация КАК Организация,
ДанныеОБанковскихКарточках.Банк КАК Банк,
ДанныеОБанковскихКарточках.НомерКарточки КАК НомерЛицевогоСчета,
ДанныеОБанковскихКарточках.ДатаДействия КАК ДатаДействия,
ДанныеОБанковскихКарточках.ФизическоеЛицо КАК ФизическоеЛицо
ИЗ
ВТВТДанныеОБанковскихКарточкахПоПериодам КАК ДанныеОБанковскихКарточкахПоПериодам
ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеОБанковскихКарточках КАК ДанныеОБанковскихКарточках
ПО ДанныеОБанковскихКарточкахПоПериодам.Период = ДанныеОБанковскихКарточках.Период
И ДанныеОБанковскихКарточкахПоПериодам.ФизическоеЛицо = ДанныеОБанковскихКарточках.ФизическоеЛицо
И ДанныеОБанковскихКарточкахПоПериодам.Организация = ДанныеОБанковскихКарточках.Организация
Результат наблюдения
После изучения результатов выяснилось:
- В БД есть 2 сотрудника, у которых реквизит ФизЛицо указывает на один и тот же элемент справочника «Физические лица»
- В Бухгалтерии для Украины 1.2 параметры выплаты зарплаты хранятся в РС «ПараметрыВыплатыЗПРаботников» в разрезе сотрудников
- В Бухгалтерии для Украины 2.0 параметры выплаты по банку хранятся в разрезе физических лиц
Решение проблемы
Во избежание ошибок подобного рода, каждый элемент справочника «Сотрудники» должен ссылаться на отдельное физическое лицо.
В моем случае удобнее всего было поменять элемент справочника с помощью «Редактор объекта БР» в панели Инструменты разработчика.