Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=23431)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Помогите сформировать печатную форму

Автор: kosalex 27.05.15, 10:41

Доброго времени суток! Делаю обработку по начислению пени за прошедший месяц.

Формирую вот такую таблицу значений:

Дата Задолженность на эту дату Начислено пени
01 апреля 8000 5,42
02 апреля 8000 5,42
03 апреля 3000 2,03
04 апреля 3000 2,03
05 апреля 3000 2,03
06 апреля 3000 2,03
07 апреля 3000 2,03
08 апреля 3000 2,03
09 апреля 3000 2,03
10 апреля 3000 2,03

Как с этой таблицы сформировать вот такой печатный документ:

Сумма задолженности |Период задолженности| Дней просрочки| Начисленно пени
С | ПО
8000 01 апреля 02 апреля 2 10,84
3000 3 апреля 10 апреля 8 16,24

Как?

Может я не правильно формирую изначальную(с которой хочу вывести на печать) таблицу значений.....

Автор: sava1 27.05.15, 11:35

А проблема-то в чем?
1.Рисуем макет, заполняем, выводим.
2.Отдаем тз в СКД, настраиваем.

Автор: kosalex 27.05.15, 11:48

Цитата(sava1 @ 27.05.15, 12:35) *
А проблема-то в чем?
1.Рисуем макет, заполняем, выводим.
2.Отдаем тз в СКД, настраиваем.



Нарисовал, а вот заполнить периодом не получается...сам алгоритм перебора и заполнения с исходной таблицы в печатную форму подскажите
Вывожу без СКД

Автор: sava1 27.05.15, 11:57

ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
ОбластьМакета = Макет.ПолучитьОбласть("Шапка");    
ОбластьМакета.Параметры.Заголовок = "Підсумкова таблиця за "+ПредставлениеПериода(НачалоДня(НачПериода),КонецДня(КонПериода),"Л=uk_UA; ФП=Истина");    
ТабДок.Вывести(ОбластьМакета);
//
Для каждого сс Из тз Цикл
    ОбластьМакета = Макет.ПолучитьОбласть("Строка");    
    ОбластьМакета.Параметры.Заполнить(сс);            
    ТабДок.Вывести(ОбластьМакета);                                            
КонецЦикла;

так примерно

Автор: kosalex 27.05.15, 12:06

Цитата(sava1 @ 27.05.15, 12:57) *
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
ОбластьМакета = Макет.ПолучитьОбласть("Шапка");    
ОбластьМакета.Параметры.Заголовок = "Підсумкова таблиця за "+ПредставлениеПериода(НачалоДня(НачПериода),КонецДня(КонПериода),"Л=uk_UA; ФП=Истина");    
ТабДок.Вывести(ОбластьМакета);
//
Для каждого сс Из тз Цикл
    ОбластьМакета = Макет.ПолучитьОбласть("Строка");    
    ОбластьМакета.Параметры.Заполнить(сс);            
    ТабДок.Вывести(ОбластьМакета);                                            
КонецЦикла;

так примерно



Может я не так выражаюсь....мне нужно в макет вывести что с 01.04 по 02.04 долг был 8000 и начислено пени 2*5,42, следующая строка с 03.04 по 10.04 долг был 3000 начислено пени 8*2,03



Вот таблица которую я формирую, как с нее получить строку вида: с 01.04 по 30.04 долг = -71 497,23, начислено пени 24,75*30 ?

Автор: sava1 27.05.15, 12:09

Перед перебором тз запоминаем предыдущее значение переменных.
Перебираем строки тз:
если текущее значение не равно предыдущему - выводим в строку

долг=0;
Для каждого сс Из тз Цикл
    Если сс.долг<>долг тогда
          ОбластьМакета = Макет.ПолучитьОбласть("Строка");    
          ОбластьМакета.Параметры.Заполнить(сс);            
          ТабДок.Вывести(ОбластьМакета);                                            
          долг = сс.долг;
    КонецЕсли;
КонецЦикла

Автор: kosalex 27.05.15, 12:30

Цитата(sava1 @ 27.05.15, 13:09) *
Перед перебором тз запоминаем предыдущее значение переменных.
Перебираем строки тз:
если текущее значение не равно предыдущему - выводим в строку

долг=0;
Для каждого сс Из тз Цикл
    Если сс.долг<>долг тогда
          ОбластьМакета = Макет.ПолучитьОбласть("Строка");    
          ОбластьМакета.Параметры.Заполнить(сс);            
          ТабДок.Вывести(ОбластьМакета);                                            
          долг = сс.долг;
    КонецЕсли;
КонецЦикла


либо я тупой либо лыжи не едут.....

Если без макета, к примеру я из этой ТЗ хочу сформировать ТЗ1 в которой есть колонки "Долг", "ПериодС", "ПериодПо", "НачисленоПениЗаПериод", как тогда?

Автор: sava1 27.05.15, 12:43

типа так, но надо отшлифовать:

долг=0;
долгсумма=0;
период1 =НачПериода;
Для каждого сс Из тз Цикл
    Если сс.долг<>долг тогда
         Если сс.период>период1 Тогда
             нс = тз1.добавить();
            нс.долг = сс.долг;
            нс.периодС = период1;
            нс.периодПо = сс.период;
            нс.начислено = долгсумма;
                                        
           долг = сс.долг;
           период1 = сс.период;
           долгсумма=0;

         КонецЕсли
     иначе
        долгсумма=долгсумма+сс.начислено;
     КонецЕсли;

КонецЦикла

Автор: kosalex 27.05.15, 13:47

Решил вот так:

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

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua