Загрузка данных из ТЗ в Регистр Сведений

1. 2 12.01.18 08:02 Сейчас в теме
День добрый. На форме есть ТЗ , в ней только одна колонка "ФИО". Нужно азгрузить данные из ТЗ в независимый РС.
Пробовал так:
	 Для Каждого  НоваяСтр Из ТабличноеПоле1 Цикл 
		
	// ЗАПИСЬ В РС "ОтветственныеЛица"
					Ответст=РегистрыСведений.ОтветственныеЛица.СоздатьНаборЗаписей();
					ЗаписьОтветст=Ответст.Добавить();
					ЗаписьОтветст.ФизическоеЛицо=Справочники.ФизическиеЛица.НайтиПоНаименованию(НоваяСтр.ФИО);     
				    ЗаписьОтветст.Период='20180101';
					Ответст.Записать(Ложь);

				 КонецЦикла;
Показать


Создаётся только одна запись и ругается что запись с ключевыми полями существует.

Пробовал так(нашёл в гугле пример):
	 НаборЗаписей = РегистрыСведений.ОтветственныеЛица.СоздатьНаборЗаписей(); 
НаборЗаписей.Отбор.Объект.Установить(ФизическоеЛицо); 
Для Каждого СтрокаТаблицы Из ТабличноеПоле1 Цикл 
НоваяЗапись = НаборЗаписей.Добавить(); 
НоваяЗапись.ФизическоеЛицо = Справочники.ФизическиеЛица.НайтиПоНаименованию(СтрокаТаблицы.ФИО); 
НоваяЗапись.Период='20180101';
КонецЦикла;
НаборЗаписей.Записать(); 


Выдаёт ошибку что объект не обнаружен, и ругается на строчку "НаборЗаписей.Отбор.Объект.Установить(ФизическоеЛицо); "

Вопрос: как загрузить данные из ТЗ в РС? Читал что есть метод "Загрузить", но можно ли без него?
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. D_e_X_T_e_R 12.01.18 08:06 Сейчас в теме
Закомменируйте строку с отбором.
5. BigBoss 2 12.01.18 08:21 Сейчас в теме
(2)
Закомменируйте строку с отбором.

Всё равно пишет ошибку "запись с ключевыми полями существует"
3. Infector 171 12.01.18 08:08 Сейчас в теме
Как-то так, но если регистр изначально не пустой еще нужно проверять уникальность записи по измерениям, (т.е. не добавлять строку, если такая же уже есть):

НаборЗаписей=РегистрыСведений.ОтветственныеЛица.СоздатьНаборЗаписей(); 
НаборЗаписей.Прочитать();


 Для Каждого  НоваяСтр Из ТабличноеПоле1 Цикл 
         
                    НаборЗаписей=Ответст.Добавить();
                    ЗаписьОтветст.ФизическоеЛицо=Справочники.ФизическиеЛица.НайтиПоНаименованию(НоваяСтр.ФИО);     
                    ЗаписьОтветст.Период='20180101';
              
КонецЦикла;

НаборЗаписей.Записать(Ложь);

Показать
4. BigBoss 2 12.01.18 08:20 Сейчас в теме
(3)
НаборЗаписей=РегистрыСведений.ОтветственныеЛица.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();


Для Каждого НоваяСтр Из ТабличноеПоле1 Цикл

НаборЗаписей=Ответст.Добавить();
ЗаписьОтветст.ФизическоеЛицо=Справочники.ФизическиеЛица.НайтиПоНаименованию(НоваяСтр.ФИО);
ЗаписьОтветст.Период='20180101';

КонецЦикла;

НаборЗаписей.Записать(Ложь);
Показать


Пробовал так, пишет запись с ключевыми полями существует, хотя РС пустой
11. Infector 171 12.01.18 09:10 Сейчас в теме
(4) Если действительно пустой, то в процессе записи Укладываются неуникальные значения. Нужно проверять перед добавлением

НаборЗаписей=РегистрыСведений.ОтветственныеЛица.СоздатьНаборЗаписей(); 
НаборЗаписей.Прочитать();

ТНабора = НаборЗаписей.Выгрузить();

 Для Каждого  НоваяСтр Из ТабличноеПоле1 Цикл 
         
         ФЛ = Справочники.ФизическиеЛица.НайтиПоНаименованию(НоваяСтр.ФИО);  

         ПараметрыОтбора = Новый Структура("ФизическоеЛицо, Период", ФЛ,'20180101');
                
         СущСтроки = ТНабора.НайтиСтроки(ПараметрыОтбора );      
        
         Если СущСтроки.Количество() = 0 Тогда
         
               Запись = ТНабора .Добавить();
               Запись.ФизическоеЛицо=  ФЛ ; 
               Запись.Период='20180101';

        КонецЕсли;
      
КонецЦикла;

НаборЗаписей.Загрузить(ТНабора);
НаборЗаписей.Записать(Ложь);
Показать
12. Xershi 1135 01.05.21 14:26 Сейчас в теме
(11) а как по скорости такой метод?
У меня была на входе ТЗ, мне нужно было дописать недостающее, если просто грузить, то все замещает, пришлось, через менеджер записи построчно ТЗ обходить и писать.
Если делать так как у вас, то боюсь когда записей станет миллион, то слишком долго это будет.
13. Infector 171 02.05.21 09:07 Сейчас в теме
(12)ну никто не запрещает по одному из измерений порциями обрабатывать. В целом по конкретной таблице оцениваем что в ней есть и стоит ли её одним набором хватать. Субъективно показалось, что быстрее чем менеджером записи обрабатывается.
14. Xershi 1135 02.05.21 10:32 Сейчас в теме
(13) у меня дозапись будет небольшая. Как уже сказал новых записей до 100, а старых намного больше будет.
15. Infector 171 02.05.21 10:53 Сейчас в теме
(14) я обычно на таблицах до 10000 строк так делал, полная загрузка данных с возможностью повторного запуска и обновления данных.
16. Infector 171 02.05.21 10:55 Сейчас в теме
(14)на больших таблицах НайтиСтроки() начинает притормаживать, поэтому в сторону обработки запросом есть смысл смотреть. Но дополнить 100 записями наверное через менеджер проще все-таки.
6. DenisCh 12.01.18 08:40 Сейчас в теме
есть подозрение, что она не находит физлицо и пишет пустую ссылку
7. D_e_X_T_e_R 12.01.18 08:50 Сейчас в теме
Попробуйте отладчиком отловить физ лицо которое пытается записать в регистр
8. independ 1277 12.01.18 08:52 Сейчас в теме
Вот примерно так
НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей(); 
НаборЗаписей.Прочитать(); 
//Выгружаем регистр штрихкодов в ТЗ и делаем, что нам нужно 
ТЗ=НаборЗаписей.Выгрузить(); 
Для Каждого СтрОтбор из ТЗ Цикл 
Если СтрДлина(СокрЛП(СтрОтбор.Штрихкод))=8 Тогда 
СтрОтбор.Штрихкод=СокрЛП(СтрОтбор.Штрихкод); 
СтрОтбор.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN8; 
Сообщить(СтрОтбор.ТипШтрихкода); 
Сообщить(СтрОтбор.Штрихкод); 
КонецЕсли;	
КонецЦикла; 
//Зачищаем регистр штрихкодов 
НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей(); 
НаборЗаписей.Записать(); 
//Грузим в регистр штрихкодов наши данные из ТЗ 
НаборЗаписей.Загрузить(ТЗ); 
НаборЗаписей.Записать();
Показать
9. VZyryanov 12.01.18 08:52 Сейчас в теме
Попробуйте записать с замещением существующей записи
НаборЗаписей.Записать(Истина);
10. independ 1277 12.01.18 08:55 Сейчас в теме
	РегШК = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
	РегШК.Штрихкод=Штрихкод;
	РегШК.Владелец=Номенклатура;
	
	ТипЕАН="Code39";
	Если СтрДлина(Штрихкод)=13 Тогда
		ТипЕАН="EAN13";
	ИначеЕсли СтрДлина(Штрихкод)=8 Тогда
		ТипЕАН="EAN8";
	КонецЕсли;
	
	РегШК.ТипШтрихкода=ПланыВидовХарактеристик.ТипыШтрихкодов[ТипЕАН];
	РегШК.Записать();
Показать
Оставьте свое сообщение
Вопросы с вознаграждением