Имя: Пароль:
1C
1С v8
Не могу написать правильно цикл.
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
Алиллуйа!!!

Вообще ТС - сегодня тебе повезло.
Не каждый день тут отвечают на такие вопросы.
Обычно книжки курить или типовые.