Программное заполнение непериодического независимого регистра сведений в 1С:ЗУП 3.0
При программном заполнении на второй строке возникает ошибка:
Форма.Форма.Форма(569)}:
Ошибка при вызове метода контекста (Записать)
НаборЗаписей.Записать(); по причине: Запись не верна! Значение поля не соответствует установленному отбору: НаградыФизическихЛиц: Иванов Иван Иванович, 1 (Регистр сведений: Награды; Поле: НомерПоПорядку)
Программный код:
В чем ошибка? Спасибо!
Форма.Форма.Форма(569)}:
Ошибка при вызове метода контекста (Записать)
НаборЗаписей.Записать(); по причине: Запись не верна! Значение поля не соответствует установленному отбору: НаградыФизическихЛиц: Иванов Иван Иванович, 1 (Регистр сведений: Награды; Поле: НомерПоПорядку)
Программный код:
//***Загрузка наград********************************************
&НаКлиенте
Процедура ЗагрузитьНаградыФизЛиц(Команда)
ОчисткаНаградФизЛиц_НаСервере();
Файл = "D:\Выгрузка_справ_из_2.5\NAGRAD.DBF";
БД = Новый XBase(Файл);
БД.Кодировка = КодировкаXBase.OEM;
БД.ВНачале();
Для i=1 по БД.КоличествоЗаписей() Цикл
ТабНомер = СокрЛП(БД.KOD);
Награда = СокрЛП(БД.NAGRADA);
НомерПП = Число(БД.NOM_STR);
НомерПриказа = Строка(БД.NOM_PRIK);
ДатаПриказа = БД.DATA_PRIK;
ЧейПриказ = Строка(БД.CHEI_PRIK);
ЗагрузитьНаградыФизЛиц_НаСервере(ТабНомер, Награда, НомерПП, НомерПриказа, ДатаПриказа, ЧейПриказ);
БД.Следующая();
КонецЦикла;
БД.ЗакрытьФайл();
Сообщить("Награды сотрудников загружены успешно!");
КонецПроцедуры
&НаСервере
Процедура ОчисткаНаградФизЛиц_НаСервере();
НаборЗаписей = РегистрыСведений.НаградыФизическихЛиц.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьНаградыФизЛиц_НаСервере(ТабНомер, Награда, НомерПП, НомерПриказа, ДатаПриказа, ЧейПриказ);
Сотрудник = Справочники.ФизическиеЛица.НайтиПоКоду(ТабНомер);
Если НЕ Сотрудник.Пустая() Тогда
НаборЗаписей = РегистрыСведений.НаградыФизическихЛиц.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ФизическоеЛицо.Установить(Сотрудник);
НаборЗаписей.Отбор.НомерПоПорядку.Установить(НомерПП);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.ФизическоеЛицо = Сотрудник;
НоваяЗапись.НомерПоПорядку = НомерПП;
НоваяЗапись.Награда = Справочники.Награды.НайтиПоНаименованию(Награда);
НоваяЗапись.ДатаПриказа = ДатаПриказа;
НоваяЗапись.НаименованиеПриказа = ЧейПриказ;
НоваяЗапись.НомерПриказа = НомерПриказа;
НаборЗаписей.Записать();
КонецЕсли;
КонецПроцедуры
//**************************************************************
ПоказатьВ чем ошибка? Спасибо!
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Вообще вся проблема в том что у вас криво организована загрузка.
На мой взгляд неправильно:
1) Отдельный серверный вызов на очистку регистра
2) Вызов сервера с клиента в цикле (!).
3) Зачем-то передаете контекст формы на сервер при каждом вызове.
Кроме того, некрасиво передавать 6 параметров в процедуру, ухудшается читаемость кода, хотя это уже дело вкуса.
Не претендую на окончательную правоту, но мне кажется, здесь все можно выполнить за один внеконтекстный серверный вызов.
Загоните на клиенте содержимое файла в какой-нибудь контейнер, например в массив структур, передайте на сервер и там обработайте.
И тогда отбор по этому полю ставить и ненужно будет.
На мой взгляд неправильно:
1) Отдельный серверный вызов на очистку регистра
2) Вызов сервера с клиента в цикле (!).
3) Зачем-то передаете контекст формы на сервер при каждом вызове.
Кроме того, некрасиво передавать 6 параметров в процедуру, ухудшается читаемость кода, хотя это уже дело вкуса.
Не претендую на окончательную правоту, но мне кажется, здесь все можно выполнить за один внеконтекстный серверный вызов.
Загоните на клиенте содержимое файла в какой-нибудь контейнер, например в массив структур, передайте на сервер и там обработайте.
И тогда отбор по этому полю ставить и ненужно будет.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот