Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите сформировать печатную форму
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
kosalex
Доброго времени суток! Делаю обработку по начислению пени за прошедший месяц.

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

Дата Задолженность на эту дату Начислено пени
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
А проблема-то в чем?
1.Рисуем макет, заполняем, выводим.
2.Отдаем тз в СКД, настраиваем.
kosalex
Цитата(sava1 @ 27.05.15, 12:35) необходимо зарегистрироваться для просмотра ссылки
А проблема-то в чем?
1.Рисуем макет, заполняем, выводим.
2.Отдаем тз в СКД, настраиваем.



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

так примерно
kosalex
Цитата(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
Перед перебором тз запоминаем предыдущее значение переменных.
Перебираем строки тз:
если текущее значение не равно предыдущему - выводим в строку

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

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


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

Если без макета, к примеру я из этой ТЗ хочу сформировать ТЗ1 в которой есть колонки "Долг", "ПериодС", "ПериодПо", "НачисленоПениЗаПериод", как тогда?
sava1
типа так, но надо отшлифовать:
долг=0;
долгсумма=0;
период1 =НачПериода;
Для каждого сс Из тз Цикл
    Если сс.долг<>долг тогда
         Если сс.период>период1 Тогда
             нс = тз1.добавить();
            нс.долг = сс.долг;
            нс.периодС = период1;
            нс.периодПо = сс.период;
            нс.начислено = долгсумма;
                                        
           долг = сс.долг;
           период1 = сс.период;
           долгсумма=0;

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

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