| 
			| 
					
						| bannndi 
								Гость
 | 
								|  | «  : 09-02-2009 08:07 »  |  | 
 
 Здравствуйте!
 Я учусь программировать в 8-ке, такой вопрос - нужно, что бы в данной процедуре отрабатывалась уникальность значений xls файла (по столбцу 1, к примеру), т.е. в справочник два раза не попадала одна и та жа позиция.
 Процедура ЗаполнитьСпрСервисЦентрыИзЭксельНажатие(Элемент)
 ConExcel=ПолучитьCOMОбъект("d:\Сервисы.xls");
 Спр=Справочники.СервисЦентры;
 i=2;
 Пока СтрДлина(ConExcel.Sheets("Сервисы").Cells(i,2).Value)>0 Цикл
 НовыйЭлемент=Спр.СоздатьЭлемент();
 z=ConExcel.Sheets("Сервисы").Cells(i,2).Value;
 НовыйЭлемент.Наименование=ConExcel.Sheets("Сервисы").Cells(i,2).Value;
 НовыйЭлемент.НомерСЦ=ConExcel.Sheets("Сервисы").Cells(i,1).Value;
 НовыйЭлемент.Записать();
 i=i+1;
 КонецЦикла;
 КонецПроцедуры
 Или, если есть более грамотное решение по заполнению справочников, тоже интересно узнать профессиональное мнение, спасибо!
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #1 : 10-02-2009 06:52 »  |  | 
 
 Попробуй так:Пока СтрДлина(ConExcel.Sheets("Сервисы").Cells(i,2).Value)>0 Цикл
 ПроверяемоеЗначение=ConExcel.Sheets("Сервисы").Cells(i,1).Value;
 Если Спр.Выбрать(,,Новый Структура("НомерСЦ",ПроверяемоеЗначение)).Следующий() Тогда Продолжить; КонецЕсли;
 НовыйЭлемент=Спр.СоздатьЭлемент();
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| bannndi 
								Гость
 | 
								|  | « Ответ #2 : 10-02-2009 17:33 »  |  | 
 
 Спасибо за ответ,Kivals! Чего-то ругнулась на (,,Новый Структура, где 2 запятые. Может там чего-то определить тоже надо..? (Процедура или функция с указанным именем не определена) Не, ошибку выдает другую {Справочник.СервисЦентры.Форма.ФормаСписка(8)}: Ошибка при вызове метода контекста (Выбрать): Недопустимое значение параметра (параметр номер "3")       Если Спр.Выбрать(,,Новый Структура("НомерСЦ",ПроверяемоеЗначение)).Следующий() Тогда Продолжить; Поставил признак индексации на реквизит НомерСЦ, так загрузка первый раз прошла, а во второй раз пошел бесконечный цикл,снял только через диспетчер задач. Пока ничего не придумал больше   |  
						| 
								|  |  
								| « Последнее редактирование: 10-02-2009 17:34 от Алексей1153++ » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #3 : 10-02-2009 22:29 »  |  | 
 
 Сори - такое часто бывает   бесконечный цикл из-за того, что я забыл прирастить индекс строки, потому мы крутимся в одной строке файла... Потому я стараюсь прирост писать в начале цикла:   i=2-1; // уменьшим на 1, чтобы в цикле увеличить Пока Истина Цикл // бесконечный цикл - прерываем по условию
 i=i+1;
 Если СтрДлина(ConExcel.Sheets("Сервисы").Cells(i,2).Value)<=0 Тогда Прервать; КонецЕсли; // заметь - условие обратное
       ПроверяемоеЗначение=ConExcel.Sheets("Сервисы").Cells(i,1).Value;       Если Спр.Выбрать(,,Новый Структура("НомерСЦ",ПроверяемоеЗначение)).Следующий() Тогда Продолжить; КонецЕсли;       НовыйЭлемент=Спр.СоздатьЭлемент(); |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| bannndi 
								Гость
 | 
								|  | « Ответ #4 : 11-02-2009 07:52 »  |  | 
 
 Kivals, спасибо, сейчас поиспытываю!Такая история произошла - заполнились все 999 строк пустыми значениями.Только 2 из 4-х значения занеслись из
 
 таблицы правильно)) Может не так чего-то сделал.
 Сейчас по другомуы делаю немного:
 ConExcel=ПолучитьCOMОбъект("d:\Сервисы.xls");
 Спр=Справочники.СервисЦентры;
 i=1;
 Пока Истина Цикл
 i=i+1;
 Если СтрДлина(ConExcel.Sheets("Сервисы").Cells(i,1).Value)=0 Тогда Прервать
 КонецЕсли;
 ПроверяемоеЗначение=ConExcel.Sheets("Сервисы").Cells(i,1).Value;
 Если Спр.Выбрать(,,Новый Структура("НомерСЦ",ПроверяемоеЗначение)).Следующий()
 Тогда Продолжить;
 КонецЕсли;
 НовыйЭлемент=Спр.СоздатьЭлемент();
 z=ConExcel.Sheets("Сервисы").Cells(i,2).Value;
 НовыйЭлемент.Наименование=ConExcel.Sheets("Сервисы").Cells(i,2).Value;
 НовыйЭлемент.НомерСЦ=ConExcel.Sheets("Сервисы").Cells(i,1).Value;
 НовыйЭлемент.Записать();
 КонецЦикла;
 Kivals, очень помог, спасибо!
 Один инкремент оказался лишним))
 Еще вопросик: не могу понять как сделать в том же цикле проверку и по второму полю, чтобы наименование если
 
 пустое, то не заносить в справочник?
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #5 : 11-02-2009 09:05 »  |  | 
 
 не могу понять как сделать в том же цикле проверку и по второму полю, чтобы наименование если пустое, то не заносить в справочник?Точно так же (тем же методом с использованием Продолжить):
 Если СтрДлина(ConExcel.Sheets("Сервисы").Cells(i,1).Value)=0 Тогда Прервать; КонецЕсли;
 Наименование=ConExcel.Sheets("Сервисы").Cells(i,2).Value;
 Если ПустаяСтрока(Наименование) Тогда Продолжить; КонецЕсли;
 ПроверяемоеЗначение=ConExcel.Sheets("Сервисы").Cells(i,1).Value;
 Если Спр.Выбрать(,,Новый Структура("НомерСЦ",ПроверяемоеЗначение)).Следующий()
 Тогда Продолжить;
 КонецЕсли;
 
 ПустаяСтрока в отличии от СтрДлина "не замечает" пробелов, т.е. если у тебя строка из одних пробелов, табуляций и переносов строк - то ПустаяСтрока() вернет Истина, а СтрДлина() - длину строки в символах (не ноль)
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| bannndi 
								Гость
 | 
								|  | « Ответ #6 : 11-02-2009 14:41 »  |  | 
 
    Наименование=ConExcel.Sheets("Сервисы").Cells("i,2").Value;Если ПустаяСтрока(Наименование) Тогда Продолжить;
 КонецЕсли;
 ПроверяемоеЗначение=ConExcel.Sheets("Сервисы").Cells(i,1).Value;
 Чего-то я так сделал, и выдала, вот блин)):
 {Справочник.СервисЦентры.Форма.ФормаСписка(10)}: Ошибка при вызове метода контекста (Cells): Произошла исключительная ситуация (0x80020005)
 Наименование=ConExcel.Sheets("Сервисы").Cells("i,2").Value;
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #7 : 11-02-2009 21:46 »  |  | 
 
 Cells("i,2") и Cells(i,2) - это разные ячейки   |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| bannndi 
								Гость
 | 
								|  | « Ответ #8 : 12-02-2009 06:24 »  |  | 
 
 Cells("i,2") и Cells(i,2) - это разные ячейки  )) Да, проглядел)). Таких наверно и не бывает как Cells("i,2") Все получилось,Kivals! Спасибо огромное!   Если не трудно, поясни пож-ста, что делает эта строка? z=ConExcel.Sheets("Сервисы").Cells(i,2).Value; |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| bannndi 
								Гость
 | 
								|  | « Ответ #9 : 12-02-2009 06:40 »  |  | 
 
 Я сейчас убрал эту строку, ничего не произошло плохого, видимо просто задается имя для значения Cells(i,2), но потом нигде не используется, ну ладно, разобрались))) |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #10 : 12-02-2009 12:15 »  |  | 
 
 Если не трудно, поясни пож-ста, что делает эта строка?z=ConExcel.Sheets("Сервисы").Cells(i,2).Value;
 Присваивает переменной z значение из ячейки колонки "B" (2-й по счету) строки i на листе Сервисы активной книги. Тип значения определяется типом значения в ячейке. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| bannndi 
								Гость
 | 
								|  | « Ответ #11 :  15-02-2009 11:04 »   |  | 
 
 Если не трудно, поясни пож-ста, что делает эта строка?z=ConExcel.Sheets("Сервисы").Cells(i,2).Value;
 Присваивает переменной z значение из ячейки колонки "B" (2-й по счету) строки i на листе Сервисы активной книги. Тип значения определяется типом значения в ячейке.Ну да, я почти так же сказал, Kivals)) Еще раз спасибо большое)) |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  |