1. user1292093 08.10.19 16:18 Сейчас в теме

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

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

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

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


вместо

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

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

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


вместо

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

Сделал так, все то же
Зацикливания правда нет
10. nomad_irk 40 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 Сейчас в теме
Соотвественно, изменил длину Наименования и все работает)
Из-за того,что значени з "Ч" а в Справочнике нету "Ч" и оно постоянно добавляло.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Технический лидер, архитектор 1С, руководитель проектов
Санкт-Петербург
зарплата от 150 000 руб.
Полный день

Консультант-аналитик 1С
Набережные Челны
зарплата до 90 000 руб.
Полный день

Программист 1С
Набережные Челны
зарплата от 40 000 руб. до 110 000 руб.
Полный день

Программист 1С
Казань
зарплата от 40 000 руб. до 110 000 руб.
Полный день

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству