|
Не могу написать правильно цикл. | ☑ | ||
---|---|---|---|---|
0
dred999
30.06.15
✎
14:35
|
Привет Всем есть задача. Грузить в УТ 11.1 Данные из екселя.
Сделал обработку но дойдя до первой строчки екселя она зацикливается и крутиться на месте. Не могу понять что такое. вот код: Excel = Новый COMОбъект("Excel.Application"); НашФайл = Excel.Workbooks.Open(ЭтотОбъект.ПутьФайл); Лист = НашФайл.WorkSheets(1); Строка = 3; ИД = Лист.Cells(Строка,1).Text; Имя = Лист.Cells(Строка,3).Text; Фамилия = Лист.Cells(Строка,4).Text; Покупатель = Имя+" "+Фамилия; Пока ЗначениеЗаполнено(ИД)=Истина Цикл //ищем ссылку на Клиента Запрос = Новый Запрос; Запрос.УстановитьПараметр("Покупатель", "%" + Покупатель + "%"); Запрос.Текст = "ВЫБРАТЬ |Партнеры.Ссылка, |Партнеры.Наименование |ИЗ |Справочник.Партнеры КАК Партнеры |ГДЕ |Партнеры.Наименование ПОДОБНО &Покупатель"; РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Сообщить("Валер, создан клиент" + Покупатель); _СпрПокупатель= Справочники.Партнеры.СоздатьЭлемент(); _СпрПокупатель.НаименованиеПолное = Покупатель; _СпрПокупатель.Наименование= Покупатель; _СпрПокупатель.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.ЧастноеЛицо; _СпрПокупатель.Клиент = Истина; Иначе Сообщить ("Клиент " + Покупатель + " уже есть" ); КонецЕсли; КонецЦикла; Excel.Application.Quit(); Циклится на 1-й строчке екселя а дальше не спускаеться хоть колонка ИД содержит значения. Помогите добрые люди |
|||
1
Fish
30.06.15
✎
14:36
|
(0) Так где у тебя цикл по строкам экселя?
|
|||
2
dred999
30.06.15
✎
14:39
|
(1) Пока ЗначениеЗаполнено(ИД)=Истина Цикл
|
|||
3
SirRoland
30.06.15
✎
14:39
|
Во-первых, ЗначениеЗаполнено(ИД)=Истина Это - фу, достаточно ЗначениеЗаполнено(ИД)
Во-вторых, ИД в цикле не меняется. "Отсюда и бесконечный цикл" |
|||
4
Fish
30.06.15
✎
14:39
|
(2) Нет. Это у тебя бесконечный цикл в случае, если в 3-й строке экселя есть ИД :))
|
|||
5
Ненавижу 1С
гуру
30.06.15
✎
14:40
|
у тебя условие
Пока ЗначениеЗаполнено(ИД)=Истина Цикл не изменяется в цикле следовательно цикл будет бесконечным |
|||
6
mTema32
30.06.15
✎
14:41
|
(0) "Сообщить("Валер, создан клиент..." - эта пять я считаю!)))
|
|||
7
piter3
30.06.15
✎
14:41
|
а нельзя по ИД сразу фильтр сделать,чтобы не обрабатывать в 1С
|
|||
8
palpetrovich
30.06.15
✎
14:41
|
а это не пять? )
Пока ЗначениеЗаполнено(ИД)=Истина Цикл Запрос = Новый Запрос; ... |
|||
9
dred999
30.06.15
✎
14:43
|
(7) Как правильно написать чтоб он шел дальше? Проверять ечть ли в следующей троке ИД
|
|||
10
dred999
30.06.15
✎
14:43
|
(7) Как правильно написать чтоб он шел дальше? Проверять есть ли в следующей строке ИД
|
|||
11
Fish
30.06.15
✎
14:43
|
(9) Правильно. А где ты это делаешь?
|
|||
12
samozvanec
30.06.15
✎
14:44
|
(0) вообще там область ячеек берется в комсейфэрей, а у него есть метод Выгрузить(), получается обычный массив, с которым очень удобно работать. а у тебя жесть какая-то. ну и счетчик ты не ++
|
|||
13
Ёпрст
30.06.15
✎
14:48
|
(0) ну так и пиши, цикл пока не конец файла или цикл от 1 до количества строк в файле..
|
|||
14
palpetrovich
30.06.15
✎
14:49
|
(10) так наверное
//Строка = 3; КоличествоСтрокЭкселе = Лист.Count - 1; Для Строка = 3 По КоличествоСтрокЭкселе Цикл ИД = Лист.Cells(Строка,1).Text; ... |
|||
15
Ёпрст
30.06.15
✎
14:49
|
а не ту ахинею, что у тебя в бесконечном цикле сейчас
|
|||
16
ejikbeznojek
30.06.15
✎
14:50
|
(10) мб так?
Excel = Новый COMОбъект("Excel.Application"); НашФайл = Excel.Workbooks.Open(ЭтотОбъект.ПутьФайл); Лист = НашФайл.WorkSheets(1); Для Строка = 3 по Лист.UsedRange.Rows.Count цикл ИД = Лист.Cells(Строка,1).Text; Имя = Лист.Cells(Строка,3).Text; Фамилия = Лист.Cells(Строка,4).Text; Покупатель = Имя+" "+Фамилия; Запрос = Новый Запрос; ... КонецЦикла |
|||
17
Timon1405
30.06.15
✎
14:50
|
намечается убийца Мега-прайса
|
|||
18
ejikbeznojek
30.06.15
✎
14:54
|
И не
Сообщить ("Клиент " + Покупатель + " уже есть" ); а Сообщить ("Валер, ты чего грузишь то??" + Покупатель + " уже есть" ); |
|||
19
dred999
30.06.15
✎
14:54
|
(18) ))
|
|||
20
dred999
30.06.15
✎
14:57
|
(16) Не работает
|
|||
21
ejikbeznojek
30.06.15
✎
15:05
|
(20)
Что именно? количество строк не определяется? Напиши временно 1000 и в цикле если Лист.Cells(Строка,1).Text="" тогда продолжить;конецесли; |
|||
22
palpetrovich
30.06.15
✎
15:06
|
(20) а так:
Лист = Книга.Worksheets(1).UsedRange; КоличествоСтрокЭкселе = Лист.Count - 1; Для Строка = 3 По КоличествоСтрокЭкселе Цикл |
|||
23
dred999
30.06.15
✎
15:11
|
(21) Как мне сказать чтоб он перескачил на другую сточку (проверить есть ли в ней данные и начал выполнять запрос)?
|
|||
24
ejikbeznojek
30.06.15
✎
15:13
|
(23)
ИД = Лист.Cells(Строка+1,1).Text; |
|||
25
ejikbeznojek
30.06.15
✎
15:18
|
(23)
Тебе то нужно чтобы менялась строчка в цикле вот тут ты перебираешь строчки с 3 по 1000 и если в 1й колонке пусто, ты её пропускаешь. В идеале бы не выполнять никаких, запросов в цикле...Но для начала, чтобы хоть в каком то виде работало, вставляешь в этот цикл свой запрос и т.д. Для Строка = 3 по 1000 цикл если Лист.Cells(Строка,1).Text="" тогда продолжить;конецесли; ИД = Лист.Cells(Строка,1).Text; Имя = Лист.Cells(Строка,3).Text; Фамилия = Лист.Cells(Строка,4).Text; конеццикла |
|||
26
palpetrovich
30.06.15
✎
15:21
|
(20) что-то не так делаешь, (16) - работает, проверил:
Excel = новый COMОбъект("Excel.Application"); Док = Excel.Workbooks.Open(ИмяФайла); Загрузка = Док.Worksheets(НомерЛиста).UsedRange; КонСтрока = Загрузка.Rows.Count; Для Стр = 3 По КонСтрока Цикл ОбработкаПрерыванияПользователя(); НоваяСтрока = ТЗ.Добавить(); НоваяСтрока.НомерСтроки = Стр; Наименование = Загрузка.Cells(Стр, 3).Text; КонецЦикла; ТЗ.выбратьстроку(); |
|||
27
ejikbeznojek
30.06.15
✎
15:23
|
(20) А ещё в твоём коде
_СпрПокупатель= Справочники.Партнеры.СоздатьЭлемент(); _СпрПокупатель.НаименованиеПолное = Покупатель; _СпрПокупатель.Наименование= Покупатель; _СпрПокупатель.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.ЧастноеЛицо; _СпрПокупатель.Клиент = Истина; Не хватает _СпрПокупатель.записать(); |
|||
28
dred999
30.06.15
✎
15:26
|
(27) Да это вижу.
|
|||
29
ХардHard
30.06.15
✎
15:27
|
(0) Еще совет : Если ищешь по наименованию, выгрузи запрос в ТЗ и пройди циклом по наименованиям всем.Удали пробелы , сделай Нрег(), удали всякие незначащие символы. По этой строке и ищи.
|
|||
30
dred999
30.06.15
✎
15:30
|
(29) Спасибо.
|
|||
31
depthzer0
30.06.15
✎
15:30
|
(23) ну дык занести код в цикл и увеличивать Строка
ИД = Лист.Cells(Строка,1).Text; Имя = Лист.Cells(Строка,3).Text; Фамилия = Лист.Cells(Строка,4).Text; Покупатель = Имя+" "+Фамилия; |
|||
32
ejikbeznojek
30.06.15
✎
15:32
|
(29) Это следующая стадия мастерства, от той что есть у ТС)))
Кроме того если Партнёров периодически создают руками, и между именем и фамилией не 1 пробел, а два, тогда результат запроса будет пустой) |
|||
33
dred999
30.06.15
✎
15:34
|
(31) Все нашел в чем проблемма ребят - сам торможу. Я не говорил коду что перед концом цикла Строка = Строка +1; Вот он и крутился по кругу!
|
|||
34
Fish
30.06.15
✎
15:34
|
(32) Так по-хорошему при записи надо двойные пробелы в ФИО убирать.
|
|||
35
dred999
30.06.15
✎
15:37
|
Но тут вот еще новый гим...й в екселе с покупателями есть столбец email и в справочнике куда я это вношу есть табличная часть "электронный адрес" вот как к ней обратиться....?
|
|||
36
ХардHard
30.06.15
✎
15:38
|
(35) РегистрСведений.КонтактнаяИнформация скорее всего.
|
|||
37
Fish
30.06.15
✎
15:40
|
(36) Сейчас по религии БСП кошерно Контактную информацию в ТЧ хранить.
|
|||
38
dred999
30.06.15
✎
15:41
|
(36) Хмм щас покопаю
|
|||
39
ХардHard
30.06.15
✎
15:45
|
(37) Ответил что первое на ум пришло %). УТ 11 под рукой нет.
|
|||
40
ukolabrother
30.06.15
✎
15:47
|
Сообщить("Валер, запросы в цикле это плохо!");
|
|||
41
ХардHard
30.06.15
✎
15:47
|
(40) Сообщить("Валер, прости что так долго !");
|
|||
42
dred999
30.06.15
✎
15:50
|
(41) )))
|
|||
43
hhhh
30.06.15
✎
15:52
|
(41) Сообщить("Валер, прости!!!");
|
|||
44
dred999
30.06.15
✎
15:52
|
(39) УТ 11 Последний релиз это нечто.... Просто волосы дыбом встают
|
|||
45
ukolabrother
30.06.15
✎
15:56
|
(44) Сообщить("Валер, это из-за меня у тебя волосы дыбом?");
|
|||
46
ДенисЧ
30.06.15
✎
15:57
|
||||
47
mTema32
30.06.15
✎
15:58
|
(44) В УТ 11 у справочника "Контрагенты" есть табличная часть "КонтактнаяИнформация", где есть реквизит АдресЭП. Вот туда и пиши данные экселя.
|
|||
48
dred999
30.06.15
✎
16:03
|
(46) ММдддаааа
|
|||
49
dred999
30.06.15
✎
16:07
|
(47) Я знаю что она там есть. но обратиться к АдресЭП не получается
пишу _СпрПокупатель.КонтактнаяИнформация.АдресЭП = Почта; Отвечает Поле объекта не обнаружено (АдресЭП) |
|||
50
Fish
30.06.15
✎
16:08
|
(49) Правильно. тк. Надо писать как-то так:
НоваяКИ = _СпрПокупатель.КонтактнаяИнформация.Добавить(); НоваяКИ.АдресЭП = Почта; |
|||
51
dred999
30.06.15
✎
16:08
|
(50) Ок
|
|||
52
dred999
30.06.15
✎
16:17
|
(50) Прописал, ошибки нет но почту не вставляет
|
|||
53
Одинесю
30.06.15
✎
16:18
|
(52) А записываешь?
|
|||
54
ХардHard
30.06.15
✎
16:18
|
(52) Обратись к специалисту.
|
|||
55
dred999
30.06.15
✎
16:21
|
(53) Да конечно записываю. В справочнике Партнеры фамилия имя загоняются, создается новый партнер, но электронкка ни как не записывается
|
|||
56
dred999
30.06.15
✎
16:22
|
(53)
_СпрПокупатель = Справочники.Партнеры.СоздатьЭлемент(); _СпрПокупатель.НаименованиеПолное = Покупатель; _СпрПокупатель.Наименование = Покупатель; _СпрПокупатель.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.ЧастноеЛицо; _СпрПокупатель.Клиент = Истина; _СпрПокупатель.ДатаРегистрации = ТекущаяДата(); Электронка = _СпрПокупатель.КонтактнаяИнформация.Добавить(); Электронка.АдресЭП = Почта; _СпрПокупатель.Записать(); |
|||
57
dred999
30.06.15
✎
16:23
|
Почта = Лист.Cells(Строка,5).Text;
|
|||
58
mTema32
30.06.15
✎
16:29
|
(52)
НоваяКИ = _СпрПокупатель.КонтактнаяИнформация.Добавить(); НоваяКИ.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; НоваяКИ.Вид = Справочники.ВидыКонтактнойИнформации.EmailПартнера; НоваяКИ.АдресЭП = Почта; |
|||
59
dred999
30.06.15
✎
16:37
|
(58) Пробую
|
|||
60
ukolabrother
30.06.15
✎
16:39
|
(59) Сообщить("Валера, твой выход");
|
|||
61
dred999
30.06.15
✎
16:40
|
(58) Нет. Не записывается
|
|||
62
hhhh
30.06.15
✎
16:45
|
чего пишет? валера, клиент уже есть?
|
|||
63
Fish
30.06.15
✎
16:47
|
(61) С контактной информацией в БСП всё не так просто. Посмотри, как в типовой форме записывается КИ.
|
|||
64
ejikbeznojek
30.06.15
✎
16:50
|
(63) Ты пошутил что-ли?)
Ты предлагаешь ТСу, который только начал разбираться в коде, разобраться как что-то происходит в УТ?) (61) Если доступ дашь, могу глянуть. |
|||
65
Fish
30.06.15
✎
16:51
|
(64) Ну когда-то надо начинать разбираться в работе типовых механизмов. И это имхо лучший способ.
|
|||
66
mTema32
30.06.15
✎
16:55
|
(61)
Короче: НоваяСтрокаКИ = ОбъектПартнер.КонтактнаяИнформация.Добавить(); НоваяСтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; НоваяСтрокаКИ.Вид = Справочники.ВидыКонтактнойИнформации.EmailПартнера; НоваяСтрокаКИ.Представление = ЭтаФорма[ИмяРеквизитаАдресЭП]; НоваяСтрокаКИ.ЗначенияПолей = КонтактнаяИнформацияСлужебный.ПарсингКонтактнойИнформацииXML(НоваяСтрокаКИ.Представление, НоваяСтрокаКИ.Вид); НоваяСтрокаКИ.АдресЭП = ЭтаФорма[ИмяРеквизитаАдресЭП]; Поз = Найти(ЭтаФорма[ИмяРеквизитаАдресЭП], "@"); Вместо непонятных конструкций вставь слово "Почта". |
|||
67
mTema32
30.06.15
✎
16:55
|
Кроме первых трех строчек конечно)
|
|||
68
mTema32
30.06.15
✎
16:56
|
Последняя строчка тебе тоже не нужна.
|
|||
69
dred999
30.06.15
✎
17:07
|
(66) Ого, вот теперь вообще ни чего не понял...
|
|||
70
dred999
30.06.15
✎
17:13
|
ААААААААААААААААААААА... УТТТТТТТТТТТТ.... Как же в справочник Партнеры записать электронную почтууууу...
|
|||
71
mTema32
30.06.15
✎
17:16
|
(69) Ппц!
НоваяСтрокаКИ = _СпрПокупатель.КонтактнаяИнформация.Добавить(); НоваяСтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; НоваяСтрокаКИ.Вид = Справочники.ВидыКонтактнойИнформации.EmailПартнера; НоваяСтрокаКИ.Представление = Почта; НоваяСтрокаКИ.ЗначенияПолей = Почта; НоваяСтрокаКИ.АдресЭП = Почта; |
|||
72
dred999
30.06.15
✎
17:30
|
(71) ВСЕ!!! Заработало!!! Спасибо!!! Ничего себе он куда запихивает это.... Жесть просто! Все спасибо!
|
|||
73
mTema32
30.06.15
✎
17:34
|
Алиллуйа!!!
Вообще ТС - сегодня тебе повезло. Не каждый день тут отвечают на такие вопросы. Обычно книжки курить или типовые. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |