8.х Цикл для подсчета записей в таблице

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем alturgrey, 16 май 2014.

  1. TopicStarter Overlay
    alturgrey
    Offline

    alturgrey

    Регистрация:
    19 июн 2012
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Помогите добавить в код:
    Процедура Кнопка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', КонПериода, КонецДня(КонПериода)));
    НастройкаПериода.РедактироватьКакИнтервал = Истина;
    НастройкаПериода.РедактироватьКакПериод = Истина;
    НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
    Если НастройкаПериода.Редактировать() Тогда
    НачПериода = НастройкаПериода.ПолучитьДатуНачала();
    КонПериода = НастройкаПериода.ПолучитьДатуОкончания();
    КонецЕсли;
    КонецПроцедуры


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

    dimalf Новичок в 1С

    Регистрация:
    7 ноя 2012
    Сообщения:
    44
    Симпатии:
    1
    Баллы:
    4
    Добрый день!

    А через запрос?

Поделиться этой страницей