Имя: Пароль:
1C
1С v8
Сравнение двух таблиц дат и оплат
,
0 Наська72
 
07.08.13
13:05
На входе две таблицы, в одной дата по графику и сумма по графику, во второй дата фактической оплаты и суммы фактической оплаты.
Задача: найти по каждой строке количество дней просрочки и суммы просрочки.
Платить могут хоть одной суммой:
ДатаПоГрафику   СуммаПоГрафику
01.01.2013      1000,00
02.02.2013      1000,00
03.03.2013      1000,00

ДатаФакт        СуммаФакт
01.01.2013      3000,00

Хоть сто пятьсот раз:
ДатаФакт        СуммаФакт
01.01.2013      500,00
02.01.2013      500,00
03.01.2013      500,00
01.02.2013      500,00
02.02.2013      500,00
03.03.2013      500,00

Хоть в график, хоть с опозданием.

Подскажите как оптимальнее это посчитать.
Пока реализую сравнение двух таблиц по каждой строке. И накапливать в переменной сумму оплаты.
1 Наська72
 
07.08.13
13:17
Не совсем ясно как обработать такое
по графику
05.01.2013 1000,00
01.02.2013 500,00

фактическ
01.01.2013 500,00
03.01.2013 500,00
01.02.2013 500,00
2 Starhan
 
07.08.13
13:25
(0)"Задача: найти по каждой строке"

У меня три варианта ответа.
По каждой строке 1й таблицы
По каждой строке 2й таблицы
По каждой строке обоих таблиц.

Прошу помощи зала.
3 exwill
 
07.08.13
13:31
(0) Записывай таблицы в РН. Потом анализируй остатки на каждую дату.
4 exwill
 
07.08.13
13:34
+(3) Можно, конечно, и запросом. Но с регистром тебе будет проще.
5 Starhan
 
07.08.13
13:35
(3)
Теоретически:
можно соединить таблицы дата 1й меньше или равно дата 2й. И наоборот. Сгруппировать для того что бы получить общую сумму долга по графику и общую сумму оплат на конкретное число (тут вопрос по датам какой таблицы нужна группировка) ну и вычесть из первого второе.
6 Peltzer
 
07.08.13
13:36
СуммаСНачалаТаблицы = 0;
ТекДатаПросрочки = ПустоеЗначение;
ТекСуммаПросрочки = 0;
ТаблицаГрафика.ДобавитьКолонки("ДатаНачалаПросрочки", "СуммаПросрочки");
Для Каждого Строка Из ТаблицаГрафика Цикл
   СуммаСНачалаТаблицы = СуммаСНачалаТаблицы + Строка.Сумма;
   Если СуммаСНачалаТаблицы>НайтиОплаченноеНаДату(Строка.Дата) Тогда
      ТекДатаПросрочки = ?(ТекДатаПросрочки=ПустоеЗначение,Строка.Дата,ТекДатаПросрочки);
      ТекСуммаПросрочки = ТекСуммаПросрочки + Строка.Сумма;
   Иначе
      ТекСуммаПросрочки = 0;
      ТекДатаПросрочки = ПустоеЗначение;
   КонецЕсли;
   Строка.СуммаПросрочки = ТекСуммаПросрочки;
   Строка.ДатаПросрочки = ТекДатаПросрочки;
КонецЦикла
7 exwill
 
07.08.13
13:38
Очевидно, что группировка нужна по всем датам из диапазона.
8 Starhan
 
07.08.13
13:40
(7) а мне очевидно что только на дату графика :(
(6) черд я думал надо решить в рамках запроса. :(
9 exwill
 
07.08.13
13:41
(8) "Количество дней просрочки" ни о чем не говорит?
10 Peltzer
 
07.08.13
13:42
Да вообще не понятно что и как решать :)
11 exwill
 
07.08.13
13:43
(10) Наоборот - достаточно стандартная задача на определение штрафных санкций.
12 Peltzer
 
07.08.13
13:46
Объединить таблицы, но вторую таблицу со знаком минус.
Затем считать сумму с начала до текущей даты и для всех ненулевых потом брать начало периода из предыдущей строки.
13 Peltzer
 
07.08.13
13:47
Положительных.
14 Наська72
 
07.08.13
13:47
Это не запрос.
Регистр накопления использовать нельзя. Я пишу отчет, это будут две колонки, я решила рассчитывать их и передавать в скд таблицей-объектом.
Потому как это все велось в табличной части и вперемешку, то это полный атас.
Выделять думаю надо по датам графика, хотя хз, если дат оплаты будет больше графика
15 Наська72
 
07.08.13
13:48
(11) может быть у Вас есть решение?
16 Starhan
 
07.08.13
13:48
(9) Тогда надо сначло найти все даты по графику на которые есть задолженность. А потом искать ближайшие даты в ноль.

(11) то есть если я на 01.02.2013 должен 1000
а на 01.03.2013 уже две мне отдельно впаяют за 2 месяца за 1000 и за 1 месяц за 2000?
или
за 1 месяц 1000 и за 1 месяц 2000 тысячи?
17 Конфигуратор1с
 
07.08.13
13:49
(0) я так понимаю, обходим таблицу графика и смотрм когда она погашается. усе.
18 Starhan
 
07.08.13
13:51
(14) надо переделывать механизм учета на регистры накопления :)
19 Конфигуратор1с
 
07.08.13
13:51
(14) ну так Вам нужно обходить даты графика и смотреть на какую они погащаются дату. от нее и отнимать размер просрочки и так для каждой строки
20 Peltzer
 
07.08.13
13:52
(17) Если погашается частично, то нет.
21 Конфигуратор1с
 
07.08.13
13:52
(19) по идее мона запросом разрулить через накопление итога общей суммой
22 Конфигуратор1с
 
07.08.13
13:52
(20) почему нет? если брать дату погашения
23 Конфигуратор1с
 
07.08.13
13:53
24 Конфигуратор1с
 
07.08.13
13:54
(23) но тут извращаться придется сильно. Проще перебором
25 Peltzer
 
07.08.13
13:56
График
01.01 1000 рублей
Оплата
02.01 500 рублей
03.01 500 рублей
Результат
02.01 СуммаЗадолженности 1000 СрокЗадолженности 1 день
03.01 СуммаЗадолженности 500 СрокЗадолженности 1 день

Либо
02.01 СуммаЗадолженности 500 СрокЗадолженности 1 день
03.01 СуммаЗадолженности 500 СрокЗадолженности 2 дня
26 Наська72
 
07.08.13
13:58
(25)
02.01 СуммаЗадолженности 500 СрокЗадолженности 1 день
03.01 СуммаЗадолженности 500 СрокЗадолженности 2 дня
27 Наська72
 
07.08.13
14:00
(18) еще раз повторю - это невозможно. База архивная. Редактированию не подлежит. Надо отчет по старым данным
28 Леха Дум
 
07.08.13
14:02
(0) вдруг поможет: http://yadi.sk/d/MvmNhLh57eYR2
там запрос на формирование пени на каждый день.
Когда подобная хрень работала перебором за каждый день, документ проводился полчаса. Сейчас не больше 1 минуты
29 Smallrat
 
07.08.13
14:03
(0) я где-то полгода назад делал похожий отчет - щас смотрю на него - без стакана не разобраться.
помню что ключевой момент - взять таблицу приходов и соединить саму с собой чтобы получить нарастающий итог.
если надо - могу отчет кинуть, он написан для УТ (вот правда не помню - с доработками или нет).
30 exwill
 
07.08.13
14:09
(27) Сделай промежуточную базу.
31 Наська72
 
07.08.13
14:15
(30) всё ради отчета?
32 Леха Дум
 
07.08.13
14:17
(31) скачала из (28) ?
33 exwill
 
07.08.13
14:18
(31) Почему нет?
34 Наська72
 
07.08.13
14:22
(32) Да, смотрю
35 Наська72
 
07.08.13
14:47
(32) не совсем там поняла

Что бы было понятнее вот файлик эксель с тем что нужно. Колонки с просрочкой то что нужно, остальное есть

https://docs.google.com/file/d/0Bwa1kNXZy3nQX0FGTFJTNUV3cHc/edit?usp=sharing
36 Наська72
 
08.08.13
12:55
Большое спасибо всем за помощь
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс