PDA

Просмотр полной версии : Цикл для подсчета записей в таблице



alturgrey
15.05.2014, 09:10
Помогите добавить в код:
Процедура Кнопка4 - формирует отчет исходя из: сотрудника и ведомого им контрагента. Выдав в виде таблицы всех пациент из базы, проходящих по этому контрагенту за период.
Процедура Кнопка1 - формирует другой отчет в общем виде: сотрудники и ведомые за ними контрагенты.
Можно ли пересчитать количество пациентов, проходящих по контрагенту, и падающих в отчет по Кнопке4, в дополнительный столбец общего отчета : (кнопка1)
ИИ
Здесь код обеих процедур, но куда добавить цикл, считающий пациентов ?


Процедура Кнопка4Нажатие(Элемент)

ТабДок = Новый ТабличныйДокумент();
Макет = ПолучитьМакет("Макет");

Область = Макет.ПолучитьОбласть("Шапка");
Область.Параметры.УслП = "Отчет по оказанным услугам юр. лицам за период с " + Строка(НачПериода) + " по " + Строка(КонПериода) ;

Если ПолеВвода1.Пустая() Тогда
Область.Параметры.Стр2 = "По всем организациям";
Иначе
Область.Параметры.Стр2 = "Организация: " + Строка(ПолеВвода1);
КонецЕсли;

Если ПолеВвода3.Пустая() Тогда
Область.Параметры.Стр3 = "";
Иначе
Область.Параметры.Стр3 = "Менеджер по продажам: " + Строка(ПолеВвода3);
КонецЕсли;

Если ПолеВвода4.Пустая() Тогда
Область.Параметры.Стр4 = "";
Иначе
Область.Параметры.Стр4 = "Менеджер поддержки: " + Строка(ПолеВвода4);
КонецЕсли;

ТабДок.Вывести(Область);


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(НазначениеНаОсмотр.С уммаДокумента) КАК СуммаДокумента,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Код КАК Код,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Наимено� �ание КАК Владелец,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Ссылка КАК ВладелецСсылка,
| НазначениеНаОсмотр.Органи� �ация.Ссылка,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Менедже� �ПоПродажам КАК МенПрод,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Менедже� �Поддержки КАК МенПодд
|ИЗ
| Документ.НазначениеНаОсмо� �р КАК НазначениеНаОсмотр
|ГДЕ
| НазначениеНаОсмотр.Дата >= &ДатаНач
| И НазначениеНаОсмотр.Дата <= &ДатаКон
| И НазначениеНаОсмотр.Провед� �н = &Истина
| И НазначениеНаОсмотр.Выстав� �тьКОплате = &Ист
| И НазначениеНаОсмотр.Основн� �йДоговор.ВидДоговора = &ВидДог";



Если не ПолеВвода1.Пустая() Тогда
Запрос.Текст = Запрос.Текст + "
| И НазначениеНаОсмотр.Органи� �ация.Ссылка = &Орг" ;
КонецЕсли;
Запрос.УстановитьПараметр("Орг", ПолеВвода1);

Если не ПолеВвода2.Пустая() Тогда
Запрос.Текст = Запрос.Текст + "
| И НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Ссылка = &Контрагент" ;
КонецЕсли;
Запрос.УстановитьПараметр("Контрагент", ПолеВвода2);

Если не ПолеВвода3.Пустая() Тогда
Запрос.Текст = Запрос.Текст + "
| И НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Менедже� �ПоПродажам = &Мен1" ;
КонецЕсли;
Запрос.УстановитьПараметр("Мен1", ПолеВвода3);

Если не ПолеВвода4.Пустая() Тогда
Запрос.Текст = Запрос.Текст + "
| И НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Менедже� �Поддержки = &Мен2" ;
КонецЕсли;
Запрос.УстановитьПараметр("Мен2", ПолеВвода4);



Запрос.Текст = Запрос.Текст +
"
|СГРУППИРОВАТЬ ПО
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Код,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Наимено� �ание,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Ссылка,
| НазначениеНаОсмотр.Органи� �ация.Ссылка,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Менедже� �ПоПродажам,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Менедже� �Поддержки
|
|УПОРЯДОЧИТЬ ПО
| Владелец";


Запрос.УстановитьПараметр("ДатаНач", НачПериода);
Запрос.УстановитьПараметр("ДатаКон", КонПериода);
Запрос.УстановитьПараметр("Истина", Истина);
Запрос.УстановитьПараметр("Ист", Ложь);
Запрос.УстановитьПараметр("ВидДог", Перечисления.ВидДоговора.П редприятие);


Результат = Запрос.Выполнить().Выбрать() ;

н = 1;
СумОбщ = 0;
Пока Результат.Следующий() цикл

Область = Макет.ПолучитьОбласть("Строка");
Область.Параметры.н = н;
Область.Параметры.Контраге нтП = Результат.Владелец;
Область.Параметры.СуммаП = Результат.СуммаДокумента;
Область.Параметры.МенПродП = Результат.МенПрод;
Область.Параметры.Экономис тП = Результат.МенПодд;
СумОбщ = СумОбщ + Результат.СуммаДокумента;

ТабДок.Вывести(Область);
н = н + 1;

КонецЦикла;

Область = Макет.ПолучитьОбласть("Подвал");
Область.Параметры.СумОбщП = СумОбщ;
ТабДок.Вывести(Область);

Табдок.Показать("Краткий финансовый отчет");

КонецПроцедуры

Процедура ПриОткрытии()

Орг = Справочники.Организации.Вы брать();
Пока Орг.Следующий() Цикл
Если Орг.Основная = Истина Тогда

ПолеВвода1 = Орг.Ссылка;
Прервать;

КонецЕсли;
КонецЦикла;
ЭлементыФормы.Флажок1.Знач� �ние = Ложь;

КонецПроцедуры




Процедура Кнопка1Нажатие(Элемент)

Если ПолеВвода2.Пустая() Тогда
Предупреждение("Не заполнено поле контрагент");
Возврат;
КонецЕсли;

ТабДок = Новый ТабличныйДокумент();
Макет = ПолучитьМакет("Макет1");

Область = Макет.ПолучитьОбласть("Шапка");
Область.Параметры.УслП = "Отчет по оказанным услугам юр. лицам за период с " + Строка(НачПериода) + " по " + Строка(КонПериода) ;

Если ПолеВвода1.Пустая() Тогда
Область.Параметры.КонтрП = "По всем организациям";
Иначе
Область.Параметры.КонтрП = "Организация: " + Строка(ПолеВвода1);
КонецЕсли;

Если ПолеВвода3.Пустая() Тогда
Область.Параметры.Стр3 = "";
Иначе
Область.Параметры.Стр3 = "Менеджер по продажам: " + Строка(ПолеВвода3);
КонецЕсли;

Если ПолеВвода4.Пустая() Тогда
Область.Параметры.Стр4 = "";
Иначе
Область.Параметры.Стр4 = "Менеджер поддержки: " + Строка(ПолеВвода4);
КонецЕсли;

ТабДок.Вывести(Область);

// ************************************************** ************************************************** ***********************




Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(НазначениеНаОсмотр.С уммаДокумента) КАК СуммаДокумента,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Код КАК Код,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Наимено� �ание КАК Владелец,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Ссылка КАК ВладелецСсылка,
| НазначениеНаОсмотр.Органи� �ация.Ссылка,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Менедже� �ПоПродажам КАК МенПрод,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Менедже� �Поддержки КАК МенПодд
|ИЗ
| Документ.НазначениеНаОсмо� �р КАК НазначениеНаОсмотр
|ГДЕ
| НазначениеНаОсмотр.Дата >= &ДатаНач
| И НазначениеНаОсмотр.Дата <= &ДатаКон
| И НазначениеНаОсмотр.Провед� �н = &Истина
| И НазначениеНаОсмотр.Выстав� �тьКОплате = &Ист
| И НазначениеНаОсмотр.Основн� �йДоговор.ВидДоговора = &ВидДог";



Если не ПолеВвода1.Пустая() Тогда
Запрос.Текст = Запрос.Текст + "
| И НазначениеНаОсмотр.Органи� �ация.Ссылка = &Орг" ;
КонецЕсли;
Запрос.УстановитьПараметр("Орг", ПолеВвода1);

Если не ПолеВвода2.Пустая() Тогда
Запрос.Текст = Запрос.Текст + "
| И НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Ссылка = &Контрагент" ;
КонецЕсли;
Запрос.УстановитьПараметр("Контрагент", ПолеВвода2);

Если не ПолеВвода3.Пустая() Тогда
Запрос.Текст = Запрос.Текст + "
| И НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Менедже� �ПоПродажам = &Мен1" ;
КонецЕсли;
Запрос.УстановитьПараметр("Мен1", ПолеВвода3);

Если не ПолеВвода4.Пустая() Тогда
Запрос.Текст = Запрос.Текст + "
| И НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Менедже� �Поддержки = &Мен2" ;
КонецЕсли;
Запрос.УстановитьПараметр("Мен2", ПолеВвода4);



Запрос.Текст = Запрос.Текст +
"
|СГРУППИРОВАТЬ ПО
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Код,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Наимено� �ание,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Ссылка,
| НазначениеНаОсмотр.Органи� �ация.Ссылка,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Менедже� �ПоПродажам,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Менедже� �Поддержки";


Запрос.УстановитьПараметр("ДатаНач", НачПериода);
Запрос.УстановитьПараметр("ДатаКон", КонПериода);
Запрос.УстановитьПараметр("Истина", Истина);
Запрос.УстановитьПараметр("Ист", Ложь);
Запрос.УстановитьПараметр("ВидДог", Перечисления.ВидДоговора.П редприятие);


Результат = Запрос.Выполнить().Выбрать() ;

Пока Результат.Следующий() цикл

Область = Макет.ПолучитьОбласть("Строка");
Область.Параметры.Контраге нтП = Результат.Владелец;
Область.Параметры.СуммаП = Результат.СуммаДокумента;


ТабДок.Вывести(Область);

КонецЦикла;



// ************************************************** **************************************************






Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НазначениеНаОсмотр.СуммаД� �кумента КАК СуммаДокумента,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Код КАК Код,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Наимено� �ание КАК Владелец,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Ссылка КАК ВладелецСсылка,
| НазначениеНаОсмотр.Органи� �ация.Ссылка,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Менедже� �ПоПродажам КАК МенПрод,
| НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Менедже� �Поддержки КАК МенПодд,
| НазначениеНаОсмотр.Ссылка КАК СсылкаДок,
| НазначениеНаОсмотр.Пациен� �.Наименование КАК Пациент
|ИЗ
| Документ.НазначениеНаОсмо� �р КАК НазначениеНаОсмотр
|ГДЕ
| НазначениеНаОсмотр.Дата >= &ДатаНач
| И НазначениеНаОсмотр.Дата <= &ДатаКон
| И НазначениеНаОсмотр.Провед� �н = &Истина
| И НазначениеНаОсмотр.Выстав� �тьКОплате = &Ист
| И НазначениеНаОсмотр.Основн� �йДоговор.ВидДоговора = &ВидДог";

Если не ПолеВвода1.Пустая() Тогда
Запрос.Текст = Запрос.Текст + "
| И НазначениеНаОсмотр.Органи� �ация.Ссылка = &Орг" ;
КонецЕсли;
Запрос.УстановитьПараметр("Орг", ПолеВвода1);

Если не ПолеВвода2.Пустая() Тогда
Запрос.Текст = Запрос.Текст + "
| И НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Ссылка = &Контрагент" ;
КонецЕсли;
Запрос.УстановитьПараметр("Контрагент", ПолеВвода2);

Если не ПолеВвода3.Пустая() Тогда
Запрос.Текст = Запрос.Текст + "
| И НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Менедже� �ПоПродажам = &Мен1" ;
КонецЕсли;
Запрос.УстановитьПараметр("Мен1", ПолеВвода3);

Если не ПолеВвода4.Пустая() Тогда
Запрос.Текст = Запрос.Текст + "
| И НазначениеНаОсмотр.Основн� �йДоговор.Владелец.Менедже� �Поддержки = &Мен2" ;
КонецЕсли;
Запрос.УстановитьПараметр("Мен2", ПолеВвода4);


Запрос.УстановитьПараметр("ДатаНач", НачПериода);
Запрос.УстановитьПараметр("ДатаКон", КонПериода);
Запрос.УстановитьПараметр("Истина", Истина);
Запрос.УстановитьПараметр("Ист", Ложь);
Запрос.УстановитьПараметр("ВидДог", Перечисления.ВидДоговора.П редприятие);


Результат = Запрос.Выполнить().Выбрать() ;

к = 1;
Пока Результат.Следующий() цикл

Область = Макет.ПолучитьОбласть("Строка2");
Область.Параметры.к1 = к;
Область.Параметры.ДокП = Результат.СсылкаДок;
Область.Параметры.СуммаДок П = Результат.СуммаДокумента;
Область.Параметры.ПациентП = Результат.Пациент;

ТабДок.Вывести(Область);



Если Флажок1 = Истина Тогда

ДокОб = Результат.ССылкаДок.Получи тьОбъект();
Для Каждого СтрТЧ из ДокОб.Услуги Цикл

Область = Макет.ПолучитьОбласть("Документы");
Область.Параметры.УслугаП = СтрТЧ.Услуга;
Область.Параметры.СотрП = СтрТЧ.Сотрудник;
Область.Параметры.Специаль ностьП = СтрТЧ.СпециализацияВрача;
Область.Параметры.ЦенаЗаУс лП = СтрТЧ.Цена;

ТабДок.Вывести(Область);

КонецЦикла;


КонецЕсли;




к = к + 1;

КонецЦикла;

Табдок.Показать("Развернутый финансовый отчет");



КонецПроцедуры

Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.Установи� �ьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));
НастройкаПериода.Редактир� �ватьКакИнтервал = Истина;
НастройкаПериода.Редактир� �ватьКакПериод = Истина;
НастройкаПериода.ВариантН� �стройки = ВариантНастройкиПериода.П� �риод;
Если НастройкаПериода.Редактир� �вать() Тогда
НачПериода = НастройкаПериода.Получить� �атуНачала();
КонПериода = НастройкаПериода.Получить� �атуОкончания();
КонецЕсли;
КонецПроцедуры


НачПериода = НачалоМесяца(ТекущаяДата()) ;
КонПериода = ТекущаяДата();