Зависает 1С при загрузке из Excel

1. user1292093 08.10.19 16:18 Сейчас в теме
Процедура КнопкаВыполнитьНажатие(Кнопка)
	
		Индекс = 0;
		Пока Индекс <> Таблица.Количество() Цикл				
			
					ПоискРаботника = Справочники.Работники.НайтиПоНаименованию(Таблица.Получить(Индекс).Фио);
					Если Таблица.Получить(Индекс).Фио <> ПоискРаботника.Наименование  Тогда
						Сообщить("нема");									
							ДатаЕксель 							= Таблица.Получить(Индекс).Датанародження;
							СтрДата								= СтрЗаменить(ДатаЕксель, "." , "");
							
							Год									= Прав(СтрДата,4);
							День								= Лев(СтрДата,2);
							Месяц								= Сред(СтрДата,3,2);
							СтрокаДаты							= "" + Год + Месяц + День;
							ДатаРоботника						= Дата(СтрокаДаты);
					
							НовыйЭлемент 						= Справочники.Работники.СоздатьЭлемент();
							НовыйЭлемент.Наименование 			= Таблица.Получить(Индекс).Фио;
							НовыйЭлемент.Адрес 					= Таблица.Получить(Индекс).Адреса;
							НовыйЭлемент.ДатаРождения 			= ДатаРоботника;
							
						Если Таблица.Получить(Индекс).Офнеоф = "0" Тогда
								
							НовыйЭлемент.Официально 			= Ложь;
							
						Иначе 
							НовыйЭлемент.Официально 			= Истина;
						КонецЕсли;
						
							НовыйЭлемент.Должность 				= Справочники.Должности.НайтиПоНаименованию(Таблица.Получить(Индекс).Должность);
							
						Если НовыйЭлемент.Должность 			= Справочники.Должности.ПустаяСсылка() Тогда
								
							НовыйЭлементДолжность 				= Справочники.Должности.СоздатьЭлемент();
							НовыйЭлементДолжность.Наименование 	= Таблица.Получить(Индекс).Должность;
							НовыйЭлементДолжность.Записать();
							
						КонецЕсли;
							НовыйЭлемент.Должность				= Справочники.Должности.НайтиПоНаименованию(Таблица.Получить(Индекс).Должность);
							
							НовыйЭлемент.Записать();
					Иначе Продолжить;
					КонецЕсли;
		Индекс = Индекс + 1;
	КонецЦикла;
КонецПроцедуры
Показать
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
6. nomad_irk 72 08.10.19 16:40 Сейчас в теме
(5) Потому что Таблица.Количество() выдает значение равное МаксимальныйИндекс + 1

Используйте цикл вида

Для Каждого Стр ИЗ Таблица Цикл
......
КонецЦикла


вместо

Пока Индекс <> Таблица.Количество() Цикл
.......
КонецЦикла
user1292093; +1 Ответить
Остальные ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. user1292093 08.10.19 16:22 Сейчас в теме
Думаю что проблема в даном куске кода. Выгрузка значений из Ексель работает нормально. При заполнения справочника Работники при этом игнорируеться одинаковые Наименования, зависает 1С и приходиться вырубать Диспетчером задач. Почему собственно так происходит ?
3. nomad_irk 72 08.10.19 16:26 Сейчас в теме
Потому, что при вызове следующей итерации цикла с помощью оператора Продолжить, счетчик индекса не увеличивается.
4. razars 13 08.10.19 16:26 Сейчас в теме
Индекс = Индекс + 1; перед продолжить добавь
5. user1292093 08.10.19 16:37 Сейчас в теме
Окей, добавил перед Продолжить еще Индекс = Индекс + 1;
Но когда я повторно нажимаю Выполнить, добавляеться все ж элемент
Прикрепленные файлы:
6. nomad_irk 72 08.10.19 16:40 Сейчас в теме
(5) Потому что Таблица.Количество() выдает значение равное МаксимальныйИндекс + 1

Используйте цикл вида

Для Каждого Стр ИЗ Таблица Цикл
......
КонецЦикла


вместо

Пока Индекс <> Таблица.Количество() Цикл
.......
КонецЦикла
user1292093; +1 Ответить
7. user1292093 08.10.19 16:42 Сейчас в теме
(6) Я не думаю, что это решит проблему
8. EVKash 14 08.10.19 16:46 Сейчас в теме
(7) проблему зацикливания очень даже решит...
правильность обработки данных - это уже второй вопрос.
9. user1292093 08.10.19 16:52 Сейчас в теме
(6)
Для Каждого Стр ИЗ Таблица Цикл

Сделал так, все то же
Зацикливания правда нет
10. nomad_irk 72 08.10.19 16:53 Сейчас в теме
(9) Отладчик - "в зубы" и разбираться, почему так происходит.
11. user1292093 08.10.19 16:56 Сейчас в теме
(10) ну, спасибо хоть за Стр)
12. user1292093 08.10.19 17:11 Сейчас в теме
(10) Я заметил что оно добавляет вместо "Кушнир Владимир СтепановиЧ" - "Кушнир Владимир СтепановИ"
Прикрепленные файлы:
13. user1292093 08.10.19 17:27 Сейчас в теме
Соотвественно, изменил длину Наименования и все работает)
Из-за того,что значени з "Ч" а в Справочнике нету "Ч" и оно постоянно добавляло.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот