Здравствуйте!!!!
В данной БД хранится информация по телефонам.
Есть справочники: Пользователи,
Операторы,
Префиксы(владельцы: Справочник.Операторы),
Телефоны(владельцы: Справочник.Префиксы),
ФизическиеЛица,
ЦеновойПакет(владельцы: Справочник.Операторы),
Контракты,
Услуги.
Документ: ПотраченоНаРазговоры
Реквизиты: Контракт,
НомерТел,
ЦеновойПакет
ТабличныеЧасти:
Вызовы:
Реквизиты:
Звонок,
НомерВх_Исх,
Тариф,
ДатаВызова,
НачалоРазговора,
КонецРазговора,
Потрачено
Потрачено:
Реквизиты:
НаименованиеУслуги,
ЦенаУслуги.
Обработка(в которой я и прописываю код):
Файлик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 Тогда
Состояние("" + Й);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
________________________________________________________________________________________________