Имя: Пароль:
1C
1С v8
Подскажите, как оптимизировать алгоритм отчета?
,
0 Bittin
 
07.12.15
09:01
Здравствуйте. Есть следующая задачка.

Сделать отчет который будет иметь примерный вид

Например
Период 01.04.2015-30.04.2015
    Задолженность до 3х месяцев
Контрагент/ договор    | Сумма начальный остаток     | Месяц задолженности        | Документ                        | Комментарий и др.поля
Вася пупкин
    Договор 1        |50                        | Январь,Февраль,Март 2015    | Поступление ТМЗ 2 от 29.01.2015        |Коммментарий и др.поля


Исходные данные для этого отчета

Счет 76.09 Контрагент:Вася пупкин, Договор:Договор 1

Оборотка по счету  с 01.04.2015-30.04.2015
Начальный остаток Кт     оборот Дт    Оборот Кт     Конечный Остаток
50                     50            0            0

Карточка счета с 01.01.15 по 01.04.2015
Дата            | Документ                            |Дт        |Кт        |Сумма    |Сальдо
11.01.2015    | Поступление ТМЗ 1 от 11.01.2015            |08.03    |76.09    |100        |Кт 100
12.01.2015    | Списание безналичных ДС 1от 12.01.2015    |76.09    |51        |100        |0
29.01.2015    | Поступление ТМЗ 2 от 29.01.2015            |08.03    |76.09    |50        |Кт 50
21.02.2015    | Поступление ТМЗ 3 от 21.02.2015            |08.03    |76.09    |100        |Кт 150
22.02.2015    | Списание безналичных ДС 2 от 22.02.2015    |76.09    |51        |100        |Кт 50
11.03.2015    | Поступление ТМЗ 4 от 11.03.2015            |08.03    |76.09    |150        |Кт 200
12.03.2015    | Списание безналичных ДС 3 от 12.03.2015    |76.09    |51        |150        |Кт 50
04.04.2015    | Списание безналичных ДС 4 от 04.04.2015    |76.09    |51        |50        |0

Алгоритм определения этого документа зарегистрировавшего задолженность должен быть:
Берем СуммаНачальныйОстатокКт, получаем список СуммаОборотКт в разрезе регистраторов упорядоченных по убыванию, до даты формирования отчета и начинаем отнимать от СуммаНачальныйОстатокКт сумму СуммаОборотКт, как только результат вычитания из остатка СуммаНачальныйОстатокКт 0 или отрицательное число, останавливаемся и берем эти данные(регистратор) при этом запоминая все месяцы в которых результат вычитания был нормальный а также месяц из последней записи на которой остановился алгоритм.


Я сделал так:
1. Создал две СКД
    В первой скд набор данных запрос:
    1 пакет запросов выбраю данные из ОстаткиИОбороты по начальному остатку Кт в разрезе контрагентов и договор и засовываю во временую таблицу
        получаем: СуммаНачальныйОстатокКт,Контрагент,Договор
    2 пакет запросов выбираю данные из ОстаткиИОбороты по данным контрагентам,договорам с периодичностью регистратор во временую таблицу
        получаем: Регистратор,Контрагент,Договор,СуммаОборотКт
    3 пакет соединяю по контрагенту и договору
        получаем: Контрагент,Договор,СуммаОборотКт,СуммаНачальныйОстатокКт,Регистратор
    Во второй скд: набор данных объект
2. В модуле объекта в процедуре ПриКомпоновкеРезультата програмно получаем результат выполнения скд первой в виде ТЗ
3. Все это обходим в цикле ТЗ реализуя механизм поиска документа посредством вычитания.
4. Получили ТЗНовая отсея ненужное и получив условно говоря  1 строчку по контрагенту с регистратором и строкой в которой перечислены месяца задолженности
5.  Здесь же в процедуре создаем запрос, подключаем МенеджерВременныхТаблиц, передаем нашу ТЗНовая в качестве параметра, и группируем по датам и разделам задолженности, выбираем нужные поля из регистратора и т.д.
6. Полученную ТЗНовая из запроса передаем во вторую СКД в качестве ВнешнегоНабораДанных и вторая скд оформляет и выводит

Я решил вот таким способом данную задачу, меня терзают сомнения что этот вариант решения не совсем верный, в связи с этим,хотелось бы знать, как можно оптимальнее выполнить данную задачу?
Заранее спасибо!
1 Bittin
 
08.12.15
21:01
up
2 PR третий
 
08.12.15
21:12
Куйня какая-то. Просто возьми остатки в разрезе по регистраторам.
3 Bittin
 
08.12.15
21:28
если я так возьму то алгоритм определения документа не сработает
4 PR третий
 
08.12.15
21:44
Читал читал, так и не понял, что курил автор перед написанием сего сабжа.
5 Bittin
 
08.12.15
21:47
если вы читали, что конкретно то вам не понятно? давайте расскажу подробнее,разъясню
6 Ildarovich
 
08.12.15
21:56
Вот статья, где описан "оптимальный" алгоритм: http://catalog.mista.ru/public/262300/ . В ней акцент сделан на быстродействии. Если оно не столь важно, то в конце статьи много ссылок на более традиционные решения. Если возьмете алгоритм из статьи, думаю, заменить запросы к регистру накопления на запросы к регистру бухгалтерии труда не составит.
7 Bittin
 
08.12.15
22:04
(6) Спасибо, почитаю. Я додумался только так решить данную задачу с учетом специфического алгоритма определения документа) вот думал может как то оптимальнее можно)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан