|
Допустил ошибку не могу понять что не так 🠗 (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
|
НАРОД КТО МОЖЕТ ПОМОЧЬ С ЗАЦИКЛИВАНИЕМ?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |