sonik25
15.08.2014, 12:07
Заменил вывод в макет добавлением сначала в массив для анализа и суммирования повторов:
МассивНомерПрин.Добавить(Н омерПрин);
МассивСуммаПрин.Добавить(С уммаПрин);
// Оплата.Параметры.НомерПрин =НомерПрин;
// Оплата.Параметры.СуммаПрин =СуммаПрин;
//Проходим по всем строчкам отчета
Для Н2 = 0 по МассивНомерАбонента.Колич� �ство()-1 Цикл
НомерПрин="";
НомерНеПрин="";
Оплата.Параметры.НомерПрин ="";
Оплата.Параметры.НомерНеПр ин ="";
Оплата.Параметры.СуммаПрин ="";
Оплата.Параметры.СуммаНеПр ин="";
//////////////////////////////////////////////////////////////
//Проверяем последний ли номер в списке номеров и последняя ли строчка с этим номером или по этому номеру будут еще начисления
Если Н2<>0 Тогда
Если МассивНомерАбонента[Н2]<>МассивНомерАбонента[Н2-1] ТогдаВладелецНомера.Парам� �тры.НомерВладельца=Массив� �омерАбонента[Н2];
///Сравниваем номера с ФИО владельца и выводим совпадения
Для НВ = 0 по МассивНВладелец.Количеств� �()-1 Цикл
Если МассивНомерАбонента[Н2]=МассивНВладелец[НВ]Тогда
Владелец=МассивВладелец[НВ];
КонецЕсли;
КонецЦикла;ВладелецНомера. Параметры.Владелец=Владеле ц;
Владелец="";
//////////////////////////////////////////////////////////
Табдок.Вывести(ВладелецНом ера);
Иначе
КонецЕсли;ИначеВладелецНо� �ера.Параметры.НомерВладел� �ца=МассивНомерАбонента[Н2];
///Сравниваем номера с ФИО владельца и выводим совпадения
Для НВ = 0 по МассивНВладелец.Количеств� �()-1 Цикл
Если МассивНомерАбонента[Н2]=МассивНВладелец[НВ]Тогда
Владелец=МассивВладелец[НВ];
КонецЕсли;
КонецЦикла;ВладелецНомера. Параметры.Владелец=Владеле ц;
Владелец="";
Табдок.Вывести(ВладелецНом ера);
КонецЕсли;
//Проверяем платный номер или бесплатный
Для Н = 0 по массивбесплатные.Количест� �о()-1 Цикл
Если МассивОписаниедействия[Н2]="Входящие" тогда
Если МассивИнициаторЗвонка[Н2]=массивбесплатные[Н] тогда
НомерПрин=МассивИнициатор� �вонка[Н2];
СуммаПрин=МассивРазмерНач� �слений[Н2];
НомерНеПрин="";
СуммаНеПрин=0;
Иначе
Если НомерПрин="" тогдаНомерНеПрин=МассивИн� �циаторЗвонка[Н2];
СуммаНеПрин=МассивРазмерН� �числений[Н2];
НомерПрин=""; //*
СуммаПрин=0; //*
КонецЕсли;
// Сообщить("Платный");
Конецесли;
ИначеЕсли МассивОписаниедействия[Н2]="" ТогдаНомерПрин="Покупка контента";
СуммаПрин=МассивРазмерНач� �слений[Н2];
НомерНеПрин=""; //*
СуммаНеПрин=0; //*
Иначе
Если МассивПринимающийНомер[Н2]=массивбесплатные[Н] тогда
НомерПрин=МассивПринимающ� �йНомер[Н2];
СуммаПрин=МассивРазмерНач� �слений[Н2];
НомерНеПрин="";
СуммаНеПрин=0;
Иначе
Если НомерПрин="" тогда
НомерНеПрин=МассивПринима� �щийНомер[Н2];
СуммаНеПрин=МассивРазмерН� �числений[Н2];
НомерПрин="";
СуммаПрин=0;
Конецесли;
// Сообщить("Платный");
Конецесли;
КонецЕсли;
КонецЦикла;
Если Число(СуммаПрин)<>0 Тогда МассивНомерПрин.Добавить(Н омерПрин);
МассивСуммаПрин.Добавить(С уммаПрин);
// Оплата.Параметры.НомерПрин =НомерПрин;
// Оплата.Параметры.СуммаПрин =СуммаПрин;
КонецЕсли;
// КонецЕсли;
Если Число(СуммаНеПрин)<>0 Тогда
МассивНомерНеПрин.Добавит� �(НомерНеПрин);
МассивСуммаНеПрин.Добавит� �(СуммаНеПрин);
// Оплата.Параметры.НомерНеПр ин=НомерНеПрин;
//Оплата.Параметры.СуммаНеПр ин=СуммаНеПрин;
КонецЕсли;
////////////////////////////////////////////////////////////////////////
//Группируем значения массива бесплатных номеров по номерам
Если Н2<>МассивНомерАбонента.Колич� �ство()-1 тогда
Если МассивНомерАбонента[Н2]<>МассивНомерАбонента[Н2+1] Тогда
ТекущийИндекс = 0;
ВсегоЭлементов = МассивНомерПрин.Количеств� �();
Пока ТекущийИндекс < ВсегоЭлементовЦикл
Индекс2 = ТекущийИндекс + 1;
Пока Индекс2 < ВсегоЭлементовЦикл
Если МассивНомерПрин[Индекс2] = МассивНомерПрин[ТекущийИндекс] Тогда МассивН=Число(МассивСуммаП рин[Индекс2])+Число(МассивСуммаПрин[ТекущийИндекс]);
МассивСуммаПрин[ТекущийИндекс]=МассивН;
МассивНомерПрин.Удалить(Ин декс2);
МассивСуммаПрин.Удалить(Ин декс2);
ВсегоЭлементов = ВсегоЭлементов - 1;
Иначе
Индекс2 = Индекс2 + 1;
КонецЕсли;
КонецЦикла; ТекущийИндекс = ТекущийИндекс + 1;
КонецЦикла;
КонецЕсли;КонецЕсли;
///////////////////////////////////////////////////////////////////////////////
//Группируем значения массива платных номеров по номерам
Если Н2<>МассивНомерАбонента.Колич� �ство()-1 тогда
Если МассивНомерАбонента[Н2]<>МассивНомерАбонента[Н2+1] Тогда
ТекущийИндекс = 0;
ВсегоЭлементов = МассивНомерНеПрин.Количес� �во();
Пока ТекущийИндекс < ВсегоЭлементовЦикл
Индекс2 = ТекущийИндекс + 1;
Пока Индекс2 < ВсегоЭлементовЦикл
Если МассивНомерНеПрин[Индекс2] = МассивНомерНеПрин[ТекущийИндекс] Тогда МассивН=Число(МассивСуммаН еПрин[Индекс2])+Число(МассивСуммаНеПрин[ТекущийИндекс]);
МассивСуммаНеПрин[ТекущийИндекс]=МассивН;
МассивНомерНеПрин.Удалить( Индекс2);
МассивСуммаНеПрин.Удалить( Индекс2);
ВсегоЭлементов = ВсегоЭлементов - 1;
Иначе
Индекс2 = Индекс2 + 1;
КонецЕсли;
КонецЦикла; ТекущийИндекс = ТекущийИндекс + 1;
КонецЦикла;
КонецЕсли;КонецЕсли;
////////////////////////////////////////////////////////////////////////
Если Н2<>МассивНомерАбонента.Колич� �ство()-1 тогда
Если МассивНомерАбонента[Н2]<>МассивНомерАбонента[Н2+1] Тогда
Для Н10=0 по МассивНомерПрин.Количеств� �()-1 цикл
Если Число(СуммаПрин)<>0 Тогда
Оплата.Параметры.НомерПрин =МассивНомерПрин[Н10];
Оплата.Параметры.СуммаПрин =МассивСуммаПрин[Н10];
//чистка
Оплата.Параметры.НомерНеПр ин="";
Оплата.Параметры.СуммаНеПр ин=0;
Табдок.Вывести(Оплата);
Сообщить(МассивНомерПрин[Н10]);
КонецЕсли;
конеццикла;Для Н10=0 по МассивНомерНеПрин.Количес� �во()-1 цикл
Если Число(СуммаНеПрин)<>0 Тогда
Оплата.Параметры.НомерНеПр ин=МассивНомерНеПрин[Н10];
Оплата.Параметры.СуммаНеПр ин=МассивСуммаНеПрин[Н10];
//чистка
Оплата.Параметры.НомерПрин ="";
Оплата.Параметры.СуммаПрин =0;
Табдок.Вывести(Оплата);
КонецЕсли;
конеццикла;
МассивНомерПрин.Очистить();
МассивСуммаПрин.Очистить();
МассивНомерНеПрин.Очистит� �();
МассивСуммаНеПрин.Очистит� �();
КонецЕсли;
КонецЕсли;////////////////////////////////////////////////////
Если СуммаПрин<>неопределено Тогда
ИтогоПрин=ИтогоПрин2+Сумма� �рин;
ИтогоПрин2=ИтогоПрин;
ИтогоПрин4=ИтогоПрин3+Сумма Прин;
ИтогоПрин3=ИтогоПрин4;
КонецЕсли;
ИтогоНеПрин=ИтогоНеПрин2+С� �ммаНеПрин;
ИтогоНеПрин2=ИтогоНеПрин;
ИтогоНеПрин4=ИтогоНеПрин3+С уммаНеПрин;
ИтогоНеПрин3=ИтогоНеПрин4;
Если Н2<>0 Тогда
Если Н2<>МассивНомерАбонента.Колич� �ство()-1 тогдаЕсли МассивНомерАбонента[Н2]<>МассивНомерАбонента[Н2-1] Тогда
Если МассивНомерАбонента[Н2]<>МассивНомерАбонента[Н2+1] Тогда
ИтогоПрин2=0;
ИтогоНеПрин2=0;
КонецЕсли;
ИначеЕсли МассивНомерАбонента[Н2]<>МассивНомерАбонента[Н2+1] Тогда
ИтогоПрин2=0;
ИтогоНеПрин2=0;
КонецЕсли;
КонецЕсли; КонецЕсли;КонецЕсли;
НомерПрин="";
СуммаПрин=0;
НомерНеПрин="";
СуммаНеПрин=0;
//////////////////////////////////////////////////////////////////
Если ИтогоПрин<>неопределено Тогда
Итоги.Параметры.ИтогоПрин=� �тогоПрин;
Итоги.Параметры.ИтогоНеПри н=ИтогоНеПрин;
Итоги.Параметры.НДСПрин=ок� �(ИтогоПрин/100*18,2);
Итоги.Параметры.НДСНеПрин=� �кр(ИтогоНеПрин/100*18,2);
Итоги.Параметры.ИтогоСНДСП рин=окр(ИтогоПрин+ИтогоПри� �/100*18,2);
Итоги.Параметры.ИтогоСНДСН еПрин=окр(ИтогоНеПрин+Итог� �НеПрин/100*18,2);
КонецЕсли;
/////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
//Проверяем последний ли номер в списке номеров и последняя ли строчка с этим номером или по этому номеру будут еще начисления
/// И подводит итоги по суммам по каждому номеру
Если Н2<>0 Тогда
Если Н2<>МассивНомерАбонента.Колич� �ство()-1 тогдаЕсли МассивНомерАбонента[Н2]<>МассивНомерАбонента[Н2+1] ТогдаТабдок.Вывести(Итоги);
Иначе
КонецЕсли;ИначеТабдок.Выве сти(Итоги);
КонецЕсли;
КонецЕсли;КонецЦикла;
МассивНомерПрин.Добавить(Н омерПрин);
МассивСуммаПрин.Добавить(С уммаПрин);
// Оплата.Параметры.НомерПрин =НомерПрин;
// Оплата.Параметры.СуммаПрин =СуммаПрин;
//Проходим по всем строчкам отчета
Для Н2 = 0 по МассивНомерАбонента.Колич� �ство()-1 Цикл
НомерПрин="";
НомерНеПрин="";
Оплата.Параметры.НомерПрин ="";
Оплата.Параметры.НомерНеПр ин ="";
Оплата.Параметры.СуммаПрин ="";
Оплата.Параметры.СуммаНеПр ин="";
//////////////////////////////////////////////////////////////
//Проверяем последний ли номер в списке номеров и последняя ли строчка с этим номером или по этому номеру будут еще начисления
Если Н2<>0 Тогда
Если МассивНомерАбонента[Н2]<>МассивНомерАбонента[Н2-1] ТогдаВладелецНомера.Парам� �тры.НомерВладельца=Массив� �омерАбонента[Н2];
///Сравниваем номера с ФИО владельца и выводим совпадения
Для НВ = 0 по МассивНВладелец.Количеств� �()-1 Цикл
Если МассивНомерАбонента[Н2]=МассивНВладелец[НВ]Тогда
Владелец=МассивВладелец[НВ];
КонецЕсли;
КонецЦикла;ВладелецНомера. Параметры.Владелец=Владеле ц;
Владелец="";
//////////////////////////////////////////////////////////
Табдок.Вывести(ВладелецНом ера);
Иначе
КонецЕсли;ИначеВладелецНо� �ера.Параметры.НомерВладел� �ца=МассивНомерАбонента[Н2];
///Сравниваем номера с ФИО владельца и выводим совпадения
Для НВ = 0 по МассивНВладелец.Количеств� �()-1 Цикл
Если МассивНомерАбонента[Н2]=МассивНВладелец[НВ]Тогда
Владелец=МассивВладелец[НВ];
КонецЕсли;
КонецЦикла;ВладелецНомера. Параметры.Владелец=Владеле ц;
Владелец="";
Табдок.Вывести(ВладелецНом ера);
КонецЕсли;
//Проверяем платный номер или бесплатный
Для Н = 0 по массивбесплатные.Количест� �о()-1 Цикл
Если МассивОписаниедействия[Н2]="Входящие" тогда
Если МассивИнициаторЗвонка[Н2]=массивбесплатные[Н] тогда
НомерПрин=МассивИнициатор� �вонка[Н2];
СуммаПрин=МассивРазмерНач� �слений[Н2];
НомерНеПрин="";
СуммаНеПрин=0;
Иначе
Если НомерПрин="" тогдаНомерНеПрин=МассивИн� �циаторЗвонка[Н2];
СуммаНеПрин=МассивРазмерН� �числений[Н2];
НомерПрин=""; //*
СуммаПрин=0; //*
КонецЕсли;
// Сообщить("Платный");
Конецесли;
ИначеЕсли МассивОписаниедействия[Н2]="" ТогдаНомерПрин="Покупка контента";
СуммаПрин=МассивРазмерНач� �слений[Н2];
НомерНеПрин=""; //*
СуммаНеПрин=0; //*
Иначе
Если МассивПринимающийНомер[Н2]=массивбесплатные[Н] тогда
НомерПрин=МассивПринимающ� �йНомер[Н2];
СуммаПрин=МассивРазмерНач� �слений[Н2];
НомерНеПрин="";
СуммаНеПрин=0;
Иначе
Если НомерПрин="" тогда
НомерНеПрин=МассивПринима� �щийНомер[Н2];
СуммаНеПрин=МассивРазмерН� �числений[Н2];
НомерПрин="";
СуммаПрин=0;
Конецесли;
// Сообщить("Платный");
Конецесли;
КонецЕсли;
КонецЦикла;
Если Число(СуммаПрин)<>0 Тогда МассивНомерПрин.Добавить(Н омерПрин);
МассивСуммаПрин.Добавить(С уммаПрин);
// Оплата.Параметры.НомерПрин =НомерПрин;
// Оплата.Параметры.СуммаПрин =СуммаПрин;
КонецЕсли;
// КонецЕсли;
Если Число(СуммаНеПрин)<>0 Тогда
МассивНомерНеПрин.Добавит� �(НомерНеПрин);
МассивСуммаНеПрин.Добавит� �(СуммаНеПрин);
// Оплата.Параметры.НомерНеПр ин=НомерНеПрин;
//Оплата.Параметры.СуммаНеПр ин=СуммаНеПрин;
КонецЕсли;
////////////////////////////////////////////////////////////////////////
//Группируем значения массива бесплатных номеров по номерам
Если Н2<>МассивНомерАбонента.Колич� �ство()-1 тогда
Если МассивНомерАбонента[Н2]<>МассивНомерАбонента[Н2+1] Тогда
ТекущийИндекс = 0;
ВсегоЭлементов = МассивНомерПрин.Количеств� �();
Пока ТекущийИндекс < ВсегоЭлементовЦикл
Индекс2 = ТекущийИндекс + 1;
Пока Индекс2 < ВсегоЭлементовЦикл
Если МассивНомерПрин[Индекс2] = МассивНомерПрин[ТекущийИндекс] Тогда МассивН=Число(МассивСуммаП рин[Индекс2])+Число(МассивСуммаПрин[ТекущийИндекс]);
МассивСуммаПрин[ТекущийИндекс]=МассивН;
МассивНомерПрин.Удалить(Ин декс2);
МассивСуммаПрин.Удалить(Ин декс2);
ВсегоЭлементов = ВсегоЭлементов - 1;
Иначе
Индекс2 = Индекс2 + 1;
КонецЕсли;
КонецЦикла; ТекущийИндекс = ТекущийИндекс + 1;
КонецЦикла;
КонецЕсли;КонецЕсли;
///////////////////////////////////////////////////////////////////////////////
//Группируем значения массива платных номеров по номерам
Если Н2<>МассивНомерАбонента.Колич� �ство()-1 тогда
Если МассивНомерАбонента[Н2]<>МассивНомерАбонента[Н2+1] Тогда
ТекущийИндекс = 0;
ВсегоЭлементов = МассивНомерНеПрин.Количес� �во();
Пока ТекущийИндекс < ВсегоЭлементовЦикл
Индекс2 = ТекущийИндекс + 1;
Пока Индекс2 < ВсегоЭлементовЦикл
Если МассивНомерНеПрин[Индекс2] = МассивНомерНеПрин[ТекущийИндекс] Тогда МассивН=Число(МассивСуммаН еПрин[Индекс2])+Число(МассивСуммаНеПрин[ТекущийИндекс]);
МассивСуммаНеПрин[ТекущийИндекс]=МассивН;
МассивНомерНеПрин.Удалить( Индекс2);
МассивСуммаНеПрин.Удалить( Индекс2);
ВсегоЭлементов = ВсегоЭлементов - 1;
Иначе
Индекс2 = Индекс2 + 1;
КонецЕсли;
КонецЦикла; ТекущийИндекс = ТекущийИндекс + 1;
КонецЦикла;
КонецЕсли;КонецЕсли;
////////////////////////////////////////////////////////////////////////
Если Н2<>МассивНомерАбонента.Колич� �ство()-1 тогда
Если МассивНомерАбонента[Н2]<>МассивНомерАбонента[Н2+1] Тогда
Для Н10=0 по МассивНомерПрин.Количеств� �()-1 цикл
Если Число(СуммаПрин)<>0 Тогда
Оплата.Параметры.НомерПрин =МассивНомерПрин[Н10];
Оплата.Параметры.СуммаПрин =МассивСуммаПрин[Н10];
//чистка
Оплата.Параметры.НомерНеПр ин="";
Оплата.Параметры.СуммаНеПр ин=0;
Табдок.Вывести(Оплата);
Сообщить(МассивНомерПрин[Н10]);
КонецЕсли;
конеццикла;Для Н10=0 по МассивНомерНеПрин.Количес� �во()-1 цикл
Если Число(СуммаНеПрин)<>0 Тогда
Оплата.Параметры.НомерНеПр ин=МассивНомерНеПрин[Н10];
Оплата.Параметры.СуммаНеПр ин=МассивСуммаНеПрин[Н10];
//чистка
Оплата.Параметры.НомерПрин ="";
Оплата.Параметры.СуммаПрин =0;
Табдок.Вывести(Оплата);
КонецЕсли;
конеццикла;
МассивНомерПрин.Очистить();
МассивСуммаПрин.Очистить();
МассивНомерНеПрин.Очистит� �();
МассивСуммаНеПрин.Очистит� �();
КонецЕсли;
КонецЕсли;////////////////////////////////////////////////////
Если СуммаПрин<>неопределено Тогда
ИтогоПрин=ИтогоПрин2+Сумма� �рин;
ИтогоПрин2=ИтогоПрин;
ИтогоПрин4=ИтогоПрин3+Сумма Прин;
ИтогоПрин3=ИтогоПрин4;
КонецЕсли;
ИтогоНеПрин=ИтогоНеПрин2+С� �ммаНеПрин;
ИтогоНеПрин2=ИтогоНеПрин;
ИтогоНеПрин4=ИтогоНеПрин3+С уммаНеПрин;
ИтогоНеПрин3=ИтогоНеПрин4;
Если Н2<>0 Тогда
Если Н2<>МассивНомерАбонента.Колич� �ство()-1 тогдаЕсли МассивНомерАбонента[Н2]<>МассивНомерАбонента[Н2-1] Тогда
Если МассивНомерАбонента[Н2]<>МассивНомерАбонента[Н2+1] Тогда
ИтогоПрин2=0;
ИтогоНеПрин2=0;
КонецЕсли;
ИначеЕсли МассивНомерАбонента[Н2]<>МассивНомерАбонента[Н2+1] Тогда
ИтогоПрин2=0;
ИтогоНеПрин2=0;
КонецЕсли;
КонецЕсли; КонецЕсли;КонецЕсли;
НомерПрин="";
СуммаПрин=0;
НомерНеПрин="";
СуммаНеПрин=0;
//////////////////////////////////////////////////////////////////
Если ИтогоПрин<>неопределено Тогда
Итоги.Параметры.ИтогоПрин=� �тогоПрин;
Итоги.Параметры.ИтогоНеПри н=ИтогоНеПрин;
Итоги.Параметры.НДСПрин=ок� �(ИтогоПрин/100*18,2);
Итоги.Параметры.НДСНеПрин=� �кр(ИтогоНеПрин/100*18,2);
Итоги.Параметры.ИтогоСНДСП рин=окр(ИтогоПрин+ИтогоПри� �/100*18,2);
Итоги.Параметры.ИтогоСНДСН еПрин=окр(ИтогоНеПрин+Итог� �НеПрин/100*18,2);
КонецЕсли;
/////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
//Проверяем последний ли номер в списке номеров и последняя ли строчка с этим номером или по этому номеру будут еще начисления
/// И подводит итоги по суммам по каждому номеру
Если Н2<>0 Тогда
Если Н2<>МассивНомерАбонента.Колич� �ство()-1 тогдаЕсли МассивНомерАбонента[Н2]<>МассивНомерАбонента[Н2+1] ТогдаТабдок.Вывести(Итоги);
Иначе
КонецЕсли;ИначеТабдок.Выве сти(Итоги);
КонецЕсли;
КонецЕсли;КонецЦикла;