Имя: Пароль:
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
Алиллуйа!!!

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