&НаСервере
Процедура
ДобавитьТарифыИзТЗ(Знач ТЗ)
//===================================
//Структура колонок файла
[83.01.04с]
//===================================
//0 № ЛС
//1 Код услуги
//2 Код поставщика
//3 Период перерасчета
//4 Период начисления
//5 Код УК
//6 Тариф
//7 Расход
//8 Сумма перераcчета
текущее
//9 Сумма перераcчета
предыдущее
//10 Примечание
//11 Причина перераcчета
ЗаписаноСтрок
= 0;
Для ТекСтрока
= 0 По ТЗ.Количество() - 1 Цикл
//============================
//Строковые значения
колонок
//============================
стрЛС
= ТЗ[ТекСтрока].ЛС;
стрКодУслуги
= ТЗ[ТекСтрока].КодУслуги;
стрКодПоставщика
= ТЗ[ТекСтрока].КодПоставщика;
стрПериодНачисления
= ТЗ[ТекСтрока].ПериодНачисления;
стрКодУК
= ТЗ[ТекСтрока].КодУК;
стрТариф
= ТЗ[ТекСтрока].Тариф;
//====================
//Преобразуем данные
//====================
ссЛС
= ПолучитьСсылкуНаЛС(стрЛС);
ссПоставщикУслугРЦ
= ПолучитьСсылкуНаПоставщикаУслугРЦ(стрКодПоставщика);
ссУслугаРЦ
= ПолучитьСсылкуНаУслугуРЦ(стрКодУслуги);
дПериодНачисления
= НачалоМесяца(ПолучитьДатуИзСтроки(стрПериодНачисления));
чТариф
= Число(стрТариф);
//==========================
//Добавить запись в
регистр
//==========================
Если НЕ ЗначениеЗаполнено(ссЛС) ИЛИ
НЕ ЗначениеЗаполнено(дПериодНачисления) ИЛИ
НЕ ЗначениеЗаполнено(ссПоставщикУслугРЦ) ИЛИ
НЕ ЗначениеЗаполнено(ссУслугаРЦ) Тогда
ПРОДОЛЖИТЬ;
КонецЕсли;
НЗ = РегистрыСведений.УК_СостояниеРасчетов.СоздатьНаборЗаписей();
НЗ.Отбор.ЛС.Установить(ссЛС);
НЗ.Отбор.МесяцНачисления.Установить(дПериодНачисления);
НЗ.Отбор.ПоставщикРЦ.Установить(ссПоставщикУслугРЦ);
НЗ.Отбор.УслугаРЦ.Установить(ссУслугаРЦ);
НЗ.Прочитать();
Если НЗ.Количество() = 0 Тогда
ПРОДОЛЖИТЬ;
ИначеЕсли НЗ.Количество()
> 1 Тогда
СписокОшибок.ДобавитьСтроку("Проверить на дубли:
" + стрЛС + ", " + стрПериодНачисления + ", " + стрКодПоставщика + ", " + стрКодУслуги);
КонецЕсли;
Для Каждого Запись Из
НЗ Цикл
Если Запись.Тариф = чТариф Тогда
ПРОДОЛЖИТЬ;
Иначе
Запись.Тариф = чТариф;
КонецЕсли;
КонецЦикла;
Попытка
ЗаписаноСтрок = ЗаписаноСтрок +
1;
НЗ.Записать();
Исключение
СписокОшибок.ДобавитьСтроку("Ошибка записи строки:
" + ТекСтрока + " ЛС: " + стрЛС);
КонецПопытки;
КонецЦикла;//Цикл
по строкам Икселя
Сообщить("Обработано строк:
" + Строка(ТекСтрока - 2 + 1));
Сообщить("Записано строк:
" + ЗаписаноСтрок);
КонецПроцедуры//ДобавитьТарифыИзТЗ
&НаСервере
Функция Загрузить830104с_ИзВремФайлаВтз(ИмяВременногоФайла)
Текст = Новый ЧтениеТекста;
Текст.Открыть(ИмяВременногоФайла, КодировкаТекста.ANSI);
ТекСтрока
= Текст.ПрочитатьСтроку();
//Заголовки таблицы
Заголовки = "";
МассивСтроки
= СтрРазделить(ТекСтрока,
";");
Для Номер = 0 По МассивСтроки.Количество() - 1 Цикл
Заголовки = Заголовки + Номер +
" " + СокрЛП(МассивСтроки[Номер])
+ Символы.ПС;
Если МассивСтроки.Количество()
< 9 Тогда
Сообщить("Проверьте
загрузочный файл, должно быть 9 колонок, в этом - " + МассивСтроки.Количество());
Возврат Неопределено;
КонецЕсли;
КонецЦикла;
//===================================
//Структура колонок файла
[83.01.04с]
//===================================
//0 № ЛС
//1 Код услуги
//2 Код поставщика
//3 Период перерасчета
//4 Период начисления
//5 Код УК
//6 Тариф
//7 Расход
//8 Сумма перераcчета
текущее
//9 Сумма перераcчета
предыдущее
//10 Примечание
//11 Причина перераcчета
НомерСтроки
= 1;
тзТарифы
= Новый ТаблицаЗначений;//Коды поставщиков услуг
тзТарифы.Колонки.Добавить("ЛС");//0
тзТарифы.Колонки.Добавить("КодУслуги");//1
тзТарифы.Колонки.Добавить("КодПоставщика");//2
тзТарифы.Колонки.Добавить("ПериодНачисления");//4
тзТарифы.Колонки.Добавить("КодУК");//5
тзТарифы.Колонки.Добавить("Тариф");//6
Пока ТекСтрока
<> Неопределено Цикл
ТекСтрока
= Текст.ПрочитатьСтроку();
НомерСтроки
= НомерСтроки + 1;
МассивСтроки
= СтрРазделить(ТекСтрока,
";");
Если МассивСтроки.Количество() < 12 Тогда
Сообщить("Строка:
" + НомерСтроки + " - Число колонок в
строке: " + МассивСтроки.Количество());
ПРОДОЛЖИТЬ;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(МассивСтроки[0])
ИЛИ
НЕ ЗначениеЗаполнено(МассивСтроки[6]) Тогда
ПРОДОЛЖИТЬ;//Нет
смысла
КонецЕсли;
СтрокаТЗ
= тзТарифы.Добавить();
СтрокаТЗ.ЛС
= МассивСтроки[0];
СтрокаТЗ.КодУслуги
= МассивСтроки[1];
СтрокаТЗ.КодПоставщика
= МассивСтроки[2];
СтрокаТЗ.ПериодНачисления
= МассивСтроки[4];
СтрокаТЗ.КодУК
= МассивСтроки[5];
СтрокаТЗ.Тариф
= МассивСтроки[6];
КонецЦикла;
Если ЗначениеЗаполнено(тзТарифы) Тогда
Возврат тзТарифы;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции//Загрузить830104с_ИзВремФайлаВтз
Процедура
Загрузить830104с_НаСервере(Знач ДвоичныеДанныеФайла)
ИмяВремФайлаНаСервере
= ПолучитьИмяВременногоФайла("csv");
ДвоичныеДанныеФайла.Записать(ИмяВремФайлаНаСервере);
тзТарифы
= Загрузить830104с_ИзВремФайлаВтз(ИмяВремФайлаНаСервере);
Если ЗначениеЗаполнено(тзТарифы)
Тогда
ДобавитьТарифыИзТЗ(тзТарифы);
КонецЕсли;
УдалитьФайлы(ИмяВремФайлаНаСервере); //Удаляем
временный файл
КонецПроцедуры//Загрузить830104с_НаСервере
&НаКлиенте
Процедура
Чтение_830104с(Команда)
Если НЕ ЗначениеЗаполнено(ЭтотОбъект.Файл830104с)
Тогда
Возврат;
КонецЕсли;
//При переходе с клиента на сервер
//или имя файла Иксель не видно
//или имя временного файла другое
ВремяНачала
= ТекущаяДата();
СписокОшибок.Очистить();
дд
= Новый ДвоичныеДанные(ЭтотОбъект.Файл830104с);
Загрузить830104с_НаСервере(дд);
ВремяОкончания
= ТекущаяДата();
ЦелЧасов
= Цел((ВремяОкончания - ВремяНачала)/3600);
ЦелМинут = Цел((ВремяОкончания
- ВремяНачала)/60);
ДробМинут
= (ВремяОкончания - ВремяНачала)/60
- Цел((ВремяОкончания - ВремяНачала)/60);
ЦелСекунд
= Цел(ДробМинут *60);
Сообщить("Время загрузки:
" + ЦелЧасов + " ч. " + ЦелМинут + " мин. " + ЦелСекунд
+ " сек.");
КонецПроцедуры//Чтение_830104с
|