Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с файлами!!!  (Прочитано 8001 раз)
0 Пользователей и 1 Гость смотрят эту тему.
CofRamGrad
Участник

ua
Offline Offline
Пол: Женский

« : 06-01-2010 08:16 » 

 Здесь была моя ладья...
Здравствуйте!!!!
Код:
В данной БД хранится информация по телефонам.
Есть справочники: Пользователи,
 Операторы,
 Префиксы(владельцы: Справочник.Операторы),
 Телефоны(владельцы: Справочник.Префиксы),
 ФизическиеЛица,
 ЦеновойПакет(владельцы: Справочник.Операторы),
 Контракты,
 Услуги.

Документ: ПотраченоНаРазговоры
Реквизиты: Контракт,
  НомерТел,
  ЦеновойПакет
ТабличныеЧасти:
Вызовы:
 Реквизиты:
Звонок,
НомерВх_Исх,
Тариф,
ДатаВызова,
НачалоРазговора,
КонецРазговора,
Потрачено
Потрачено:
  Реквизиты:
НаименованиеУслуги,
ЦенаУслуги.

Обработка(в которой я и прописываю код):
Файлик3_попытка
Реквизиты:
Оператор.
Регистр накопления:
Разговоры:
Измерения:
Телефон,
Услуга.
Ресурсы:
Потрачено.

Есть 3 файла, с которых мне надо перенести информацию в базу. Справочники заполнить получилось, а вот с документом траблы.
Эти файлы разделены на части словом "Контракт" и пустыми строками; в некоторых этих частях после пустой строки идет перечень
звонков, каждая строка в этом перечне начинается с ",,"; Эту инфу я пыталась занести в табличную часть Вызовы, так это приблизительно
выглядит:

_____________________________________________________________________________________

,,"Вхідні дзвінки  ","                  ",    80501111111,01.10.2009,  10:46:24,00:00:01,,0.00
,,"Вхідні дзвінки  ","                  ",    80502222222,01.10.2009,  10:47:27,00:03:29,,0.00
,,"Вхідні дзвінки  ","                  ",    80503333333,01.10.2009,  15:33:24,00:01:14,,0.00
,,"Вхідні дзвінки  ","                  ",    80504444444,01.10.2009,  15:44:44,00:00:20,,0.00
,,"Вхідні дзвінки  ","                  ",    80995555555,01.10.2009,  18:03:11,00:00:38,,0.00
,,"Вхідні дзвінки  ","                  ",    80506666666,01.10.2009,  18:06:11,00:00:35,,0.00
,,"Вихідні дзвінки ","Дзвінок на KиївСта",    80967777777,01.10.2009,  18:27:20,00:00:09,,0.24
,,"Вихідні дзвінки ","КорпМережаБазова  ", 97180508888888,01.10.2009,  18:47:30,00:00:20,,0.17
,,"Вхідні дзвінки  ","                  ",    80509999999,01.10.2009,  21:29:00,00:02:06,,0.00
,,"Вихідні дзвінки ","UMC               ",    80990000000,02.10.2009,  08:20:05,00:00:42,,0.36

_____________________________________________________________________________________

то, что я заношу в табличную часть Потрачено и заполняю реквизиты Контракт, НомерТел, ЦеновойПакет выглядит приблизительно так(в некоторых названиях используются запятые, скобки):

_____________________________________________________________________________________
Контракт № 0000000       Номер телефону: 507777777
Ціновий пакет: GSM 'Бізнес Ексклюзив'
ВАРТІСТЬ ПАКЕТА/ЩОМІСЯЧНА АБОНПЛАТА:,0.00,4.17,4.17
"ПОСЛУГИ, НАДАНІ ЗА МЕЖАМИ ПАКЕТА:",,,132.66
Название№1:,,,7.44
Название№2:,,,79.51
.......
Название№N:,,,0.00
........
СПЕЦІАЛЬНІ ПОСЛУГИ ,,,0.00
Загалом за контрактом:,,,136.83
_____________________________________________________________________________________

На каждый Контракт должен создаваться документ!!!!
Помогите!!! Спасибо!!!!

Это моя попытка:

Процедура КнопкаВыполнитьНажатие(Кнопка)
ИмяФайла1 = "C:\Documents and Settings\i_sikalyuk\Рабочий стол\UMC_invoice_5.27878.10_id_1167507_part_1.csv";
ИмяФайла2 = "C:\Documents and Settings\i_sikalyuk\Рабочий стол\UMC_invoice_5.27878.10_id_1167507_part_2.csv";
ИмяФайла3 = "C:\Documents and Settings\i_sikalyuk\Рабочий стол\UMC_invoice_5.27878.10_id_1167507_part_3.csv";
ИмяФайла4 = "C:\Documents and Settings\i_sikalyuk\Рабочий стол\еп.csv";

ТабДок1 = Новый ТекстовыйДокумент;
ТабДок2 = Новый ТекстовыйДокумент;
ТабДок3 = Новый ТекстовыйДокумент;
ТабДок4 = Новый ТекстовыйДокумент;

ТабДок1.Прочитать(ИмяФайла1);
ТабДок2.Прочитать(ИмяФайла2);
ТабДок3.Прочитать(ИмяФайла3);

МассОбщ  = новый массив;
МассТел = Новый Массив;
МассЦенПак = Новый Массив;
МассУслИмя = Новый Массив;

МассЦенаУслуги = Новый Массив;
МассУслИмя2 = Новый Массив;

МассВызовы = Новый Массив;
МассВхВых = Новый Массив;
МассТариф = Новый Массив;
МассТелВыз = Новый Массив;
МассДата = Новый Массив;
МассНачРазг = Новый Массив;
МассКонРазг = Новый Массив;
МассВызПотрачено = Новый Массив;
ттт = 1;

ТабДок4.УстановитьТекст(ТабДок1.ПолучитьТекст()+"
|"+ТабДок2.ПолучитьТекст()+"
|"+ТабДок3.ПолучитьТекст());

    Кол = ТабДок4.КоличествоСтрок();

Для Янь = 1 По Кол Цикл
Стр4 = ТабДок4.ПолучитьСтроку(Янь);
Если Найти(Стр4, "Контракт №") Тогда
МассОбщ.Добавить(Сред(Стр4,12,7));
МассТел.Добавить(Прав(Стр4,16));
КонецЕсли;
Если Найти(Стр4, "Ціновий пакет:") Тогда
МассЦенПак.Добавить(Сред(Стр4, 16));
КонецЕсли;
Если ПустаяСтрока(Стр4) Тогда                    
Продолжить;
КонецЕсли;
Если Янь%500 = 0 Тогда
Состояние("" + Янь + "/" + Кол);
КонецЕсли;
КонецЦикла;
Сообщить("цикл 1 прошел: занесли в массив № контракта, № телефона, ценовой пакет");

Для Янь = 45 По 140 Цикл
Стрст4 = ТабДок4.ПолучитьСтроку(Янь);
Пдт = Найти(Стрст4, ",");
Птт = Найти(Стрст4, ":");
Если Найти(Стрст4, ",") Тогда
Если Найти(стрст4, ":") Тогда
МассУслИмя.Добавить(Лев(Стрст4, Птт-1));
Иначе
МассУслИмя.Добавить(Лев(Стрст4, Пдт-1));
КонецЕсли;
КонецЕсли;
КонецЦикла;
Сообщить("цикл 2 прошел: занесли в массив наименования услуг");

Для Ш = 0 По МассУслИмя.Количество()-1 Цикл
НаимУслуги = МассУслИмя[Ш];
ЗапУслуги = Новый Запрос;
ЗапУслуги.Текст = "ВЫБРАТЬ
 | Услуги.Ссылка
 |ИЗ
 | Справочник.Услуги КАК Услуги
 |ГДЕ
 | Услуги.Наименование = &НаимУслуги";
ЗапУслуги.УстановитьПараметр("НаимУслуги", НаимУслуги);
ВыпУслуги = ЗапУслуги.Выполнить();
Если ВыпУслуги.Пустой() Тогда
НовыйУслуги = Справочники.Услуги.СоздатьЭлемент();
НовыйУслуги.Наименование = НаимУслуги;
НовыйУслуги.Записать();
КонецЕсли;
КонецЦикла;
Сообщить("цикл 3 прошел: заполнили справочник услуги");

/////////////////////////////Заполнение справочников///////////////////////////

ТабДок4.Показать(ИмяФайла4);

МассВсе = Новый Массив;
Для О = 0 По МассОбщ.Количество()-1 Цикл
МассВсе.Добавить(МассОбщ);
МассВсе.Добавить(МассТел);
МассВсе.Добавить(МассЦенПак);
КонКод = МассВсе[0][О];
ТелКод = МассВсе[1][О];
ИмяЦенПак = СокрЛП(МассВсе[2][О]);
ЗапКонт = Новый Запрос;
ЗапЦенПак = Новый Запрос;
ЗапЦенПак.Текст = "ВЫБРАТЬ
                 | ЦеновойПакет.Ссылка
                 |ИЗ
                 | Справочник.ЦеновойПакет КАК ЦеновойПакет
                 |ГДЕ
                 | ЦеновойПакет.Наименование = &ИмяЦенПак";
ЗапЦенПак.УстановитьПараметр("ИмяЦенПак", ИмяЦенПак);
ВыпЦенПак = ЗапЦенПак.Выполнить();
Если ВыпЦенПак.Пустой() Тогда
НовыйЦенПак = Справочники.ЦеновойПакет.СоздатьЭлемент();
НовыйЦенПак.Наименование = ИмяЦенПак;
НовыйЦенПак.Владелец = ЭтотОбъект.Оператор;
НовыйЦенПак.Записать();
ЦП=НовыйЦенПак.Ссылка;
Иначе
Рез = ВыпЦенПак.Выбрать();
Рез.Следующий();
ЦП = рез.Ссылка;
КонецЕсли;
ВладТел = Лев(ТелКод,2);
Запрос2 = Новый Запрос;
        Запрос2.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
               | Телефоны.ссылка КАК Код,
           | Телефоны.Владелец
               |ИЗ
               | Справочник.Телефоны КАК Телефоны
               |ГДЕ
               | Телефоны.Код = &ТелКод
               | И Телефоны.Владелец.Код = &Код";
        Запрос2.УстановитьПараметр("ТелКод", ТелКод);
Запрос2.УстановитьПараметр("Код", ВладТел);
Вып2 = Запрос2.Выполнить();
Если Вып2.Пустой() Тогда
НовыйТелКод = Справочники.Телефоны.СоздатьЭлемент();
ЗапросПреф = Новый Запрос;
ЗапросПреф.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
                  | Префиксы.Ссылка
                  |ИЗ
                  | Справочник.Префиксы КАК Префиксы
                  |ГДЕ
                  | Префиксы.Код = &Код";
ЗапросПреф.УстановитьПараметр("Код", ВладТел);
ВыпПреф=ЗапросПреф.Выполнить();
Если Не ВыпПреф.Пустой() Тогда
Вб = ВыпПреф.Выбрать();
Вб.Следующий();
Преф = вб.Ссылка;
Иначе
Преф = Справочники.Префиксы.СоздатьЭлемент();
преф.Код = ВладТел;
Преф.Владелец = ЭтотОбъект.Оператор;
Преф.Записать();
КонецЕсли;
НовыйТелКод.Владелец = Преф.Ссылка;
НовыйТелКод.Код = ТелКод;
НовыйТелКод.Записать();
Тел = НовыйТелКод.Ссылка;
Иначе
Рз = Вып2.Выбрать();
Рз.Следующий();
Тел = Рз.Код;
КонецЕсли;
ЗапКонт.Текст = "ВЫБРАТЬ
               | Контракты.Ссылка
               |ИЗ
               | Справочник.Контракты КАК Контракты
               |ГДЕ
| Контракты.Телефон = &Тел
               | И Контракты.Код = &КонКод";
ЗапКонт.УстановитьПараметр("Тел", Тел);
ЗапКонт.УстановитьПараметр("КонКод", КонКод);
ВыпКонт = ЗапКонт.Выполнить();
Если ВыпКонт.Пустой() Тогда
НовыйКонтракт = Справочники.Контракты.СоздатьЭлемент();
НовыйКонтракт.Код = КонКод;
НовыйКонтракт.Телефон = Тел;
НовыйКонтракт.Записать();
Иначе
Рз = ВыпКонт.Выбрать();
Рз.Следующий();
НовыйКонтракт = Рз.Ссылка.ПолучитьОбъект();
КонецЕсли;
НовыйКонтракт.ЦеновойПакет = ЦП;
НовыйКонтракт.Записать();
КонецЦикла;

Сообщить("цикл 4 прошел: заполнили остальные справочники");

////////////////////////////T,fyfz Ytdtlfyfz {eqyz///////////////////////////////////////////////////
    ОО = 0;
НачатьЗапись1 = Ложь;
НачатьЗапись11 = Ложь;
ЗаписьДок1 = Ложь;
ЗаписьДок2 = Ложь;
КолСт = Кол;
Для Сс = 1 По КолСт-1 Цикл
Стрст0 = ТабДок4.ПолучитьСтроку(Сс);
Стрст0 = СтрЗаменить(Стрст0,"""","");
Пдт0 = Найти(Стрст0, ",");
Птт0 = Найти(Стрст0, ":");
С1 = Лев(Стрст0,2);
Если Птт0 = 0 И НачатьЗапись1 Тогда
НачатьЗапись1 = Истина;
Стрст01 = Лев(Стрст0, Пдт0-1);
Стрст02 = Сред(Стрст0, Пдт0-1);
Иначе
Стрст01 = Лев(Стрст0, Птт0-1);
Стрст02 = Сред(Стрст0, Птт0+1);
КонецЕсли;

МассУслИмя2.Добавить(Стрст01);
Пр2 = Прав(Стрст02,5);
Пр3 = Прав(Стрст02,6);

Если НачатьЗапись1 = Истина Тогда//ок
ЗаписьДок1 = Истина;
Если Найти(Пр3, ",") Тогда  
Если Найти(Пр2, ",") Тогда
МассЦенаУслуги.Добавить(Прав(Стрст02,4));
Иначе
МассЦенаУслуги.Добавить(Прав(Стрст02,5));
КонецЕсли;
Иначе
МассЦенаУслуги.Добавить(Прав(Стрст02,6));
КонецЕсли;
КонецЕсли;

////////////Yflt;lf ;bdf b ,eltn ;bnm!!!!///////////////

Если ЗаписьДок1 = Истина Тогда
Док = Документы.ПотраченоНаРазговоры.СоздатьДокумент();
Док.Дата = ТекущаяДата();
Док.Контракт = МассОбщ[ОО];
Сообщить("Контракт" + Док.Контракт);
Док.НомерТел = МассТел[ОО];
Сообщить("НомерТел" + Док.НомерТел);
Док.ЦеновойПакет = МассЦенПак[ОО];
Сообщить("ЦеновойПакет" + Док.ЦеновойПакет);
Для жесть = 1 По МассЦенаУслуги.Количество()-1 Цикл
Стр1 = Док.Потрачено.Добавить();
стр1.ЦенаУслуги = МассЦенаУслуги[жесть];
стр1.НаименованиеУслуги = МассУслИмя2[жесть];
Сообщить("Ну... где-то вот... МассЦенаУслуги[жесть]" + МассЦенаУслуги[жесть], СтатусСообщения.Внимание);
Сообщить("Ну... где-то вот... МассУслИмя2[жесть]" + МассУслИмя2[жесть], СтатусСообщения.Внимание);
КонецЦикла;

Если НачатьЗапись11 = Истина Тогда
СтрВызов = Док.Вызовы.Добавить();
СтрВызов.Звонок = МассВызовы.Получить(2);
Сообщить("стрВызов.Звонок --> " + СтрВызов.Звонок);
СтрВызов.Тариф = МассВызовы.Получить(3);
Сообщить("стрВызов.Тариф --> " + СтрВызов.Тариф);
СтрВызов.НомерВх_Исх = МассВызовы.Получить(4);
Сообщить("стрВызов.НомерВх_Исх --> " + СтрВызов.НомерВх_Исх);
СтрВызов.ДатаВызова = МассВызовы.Получить(5);
Сообщить("стрВызов.ДатаВызова --> " + СтрВызов.ДатаВызова);
СтрВызов.НачалоРазговора = МассВызовы.Получить(6);
Сообщить("стрВызов.НачалоРазговора --> " + СтрВызов.НачалоРазговора);
СтрВызов.КонецРазговора = МассВызовы.Получить(7);
Сообщить("стрВызов.КонецРазговора --> " + СтрВызов.КонецРазговора);
СтрВызов.Потрачено = МассВызовы.Получить(9);
Сообщить("стрВызов.Потрачено --> " + СтрВызов.Потрачено);
КонецЕсли;
Попытка                              
Док.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Предупреждение("Невозможно провести документ.
|"+ОписаниеОшибки());
КонецПопытки;
ОО = ОО + 1;
КонецЕсли;
////////////////////////////////////////////////////////

Если ((Найти(стрст0, "Ціновий пакет")) И (НачатьЗапись1 = Ложь)) Тогда  //Не камельфо
НачатьЗапись1 = Истина;
КонецЕсли;
              
Если ((НачатьЗапись1 = Истина) И  ((ПустаяСтрока(стрст0)) Или (Найти(с1, ",,")) Или (Найти(Стрст0,"СПЕЦІАЛЬНІ ПОСЛУГИ")))) Тогда
НачатьЗапись1 = Ложь;
ЗаписьДок1 = Ложь;
МассЦенаУслуги.Очистить();
МассУслИмя2.Очистить();
КонецЕсли;

Если (Найти(С1, ",,")) Тогда
НачатьЗапись11 = Истина;
Сообщить("4" + НачатьЗапись11);
КонецЕсли;

Если НачатьЗапись11 = Истина Тогда
 Сообщить("1" + НачатьЗапись11);
Для Ччч = 1 По 9 Цикл
Зп1с1_1 = Найти(Стрст0, ",");
МассВызовы.Добавить(Лев(Стрст0, Зп1с1_1-1));
КонецЦикла;
МассВызовы.Добавить(Прав(Стрст0,Зп1с1_1+1));
КонецЕсли;

Если ((НачатьЗапись11 = Истина) И (ПустаяСтрока(стрст0))) Тогда
НачатьЗапись11 = Ложь;
МассВызовы.Очистить();
Сообщить("5" + НачатьЗапись11);
КонецЕсли;

///////////////////////////////////////////////////////////////

хд = ттт;
ттт = хд + 1;
Сообщить(ттт, СтатусСообщения.Информация);
Если ттт = 2000 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Сообщить("цикл 5 прошел: должен создатся документ на каждый контракт");
КонецПроцедуры

Процедура ФайлыНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
ЭлементыФормы.Файлы.СписокВыбора.Очистить();
Для Каждого Мет Из Справочники Цикл
ЭлементыФормы.Файлы.СписокВыбора.Добавить(Сред(Мет,Найти(Мет,".")+1));
КонецЦикла;
КонецПроцедуры

Процедура Кнопка1Нажатие(Элемент)
Сп = Справочники[Файлы].Выбрать();
Й = 0;
Пока Сп.Следующий() Цикл
Сп.ПолучитьОбъект().Удалить();
Й = Й + 1;
Если Й%50 = 0 Тогда
Состояние("" + Й);
КонецЕсли;
КонецЦикла;
КонецПроцедуры

________________________________________________________________________________________________
« Последнее редактирование: 06-01-2010 12:49 от Алексей1153++ » Записан

Драаааааааааааасти!!! Улыбаюсь
CofRamGrad
Участник

ua
Offline Offline
Пол: Женский

« Ответ #1 : 06-01-2010 12:59 » 

 :insane:Ну.. помогите, пожалуйста Скромно так...
Записан

Драаааааааааааасти!!! Улыбаюсь
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 06-01-2010 13:28 » 

CofRamGrad, по имей терпение - праздники же Улыбаюсь
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CofRamGrad
Участник

ua
Offline Offline
Пол: Женский

« Ответ #3 : 06-01-2010 13:36 » new

 ;)С праздниками всех!!!!!! Люблю!
Записан

Драаааааааааааасти!!! Улыбаюсь
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines