Имя: Пароль:
IT
 
Допустил ошибку не могу понять что не так
🠗 (PR 16.10.2011 17:26)
0 Blakangelos
 
16.10.11
16:48
ПОмогите исправить ошибку, я загружаю контрагентов и присваиваю им код из таблицы значений и добаляю в ког 1слева и записываю но у меня подвисает

Code----Функция КнопкаВыполнитьНажатие(Кнопка,МассивСтрок,Стр)
   НовыйЭлемент=Справочники.ФизическиеЛица;
   имяфайла="G:\5 Хлебов\5 ХЛЕБОВ ИСПРАВЛЕННЫЕ\Clients.csv";
   ЧтениеТХТФайла();
   мНаборЗаписейФИО  = РегистрыСведений.ФИОФизЛиц.СоздатьНаборЗаписей();
   Для Title=1 по ТаблицаДокумента.Количество() Цикл
     СпрФЛ=НовыйЭлемент.СоздатьЭлемент();
     ФИО=ТаблицаДокумента.Получить(Title).Получить(10);
     СпрФЛ.Наименование=ФИО;
         Фамилия  = ВыделитьСлово(ФИО);
       Имя      = ВыделитьСлово(ФИО);
       Отчество = ВыделитьСлово(ФИО);
   
   Для ID=1 по ТаблицаДокумента.Количество() Цикл
       СпрФЛ=НовыйЭлемент.СоздатьЭлемент();
       Код=ТаблицаДокумента.Получить(ID).Получить(1);
   Префикс=Лев(ID,"1");
   Префикс="1";
   Если  ID=10540 тогда прервать;
   СпрФЛ.Записать();
   строкафио=мНаборЗаписейФИО.Добавить();
   строкафио.ФизЛицо= СпрФЛ.Ссылка;
   строкафио.Фамилия= Фамилия;
   строкафио.Имя= Имя;
   строкафио.Отчество= Отчество;
   строкафио.период=ТекущаяДата();
       
   Если  Title=10540 тогда прервать;
   КонецЕсли;
КОнецЕсли;    
КонецЦикла;
   КонецЦикла;
  мНаборЗаписейФИО.Записать();

     
КонецФункции
1 Нуф-Нуф
 
16.10.11
16:51
что значит подвисает?
2 Blakangelos
 
16.10.11
16:51
что то выполняет не не останавливается
3 Blakangelos
 
16.10.11
16:51
пол часа ждал и не дождался
4 Blakangelos
 
16.10.11
16:53
как добавил что к контрагенту приписывался код тоесть ID после этого все и началось
6 PR
 
16.10.11
16:55
А, опять пришел бесполый ник :))
7 Темный Эльф
 
16.10.11
16:56
(3)Полчаса на сто миллионов итераций? Вы на главном сервере Пентагона работаете?
8 Blakangelos
 
16.10.11
16:57
Можно и так сказать , почему она виснит?
когда я добавил это  
  Для ID=1 по ТаблицаДокумента.Количество() Цикл
      СпрФЛ=НовыйЭлемент.СоздатьЭлемент();
      Код=ТаблицаДокумента.Получить(ID).Получить(1);
  Префикс=Лев(ID,"1");
  Префикс="1";
  Если  ID=10540 тогда прервать;
  СпрФЛ.Записать();

все начилось виснуть тоесть выполняет бесконечно
9 Злопчинский
 
16.10.11
16:58
прерывание цикла по
ID=10540 - это что за хрень..?
вставь отладочное Сообщить() в цикле на вывод ИД и радуйся жизни
.
двойной цикл - это шедевр, с таким подходом ппц что будет
10 Blakangelos
 
16.10.11
17:00
там всего 10540 документов
11 Злопчинский
 
16.10.11
17:00
(8) Прервать - выходишь из внутреннего цикла, а у тебя есть ещее внешний...
12 Злопчинский
 
16.10.11
17:01
(10) если всего 10540 документов
то тогда это условие вообще полная хрень
.
рецепт счасться - в (9)
13 Темный Эльф
 
16.10.11
17:01
(8)Ну как почему. У тебя двойной вложенный цикл по ТаблицаДокумента.Количество(), которое, как видно из кода, может достигать 10540. То есть количество итераций, как минимум 10540*10540=111091600
14 Blakangelos
 
16.10.11
17:01
А как мне их объеденить?
15 Blakangelos
 
16.10.11
17:02
Перем МассивСтрок;
Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
        // Отключение стандартной обработки
    СтандартнаяОбработка = Ложь;
   
    // Выбор файла Microsoft Excel
    ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ВыборФайла.Фильтр = "Документ Excel (*.txt)|*.txt";
    ВыборФайла.ПроверятьСуществованиеФайла = Истина;
    ВыборФайла.ПолноеИмяФайла = ИмяФайла;
    Выбор = ВыборФайла.Выбрать();
    Если НЕ Выбор Тогда
       
        Возврат;
       
    КонецЕсли;
   
    ИмяФайла = ВыборФайла.ВыбранныеФайлы[0];

КонецПроцедуры

Функция ВыделитьСлово(ИсходнаяСтрока)
   
   Буфер = СокрЛ(ИсходнаяСтрока);
   ПозицияПослПробела = Найти(Буфер, " ");

   Если ПозицияПослПробела = 0 Тогда
       ИсходнаяСтрока = "";
       Возврат Буфер;
   КонецЕсли;
   
   ВыделенноеСлово = СокрЛП(Лев(Буфер, ПозицияПослПробела));
   ИсходнаяСтрока = Сред(ИсходнаяСтрока, ПозицияПослПробела + 1);
   
   Возврат ВыделенноеСлово;
   
КонецФункции

Процедура ЧтениеТХТФайла()
   
   // Проверка на наличие имени файла
   Если ПустаяСтрока(ИмяФайла) Тогда
       Предупреждение("Для запуска обработки необходимо предварительно выбрать файл данных.");
       Возврат;
   КонецЕсли;
   
   // Открыть файл, создать текстовый документ, прочитать
   ПотокСтрок = ПолучитьПотокЧтенияСтрок(ИмяФайла);
   
   // Очистить предыдущие значения
   ТаблицаДокумента.Очистить();
   ТаблицаДокумента.Колонки.Очистить();
   
   // Создать колонки табличного документа
   ТаблицаДокумента.Колонки.Добавить("Номер",,"Номер",25);
   ТаблицаДокумента.Колонки.Добавить("ID",,"ID",25);
   ТаблицаДокумента.Колонки.Добавить("BankAddress",,"BankAddress",25);
   ТаблицаДокумента.Колонки.Добавить("BIC",,"BIC",25);
   ТаблицаДокумента.Колонки.Добавить("Ident",,"Ident",25);
   ТаблицаДокумента.Колонки.Добавить("INN",,"INN",25);
   ТаблицаДокумента.Колонки.Добавить("RecipClassId0",,"RecipClassId0",25);
   ТаблицаДокумента.Колонки.Добавить("RecipClassId1",,"RecipClassId1",25);
   ТаблицаДокумента.Колонки.Добавить("RecipClassId2",,"RecipClassId2",25);
   ТаблицаДокумента.Колонки.Добавить("KS",,"KS",25);
   ТаблицаДокумента.Колонки.Добавить("Title",,"Title",25);
   ТаблицаДокумента.Колонки.Добавить("Bank",,"Bank",25);
   ТаблицаДокумента.Колонки.Добавить("OKONH",,"OKONH",25);
   ТаблицаДокумента.Колонки.Добавить("OKPO",,"OKPO",25);
   ТаблицаДокумента.Колонки.Добавить("SupplClassId0",,"SupplClassId0",25);
   ТаблицаДокумента.Колонки.Добавить("SupplClassId1",,"SupplClassId1",25);
   ТаблицаДокумента.Колонки.Добавить("SupplClassId2",,"SupplClassId2",25);
   ТаблицаДокумента.Колонки.Добавить("RS",,"RS",25);
   ТаблицаДокумента.Колонки.Добавить("Passport",,"Passport",25);
   ТаблицаДокумента.Колонки.Добавить("Tel",,"Tel",25);
   ТаблицаДокумента.Колонки.Добавить("Fax",,"Fax",25);
   ТаблицаДокумента.Колонки.Добавить("FAddress",,"FAddress",40);
   ТаблицаДокумента.Колонки.Добавить("Address",,"Address",70);
   
   // Последовательное чтение строк текстового файла
   КоличествоСтрок = ПотокСтрок.КоличествоСтрок();
   Для Строка = 1 По КоличествоСтрок Цикл
               
       // Обработка нажатия Ctrl + Break
       ОбработкаПрерыванияПользователя();
       
       // Чтение строки из файла тхт / csv
       СтрокаИзФайла = ПотокСтрок.ПолучитьСтроку(Строка);
       
       // Разбор строки в массив, используя в качествен символа-разделителя "|"
       МассивСтрок = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаИзФайла,";");
       
       // Добавить данные в табличную часть экранной формы
       Стр=ТаблицаДокумента.Добавить();
       Стр.Номер                = Строка;
       Стр.ID                    = МассивСтрок[0];
       Стр.BankAddress            = МассивСтрок[1];
       СТр.BIC                    = МассивСтрок[2];
       Стр.Ident                = МассивСтрок[3];
       СТр.INN                    = МассивСтрок[4];
       СТр.RecipClassId0        = МассивСтрок[5];
       СТр.RecipClassId1        = МассивСтрок[6];
       СТр.RecipClassId2        = МассивСтрок[7];
       СТр.KS                    = МассивСтрок[8];
       СТр.Title                = МассивСтрок[9];
       СТр.Bank                = МассивСтрок[10];
       СТр.OKONH                = МассивСтрок[11];
       СТр.OKPO                = МассивСтрок[12];
       СТр.SupplClassId0        = МассивСтрок[13];
       СТр.SupplClassId1        = МассивСтрок[14];
       СТр.SupplClassId2        = МассивСтрок[15];
       СТр.RS                    = МассивСтрок[16];
       СТр.Passport            = МассивСтрок[17];
       СТр.Tel                    = МассивСтрок[18];
       СТр.Fax                    = МассивСтрок[19];
       СТр.FAddress            = МассивСтрок[20];
       СТр.Address                = МассивСтрок[21];
                       
       // Отобразить информацию о ходе выполнения обработки
       Состояние("Обработка строки файла : "
        + "строка " + Строка + " из " + КоличествоСтрок);
       
    КонецЦикла;
   
    // Отобразить результаты загрузки в форме элемента
    ЭлементыФормы.ТаблицаДокумента.Значение = ТаблицаДокумента;
    ЭлементыФормы.ТаблицаДокумента.СоздатьКолонки();
   
КонецПроцедуры // ЧтениеTXTФайла(Элемент)


// Функция "расщепляет" строку на подстроки, используя заданный
//        разделитель. Разделитель может иметь любую длину.
//        Если в качестве разделителя задан пробел, рядом стоящие пробелы
//        считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
//        игнорируются.
//        Например,
//        РазложитьСтрокуВМассивПодстрок(",ку,,,му", ",") возвратит массив значений из пяти элементов,
//        три из которых - пустые строки, а
//        РазложитьСтрокуВМассивПодстрок(" ку   му", " ") возвратит массив значений из двух элементов
//
//    Параметры:
//        Стр -            строка, которую необходимо разложить на подстроки.
//                        Параметр передается по значению.
//        Разделитель -    строка-разделитель, по умолчанию - запятая.
//
//
//    Возвращаемое значение:
//        массив значений, элементы которого - подстроки
//
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
   
   МассивСтрок = Новый Массив();
   Если Разделитель = " " Тогда
       Стр = СокрЛП(Стр);
       Пока Истина Цикл
           Поз = Найти(Стр,Разделитель);
           Если Поз=0 Тогда
               МассивСтрок.Добавить(Стр);
               Возврат МассивСтрок;
           КонецЕсли;
           МассивСтрок.Добавить(Лев(Стр,Поз-1));
           Стр = СокрЛ(Сред(Стр,Поз));
       КонецЦикла;
   Иначе
       ДлинаРазделителя = СтрДлина(Разделитель);
       Пока Истина Цикл
           Поз = Найти(Стр,Разделитель);
           Если Поз=0 Тогда
               МассивСтрок.Добавить(Стр);
               Возврат МассивСтрок;
           КонецЕсли;
           МассивСтрок.Добавить(Лев(Стр,Поз-1));
           Стр = Сред(Стр,Поз+ДлинаРазделителя);
       КонецЦикла;
   КонецЕсли;
   
КонецФункции // глРазложить

Функция ПолучитьПотокЧтенияСтрок(Файл)
   Попытка
       // Используется для доступа к параметрам файлов или каталогов.
       ТекстовыйФайл = Новый Файл(Файл);
       Если ТекстовыйФайл.Существует() = Ложь Тогда
           Сообщить("Файла "+Файл+" не существует!");
           Возврат Неопределено;
       КонецЕсли;
       // Текстовый документ предназначен для работы с текстами.
       // Объект позволяет получать и сохранять текст в файле,
       // работать со строками
       ПотокЧтенияСтрок = Новый ТекстовыйДокумент();
       ПотокЧтенияСтрок.Прочитать(Файл);
   Исключение
       Сообщить("Файл не прочитан.", СтатусСообщения.Внимание);
       Сообщить(ОписаниеОшибки());
       Возврат Неопределено;
   КонецПопытки;
   // Возвращает текст, извлеченный из файла
   Возврат ПотокЧтенияСтрок;
КонецФункции // ПолучитьПотокЧтенияСтрок
///////////////////////////
Функция КнопкаВыполнитьНажатие(Кнопка,МассивСтрок,Стр)
   НовыйЭлемент=Справочники.ФизическиеЛица;
   имяфайла="G:\5 Хлебов\5 ХЛЕБОВ ИСПРАВЛЕННЫЕ\Clients.csv";
   ЧтениеТХТФайла();
   мНаборЗаписейФИО  = РегистрыСведений.ФИОФизЛиц.СоздатьНаборЗаписей();
   Для Title=1 по ТаблицаДокумента.Количество() Цикл
     СпрФЛ=НовыйЭлемент.СоздатьЭлемент();
     ФИО=ТаблицаДокумента.Получить(Title).Получить(10);
     СпрФЛ.Наименование=ФИО;
         Фамилия  = ВыделитьСлово(ФИО);
       Имя      = ВыделитьСлово(ФИО);
       Отчество = ВыделитьСлово(ФИО);
   
   Для ID=1 по ТаблицаДокумента.Количество() Цикл
       СпрФЛ=НовыйЭлемент.СоздатьЭлемент();
       Код=ТаблицаДокумента.Получить(ID).Получить(1);
   Префикс=Лев(ID,"1");
   Префикс="1";
   Если  ID=10540 тогда прервать;
   СпрФЛ.Записать();
   строкафио=мНаборЗаписейФИО.Добавить();
   строкафио.ФизЛицо= СпрФЛ.Ссылка;
   строкафио.Фамилия= Фамилия;
   строкафио.Имя= Имя;
   строкафио.Отчество= Отчество;
   строкафио.период=ТекущаяДата();
       
   Если  Title=10540 тогда прервать;
   КонецЕсли;
КОнецЕсли;    
КонецЦикла;
   КонецЦикла;
  мНаборЗаписейФИО.Записать();

     
КонецФункции
16 Blakangelos
 
16.10.11
17:02
Вот кд программы кода он заканчивает то постоянно выдает ошибку если я не прерываю!
17 Злопчинский
 
16.10.11
17:02
(14) рецепт счасться В (9) _ СООБЩИТЬ
18 Blakangelos
 
16.10.11
17:03
Что то не могу понять зачем мне выводить данные?
19 Blakangelos
 
16.10.11
17:03
мне их записать надо
20 Злопчинский
 
16.10.11
17:04
(18) потому что дятел.. если не знаешь где циклит ПО ИМАТЕМАТИКЕ - может ГЛАЗАМИ увидешь, потом мозг включится...
21 Blakangelos
 
16.10.11
17:06
Слышь клоун я тебя оскорблял
22 Злопчинский
 
16.10.11
17:09
(21) а какой фиг тогда с тобой разговаривать если ты а) не делаешь что тебе советуют б) в программировании - практически ноль.
23 Темный Эльф
 
16.10.11
17:11
Функция КнопкаВыполнитьНажатие(Кнопка,МассивСтрок,Стр)
НовыйЭлемент=Справочники.ФизическиеЛица;
имяфайла="G:\5 Хлебов\5 ХЛЕБОВ ИСПРАВЛЕННЫЕ\Clients.csv";
ЧтениеТХТФайла();
мНаборЗаписейФИО  = РегистрыСведений.ФИОФизЛиц.СоздатьНаборЗаписей();
Для Title=1 по ТаблицаДокумента.Количество() Цикл
 СпрФЛ=НовыйЭлемент.СоздатьЭлемент();
 ФИО=ТаблицаДокумента.Получить(Title).Получить(10);
 СпрФЛ.Наименование=ФИО;
 Фамилия  = ВыделитьСлово(ФИО);
 Имя      = ВыделитьСлово(ФИО);
 Отчество = ВыделитьСлово(ФИО);
 ID=Title;    
 Код=ТаблицаДокумента.Получить(ID).Получить(1);
 Префикс=Лев(ID,"1");
 Префикс="1";
 СпрФЛ.Записать();
 строкафио=мНаборЗаписейФИО.Добавить();
 строкафио.ФизЛицо= СпрФЛ.Ссылка;
 строкафио.Фамилия= Фамилия;
 строкафио.Имя= Имя;
 строкафио.Отчество= Отчество;
 строкафио.период=ТекущаяДата();
 Если  Title=10540 тогда прервать;КонецЕсли;
КонецЦикла;
мНаборЗаписейФИО.Записать();
КонецФункции
24 Kookish
 
16.10.11
17:12
И все любят оскорбляться, прежде чем подумать и послушать.

Для Title=1 по ТаблицаДокумента.Количество() Цикл
  ...  
  Для ID=1 по ТаблицаДокумента.Количество() Цикл
     Если  ID=10540 тогда
        прервать;
        ...
        Если  Title=10540 тогда прервать;
        КонецЕсли;
     КОнецЕсли;    
  КонецЦикла;
КонецЦикла;

Вот это вот что такое? И кто после этого клоун?
Так понятнее?
25 Blakangelos
 
16.10.11
17:14
А как мне объеденить два цикла в один?
26 Blakangelos
 
16.10.11
17:15
написал я сообщить он мне коды показал все
27 Blakangelos
 
16.10.11
17:16
Функция КнопкаВыполнитьНажатие(Кнопка,МассивСтрок,Стр)
   НовыйЭлемент=Справочники.ФизическиеЛица;
   имяфайла="G:\5 Хлебов\5 ХЛЕБОВ ИСПРАВЛЕННЫЕ\Clients.csv";
   ЧтениеТХТФайла();
   мНаборЗаписейФИО  = РегистрыСведений.ФИОФизЛиц.СоздатьНаборЗаписей();
   Для Title,ID=1 по ТаблицаДокумента.Количество() Цикл
     СпрФЛ=НовыйЭлемент.СоздатьЭлемент();
     ФИО=ТаблицаДокумента.Получить(Title).Получить(10);
     СпрФЛ.Наименование=ФИО;
         Фамилия  = ВыделитьСлово(ФИО);
       Имя      = ВыделитьСлово(ФИО);
       Отчество = ВыделитьСлово(ФИО);
       
       СпрФЛ=НовыйЭлемент.СоздатьЭлемент();
       Код=ТаблицаДокумента.Получить(ID).Получить(1);
   Префикс=Лев(ID,"1");
   Префикс="1";
   СпрФЛ.Записать();
   строкафио=мНаборЗаписейФИО.Добавить();
   строкафио.ФизЛицо= СпрФЛ.Ссылка;
   строкафио.Фамилия= Фамилия;
   строкафио.Имя= Имя;
   строкафио.Отчество= Отчество;
   строкафио.период=ТекущаяДата();
       
   
   КонецЦикла;
  мНаборЗаписейФИО.Записать();
28 Blakangelos
 
16.10.11
17:16
всеравно что то не так идет где то промаргал
29 Blakangelos
 
16.10.11
17:17
не могу понять как сделать два цикла в одном?
30 Blakangelos
 
16.10.11
17:18
что никто подсказать не может?
31 Blakangelos
 
16.10.11
17:20
НАРОД
32 Kookish
 
16.10.11
17:20
Отладчик тебе все подскажет. Только сначала текст отформатируй - понятнее будет структура программы.
33 Blakangelos
 
16.10.11
17:22
он не помогает
34 Злопчинский
 
16.10.11
17:24
сделал (9)..?
35 Злопчинский
 
16.10.11
17:25
.. потому что сначала надо алгоритм ПРИДУМАТЬ, а потом - реализовать.. а то некоторые "дети" без опыта и знаний бросаются в экстремальное программирование...
36 Kookish
 
16.10.11
17:25
(35) Про табло ему только не говори, кучу лулзов пропустим.
37 Blakangelos
 
16.10.11
17:35
(34) сделал и ?
38 Blakangelos
 
16.10.11
17:39
АУ!!!!
39 Kookish
 
16.10.11
17:40
(37) Все, я больше не могу. Если отладчик тебе не помогает, то никто уже не поможет. Аминь.
40 Aloex
 
16.10.11
17:40
Фамилия  = ВыделитьСлово(ФИО);
      Имя      = ВыделитьСлово(ФИО);
      Отчество = ВыделитьСлово(ФИО);  тут точно ошибка одно и тоже значение возвращается.
41 Blakangelos
 
16.10.11
17:40
(39) ТЫ ХОЧЕШЬ ВСЕ И СРАЗУ такого не бывает! я же учусь
42 Blakangelos
 
16.10.11
17:41
(40) Вот там то все правильно!
43 Aloex
 
16.10.11
17:42
(42) как хочешь.
44 Kookish
 
16.10.11
17:43
(41) Ну так учись, а не требуй, чтобы за тебя разобрались в твоем же г-нокоде и в твоих данных. Начни с СП, отладчика и табло. ТАМ самые достоверные данные.
45 Blakangelos
 
16.10.11
17:44
как сделать чтобы у меня добавлялся Код и у кода 1 левое значение менялось на A. У меня что то есть но с ошибками :(
46 Blakangelos
 
16.10.11
17:45
(44) я не требую я прошу подсказать помочь
47 Злопчинский
 
16.10.11
17:57
(45) мы пока еще с зацикливанием вроде не разобрались...? или зацикливание - разобрался..?
48 Blakangelos
 
16.10.11
18:34
нет не разобрался :(
49 Kookish
 
16.10.11
18:47
TeamViewer есть?
50 untru
 
16.10.11
18:57
Или Ammyy ))))
51 untru
 
16.10.11
19:00
(13) +++    111091600 физ лиц в базе)) крута)

спасибо за пост, начинаю понимать что сам не безнадежен
52 Blakangelos
 
16.10.11
21:03
Кто может помочь исправить заклинивание?
53 Kookish
 
16.10.11
21:29
Мне это кажется, или он не читает то, что ему отвечают, что спрашивают?
54 Blakangelos
 
17.10.11
08:14
НАРОД КТО МОЖЕТ ПОМОЧЬ С ЗАЦИКЛИВАНИЕМ?