v8: Заполнить справочник из xls файла #388759


#0 by bannndi
Здравствуйте! Я учусь программировать в 8-ке, такой вопрос - нужно, что бы в данной процедуре отрабатывалась уникальность значений xls файла (по столбцу 1, к примеру), т.е. в справочник два раза не попадала одна и та жа позиция. КонецПроцедуры Или, если есть более грамотное решение по заполнению справочников, тоже интересно узнать профессиональное мнение, спасибо!!
#1 by zbv
загрузи все в ТЗ - сверни, а потом создавай.
#2 by bannndi
"загрузи все в ТЗ - сверни, а потом создавай" Дико извиняюсь, но не понял чего сверни, чего создавай )). Задача заполнить справочник в 1с 8 из xls, в котором есть 3 поля. В 1-м номера (сервисов). Так вот, надо, чтобы в справочник попадали значения из 1-го столбца, и при повторной загрузке не попадали в справочник, т.к. уже есть в нем. Плюс данные во 2-м и 3-м столбцах должны должны соответствовать номерам 1-го столбца, т.о. заносится в справочник весь 1-й столбец, и, если есть, то соответствующие данные по 2-му и 3-му столбцу. Такую обработку видел на 7-ке, может получится по аналогии сделать,
#3 by Feday
Тебе нужно проверить, есть ли уже элемент с таким реквизитом -> ищи элемент по реквизиту и создавай новый только если не нашел.
#4 by bannndi
НовыйЭлемент=Спр.СоздатьЭлемент; Пытаюсь такую вещь сделать, только ругается на параметр 3: {Справочник.СервисЦентры.Форма.ФормаСписка}: Ошибка при вызове метода контекста (Выбрать): Недопустимое значение параметра (параметр номер "3")        Если Спр.Выбрать(,,Новый Структура("НомерСЦ",ПроверяемоеЗначение)).Следующий Тогда Продолжить; Что-то упустил явно
#5 by Woldemar177
Валялась дома обработка - могу поискать
#6 by Просто Лёха
КонецПроцедуры
#7 by Просто Лёха
Это чо касается использования таблицы значений, немного дольше правда будет, зато проблем меньше
#8 by Feday
Смотри в отладчике, чему равно ПроверяемоеЗначение. Видимо, в нем косяк. И еще: "В качестве полей для отбора могут задаваться только поля "Код", "Наименование" и реквизиты справочника, для которых в конфигураторе признак индексирования установлен в значение "Индексировать" или в значение "Индексировать с доп. упорядоч."
#9 by Aprobator
Стандартная обработка "Загрузить данные из табличного документа". В ЗУПе она точно есть, в других конфигурациях вроде тоже.
#10 by Aprobator
Вернее "Загрузка данных из табличного документа". У нее неплохое описалово. Данные можно загружать из экселя, текстового файла, плюс дбф. Есть также встроенные обработчики событий - в них можно вставлять свой код. Описалово у обработки довольно приличное.
#11 by СноваЗдорова
Вроде как на ИТС лежит обработка "Заполнение документов и справочников из табличных частей"... простая и надежная до безобразия!
#12 by bannndi
Сначала поставил признак индексации для поля НомерСЦ, и обработка заполнила значениями справочник. Зато когда проверил второй раз- цикл снял через диспетчер задач только)) Woldemar177, если не трудно, было бы супер! (bannndi@gmail.com) Буду пробовать другие предложенные решения пока что, спасибо всем!)) СноваЗдорова, сейчас поищу))
#13 by bannndi
СноваЗдорова, глупый вопрос: ИТС, а сайт какой? google выдает мешанину, сейчас еще поищу))
#14 by Feday
Тебе осталось отладить - минуты три...)
#15 by bannndi
Feday, да я это понимаю, но пока что в тупике, не знаю что вызывает повторный бесконечный цикл))
#16 by Feday
Потому что ты забыл перед "Продолжить" увеличить инкремент, по которому значение получаешь (i = i + 1)
#17 by bannndi
Я может не туда вставляю i = i + 1, но выдает ошибку        ПроверяемоеЗначение=ConExcel.Sheets("Сервисы").Cells(i,1).Value;        Если Спр.Выбрать(,,Новый Структура("НомерСЦ",ПроверяемоеЗначение)).Следующий
#18 by bannndi
Просто Лёха, пока ничего не получается(( По нажатию на кнопке видно что процесс прошел, но ничего не записалось в справочник, видно мне чего-то дописать нужно здесь?: Конеццикла Я пока совсем начинающий, мне помощь и здесь нужна)) Спасибо!
#19 by Просто Лёха
КонецПроцедуры
#20 by Просто Лёха
Ошибочка, щас напищу
#21 by Просто Лёха
#22 by Просто Лёха
Вот как-то так
#23 by bannndi
Просто Лёха, спасибо большое, сейчас поиспытываю!))
#24 by bannndi
Если НайдЭлемент=Неопределено Тогда //такого элемента еще нет ,т.е. все равно элементы справочника дублируются, а так все супер!
#25 by 73
Может все же в справочнике искать дубли? А то каждый раз запуская, все добавляем и добавляем...
#26 by СноваЗдорова
Почту посмари
#27 by Просто Лёха
#28 by Просто Лёха
Если уникальность проверять в пределах справочника, тогда вот так, а если в пределах загружаемых значений тогда
#29 by Просто Лёха
Просто вот это "отрабатывалась уникальность значений xls файла (по столбцу 1, к примеру), т.е. в справочник два раза не попадала одна и та жа позиция" - я понял как уникальность именно загружаемых значений
#30 by bannndi
СноваЗдорова, спасибо большое, пока не разбирался, ошибку выдала! Просто Лёха, тоже спасибо, сейчас попроверяю у себя))
#31 by Feday
Опять будет бесконечный цикл.)
#32 by СноваЗдорова
еще раз проверь =))
#33 by Просто Лёха
Ну да пропсутил, бывает
#34 by bannndi
Просто Лёха, пишет Процедура или функция с указанным именем не определена (ЗначениеЗаполнено) Полностью вот текст:
#35 by Просто Лёха
Тогда вместо Если ЗначениеЗаполнено(НайдЭлемент) Тогда, Если НайдЭлемент <> Справочники.СервисЦентры.ПустаяСсылка
#36 by Просто Лёха
Если НайдЭлемент <> Справочники.СервисЦентры.ПустаяСсылка Тогда
#38 by bannndi
Просто Лёха, сделал так:           НайдЭлемент=Справочники.СервисЦентры.НайтиПоНаименованию(СокрЛП(НаимСервис),ИСТИНА);            Сообщить ("Элемент справочника "+СокрЛП(НаимСервис)+" уже существует в базе!"); Справочник заполнился, только пошел бесконечный цикл сообщения что первая строка xls уже существует)) Ц У, еще не проверял, обязательно посмотрю твой вариант,спасибо!
#39 by Просто Лёха
#40 by Просто Лёха
В этой проверке перед продолжить  i = i + 1, я просто пропустил
#41 by Просто Лёха
#42 by bannndi
Ц У, пока не понял как-куда вставить твой код ошибку выдает;) Пока код такой,слегка изменил: В принципе загрузка устраивает,спасибо всем!))
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С