Загрузка данных
&НаСервере
Процедура ЗагрузитьВРегистрПересчетТМЦ(Исполнитель) Экспорт
Данные = ЗагрузитьДокументыПересчетТМЦ(Исполнитель);
Если Данные = Неопределено ИЛИ ТипЗнч(Данные) <> Тип("Массив") Тогда
Возврат;
КонецЕсли;
ДатаЗагрузки = ТекущаяДатаСеанса();
// Группируем по документу: пишем набором, чтобы повторная
// загрузка заменяла данные документа целиком
ПоДокументам = Новый Соответствие;
Для Каждого СтрокаJSON Из Данные Цикл
КлючДокумента = СокрЛП(ЗначениеЭлемента(СтрокаJSON, "Документ"));
Если Не ЗначениеЗаполнено(КлючДокумента) Тогда
Продолжить;
КонецЕсли;
СтрокиДокумента = ПоДокументам.Получить(КлючДокумента);
Если СтрокиДокумента = Неопределено Тогда
СтрокиДокумента = Новый Массив;
ПоДокументам.Вставить(КлючДокумента, СтрокиДокумента);
КонецЕсли;
СтрокиДокумента.Добавить(СтрокаJSON);
КонецЦикла;
Для Каждого КлючИЗначение Из ПоДокументам Цикл
ИмяДокумента = КлючИЗначение.Ключ;
НачатьТранзакцию();
Попытка
НаборЗаписей = РегистрыСведений.ПересчетТМЦ.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ДокументПересчетТМЦ.Установить(ИмяДокумента);
ОбработанныеНомера = Новый Соответствие;
ПредыдущийНомер = Неопределено;
Для Каждого СтрокаJSON Из КлючИЗначение.Значение Цикл
НовыйНомер = ИмяДокумента;
ИнвентарныйНомер = СокрЛП(ЗначениеЭлемента(СтрокаJSON, "ИнвентарныйНомер"));
// Инвентарный номер — измерение, дубли внутри документа недопустимы
Если ОбработанныеНомера.Получить(ВРег(ИнвентарныйНомер)) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ОбработанныеНомера.Вставить(ВРег(ИнвентарныйНомер), Истина);
Запись = НаборЗаписей.Добавить();
Запись.Период = ТекущаяДата();
Запись.ДокументПересчетТМЦ = ИмяДокумента;
Запись.ОсновноеСредствоИнвентарныйНомер = ИнвентарныйНомер;
Запись.УИДокумента = ""; // по договорённости не заполняем
Запись.ДатаСоздания = ДатаИзJSON(ЗначениеЭлемента(СтрокаJSON, "ПересчетТМЦДата"));
Запись.ДатаЗагрузки = ДатаЗагрузки;
Запись.ОсновноеСредствоНаименование = ЗначениеЭлемента(СтрокаJSON, "НаименованиеОсновногоСредства");
Запись.ОсновноеСредствоУИД = ЗначениеЭлемента(СтрокаJSON, "КодОсновногоСредства");
Запись.ОсновноеСредствоСерийныйНомер = ЗначениеЭлемента(СтрокаJSON, "СерийныйНомер");
// План всегда 1, факт всегда 0
Запись.КоличествоПлан = 1;
Запись.КоличествоФакт = 0;
Запись.Чек = Ложь;
Если ПредыдущийНомер <> Неопределено Тогда
Если ПредыдущийНомер <> ИмяДокумента Тогда
НаборЗаписейСтатус = РегистрыСведений.СтатусыДокументов.СоздатьНаборЗаписей();
НоваяЗаписьСтатус = НаборЗаписейСтатус.Добавить();
НоваяЗаписьСтатус.ДокументТМЦ = ИмяДокумента;
НоваяЗаписьСтатус.Период = ТекущаяДата();
НоваяЗаписьСтатус.Статус = Перечисления.СтатусыДокументовТМЦ.ВРаботе;
ПредыдущийНомер = ИмяДокумента;
НаборЗаписейСтатус.Записать();
КонецЕсли;
Иначе
НаборЗаписейСтатус = РегистрыСведений.СтатусыДокументов.СоздатьНаборЗаписей();
НоваяЗаписьСтатус = НаборЗаписейСтатус.Добавить();
НоваяЗаписьСтатус.ДокументТМЦ = ИмяДокумента;
НоваяЗаписьСтатус.Период = ТекущаяДата();
НоваяЗаписьСтатус.Статус = Перечисления.СтатусыДокументовТМЦ.ВРаботе;
ПредыдущийНомер = ИмяДокумента;
НаборЗаписейСтатус.Записать();
КонецЕсли;
КонецЦикла;
НаборЗаписей.Записать(Истина);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
КонецПроцедуры