|
Как засунуть алгоритм в СКД | ☑ | ||
---|---|---|---|---|
0
Web00001
28.02.15
✎
16:46
|
Доброе время суток. Нужно сделать отчет который будет анализировать чеки. Все бы хорошо, но надо бы знать еще чем платили за товар. Деньгами картами или сертификатами. И тут тоже бы все хорошо, если бы не сложная оплата. То есть:
Есть табличная часть с номенклатурой и там к примеру 3 строки на сумму 7000р и есть табличная часть где зафиксирована оплата этого чека на сумму 3000р картой и 4000р наличкой. Надо бы распределить оплату по всем товарам. Как то вот хотелось бы: Рубашка - 1000р Куртка - 4000р Штаны - 2000р итого 7000р Оплачено: Картой 3тр Наличкой 4тр На выходе: Оплата: Рубашка - Картой 1000р Куртка - Картой 2000р Куртка - Наличными 2000р Штаны - Наличными 2000р Итого 7000р То есть в коде это можно было бы сделать так: ТаблицаТоваровЧека = ВыборкаЧеков.Ссылка.Товары.Выгрузить(,"Номенклатура,Характеристика,Сумма"); Для каждого СтрокаОплата Из ВыборкаЧеков.Ссылка.Оплата Цикл ОсталосьОплатить = СтрокаОплата.Сумма; Для каждого СтрокаТовар Из ТаблицаТоваровЧека Цикл Если ОсталосьОплатить = 0 Тогда Прервать; КонецЕсли; БудетСписано = Мин(ОсталосьОплатить, СтрокаТовар.Сумма); НоваяСтрокаОплаты = ТаблицаОплат.Добавить(); НоваяСтрокаОплаты.Номенклатура = СтрокаТовар.Номенклатура; НоваяСтрокаОплаты.Характеристика = СтрокаТовар.Характеристика; НоваяСтрокаОплаты.ВидОплатыЧека = СтрокаОплата.ВидОплаты; НоваяСтрокаОплаты.Сумма = БудетСписано; СтрокаТовар.Сумма = СтрокаТовар.Сумма - БудетСписано; ОсталосьОплатить = ОсталосьОплатить - БудетСписано; КонецЦикла; КонецЦикла; А как это дело засунуть в запрос, что бы отчет сделать на СКД? |
|||
1
Креатив
28.02.15
✎
17:06
|
(0)Засунь таблицу значений в СКД в качестве источника данных.
|
|||
2
Garykom
гуру
28.02.15
✎
17:16
|
(1) +1 или запрос в цикле ))
|
|||
3
Cyberhawk
28.02.15
✎
17:19
|
(0) в каждую детальную запись добавляй столбик "Сумма документа", т.е. будет у тебя
Рубашка - 1000р 7000 Куртка - 4000р 7000 Штаны - 2000р 7000 Далее еще добавляй туда столбик суммы оплаты налом: Рубашка - 1000р 7000 4000 Куртка - 4000р 7000 4000 Штаны - 2000р 7000 4000 Далее добавишь уже вычисляемый столбик оплаты картой (предпоследний минус последний), далее, имея это, для каждой детальной записи вычислишь уже вес от общей суммы (первый поделить на второй), и этот вес умножаешь на сумму оплаты картой и на сумму оплаты налом и получаешь требуемое для каждой строчки |
|||
4
Web00001
28.02.15
✎
17:32
|
(3)Что делать с округлениями?
Рубашка 1000 / 7000 0,1428571428571429 = 571,4285714285716 + 428,5714285714287 легко может получиться из тысячи в 999.99 |
|||
5
Web00001
28.02.15
✎
17:33
|
+(4)Но мысль очень хорошая.
|
|||
6
Крошка Ру
28.02.15
✎
17:34
|
(5)А видов оплаты всего три?
|
|||
7
Web00001
28.02.15
✎
17:36
|
(6)Ну пока, что да, три. По идее их может быть больше, но навряд ли такое произойдет.
|
|||
8
Cyberhawk
28.02.15
✎
17:38
|
(4) с округлениями покури выражения для вычисляемых полей, которые учитывают предыдущие строки ВычислитьВыражение("Бла-бла", "Первая", "Текущая"). Алгоритм примерно такой: накапливай сумму в еще одном вычисляемом поле, а для последней строки используй разницу суммы документа и накопленной суммы
|
|||
9
Cyberhawk
28.02.15
✎
17:40
|
+(8) ну или простой вариант: когда доля равна "1" (т.е. или только нал, или только безнал), тогда бери саму сумму продажи. Когда доля не равна "1" (твой пример 0.14...), тогда в качестве нала бери расчетный результат (умножение этой доли на сумму продажи), а в качестве безнала вычитай от суммы продажи посчитанную долю нала
|
|||
10
Cyberhawk
28.02.15
✎
17:41
|
Тогда копейка не останется
|
|||
11
Креатив
28.02.15
✎
17:41
|
(0)Кстати, алгоритм со вложенными циклами не очень эффективен в данном случае. Лучше параллельный обход. То есть вместо внутреннего цикла просто сдвигаешь по необходимости указатель на строку с товаром.
|
|||
12
Мимохожий Однако
28.02.15
✎
17:43
|
Какой смысл знать как платили за товар? ИМХО, нет смысла, т.к. нельзя повлиять на способ оплаты товара.
|
|||
13
Cyberhawk
28.02.15
✎
17:44
|
(12) для сопоставления выхлопа от банковского терминала - они ж процент платят от оборота
|
|||
14
Cyberhawk
28.02.15
✎
17:45
|
+(13) хотя это и без разбивки по товарам видно, да
|
|||
15
Web00001
28.02.15
✎
17:45
|
(9)Наверное самый простой вариант. Есть еще вариант округления использовать только в выражениях представления. Тогда все остальное будет работать как надо.
(12)Если не знаешь как решается задача, значит это не нужно. Все логично. Пришел человек и говорит я хочу видеть чеки вот так. Что мне ему сказать? Тебе это не надо? |
|||
16
Cyberhawk
28.02.15
✎
17:48
|
(15) то, что он будет видеть в отчете по чекам разделение оплаты по каждому товару из этого чека на нальную/безнальную часть - это будет уже расчетные данные (по определенному алгоритму - в данном случае по весу стоимости), а не исходные. Человек твой это осознает?
|
|||
17
Мимохожий Однако
28.02.15
✎
17:48
|
(15)Я в таком случае не стесняюсь спросить Зачем? Если он меня убедит - я делаю.
|
|||
18
Мимохожий Однако
28.02.15
✎
17:49
|
Если жаба душит платить за терминал, то пусть не ставит ))
|
|||
19
Web00001
28.02.15
✎
17:51
|
(16)В данном случае нет исходных данных, нам в любом случае придется додумывать как легли деньги. Потому что оплачивается весь чек а не какая то определенная вещь.
(17)Все по разному работают, тебя надо убедить, мне заплатить. |
|||
20
Cyberhawk
28.02.15
✎
17:53
|
(19) Я про это и говорю в (16): мол, разбивка по товарам - это расчет, прикидка. А (15) говорит о том, что это не имеет смысла.
А ты спрашивал, зачем такое человеку этому надо? |
|||
21
Web00001
28.02.15
✎
17:55
|
(20)Клиент говорит хочу открыть печатную форму дока, отчет о розничных продажах и увидеть вот это https://dl.dropboxusercontent.com/u/4717681/2015-02-18%2018.11.03.jpg
|
|||
22
Cyberhawk
28.02.15
✎
17:56
|
(21) скорее всего ему не нужны-таки суммы нальной/безнальной части, а нужен лишь признак, что этот товар был в чеке, часть которого (или полностью) была оплачена безналом.
Иначе что он будет делать с этими суммами, какие решения принимать на их основе? |
|||
23
Web00001
28.02.15
✎
18:01
|
(22)Не могу указывать клиенту, что ему это не надо, когда он говорит надо.
|
|||
24
Web00001
28.02.15
✎
18:02
|
+(23)Изначально в отчете как раз была общая сумма, его это не устроило.
|
|||
25
Креатив
28.02.15
✎
18:05
|
(23)А надо мочь. Чтобы не тратить своё время на всякую ерунду. Просто необходимо научиться задавать правильные вопросы. Типа. "А какая польза от этой информации?"
Мой опыт общения с персонажами с такими запросами. Сначала они:"А можно такое же, но с перламутровыми пуговицами?". А потом:"А почему так дорого получилось?" |
|||
26
Web00001
28.02.15
✎
18:06
|
+(25)Так с перламутровыми пуговицами же!
Нет спасибо. Кушать хочется. |
|||
27
Web00001
28.02.15
✎
18:12
|
(26)Было бы тут, что то действительно из области извратов, можно было бы и пообщаться а так... сделал работу забрал деньги, о том что данные расчетные заказчик предупрежден, но так как случай один из двух, трех сотен, никто ему значения придавать не будет. Это не тот момент где мне требуется помощь, я в состоянии определить, где можно заработать а где надо объяснить заказчику, что он не прав, но за овер100500 мильонов, можно реализовать без гарантий.
|
|||
28
Креатив
28.02.15
✎
18:14
|
Интересно было бы потом узнать, сколько ты загнёшь за этот перл? И заплатят ли тебе столько?
|
|||
29
Web00001
28.02.15
✎
18:15
|
(28)Какой перл? + одна временная таблица с расчетами?
|
|||
30
Мимохожий Однако
28.02.15
✎
18:30
|
Даже, если будут платить, я не буду делать подобную бессмысленную работу. Это не профессионально.
|
|||
31
Web00001
28.02.15
✎
18:36
|
(30)Мне сложно тебе возражать я не понимаю, что не профессионального, в том, что бы показать данные в отчете в таком виде, в каком это просит заказчик? Я думал отчеты для этого и нужны.
>>Даже если будут платить Не совсем понял обычно, что не платят что ли? |
|||
32
WebberNSK
28.02.15
✎
18:38
|
(11) напиши, что имел в виду, что то я не понял как тут можно сделать то, что ты сказал
|
|||
33
Мимохожий Однако
28.02.15
✎
18:50
|
(31)Не надо притворяться не понимающим. Если работа бестолковая, то нет смысла её делать, даже если за эту работу платят.
|
|||
34
Garykom
гуру
28.02.15
✎
18:53
|
(33) работа дворника не бестолковая?
нафига убирать снег если его еще навалит, да и потом один фиг сам растает? |
|||
35
Web00001
28.02.15
✎
18:58
|
(33)Ты уж меня извини, непонятливого, но вот тебе говорят, вот данные, покажи их в таблице, в таком то виде какой смысл упираться то?
С моей точки зрения где то 70% отчетов\обработок не нужны или должны нести иной функционал, мне что теперь вообще не работать или делать как нравится мне а не заказчику? |
|||
36
xraf
28.02.15
✎
19:16
|
В скд кажется можно использовать вызовы модулей, может проще функции какие-нить наваять и их в ресурсах вызывать?
|
|||
37
Cyberhawk
28.02.15
✎
19:21
|
(36) вызов только общих модулей, придется замок ломать
|
|||
38
Web00001
28.02.15
✎
19:30
|
(37)Да это, то ладно, как я понял, модуль вызывается для каждой строчки отчета, это +1 серверный вызов на каждую строчку отчета.
|
|||
39
xraf
28.02.15
✎
19:40
|
(38) ага, не комильфо конечно
|
|||
40
ShoGUN
28.02.15
✎
19:59
|
(38) Можно результат компоновки выводить в ТЗ или Дерево, обрабатывать, потом выводить ручками на печать.
|
|||
41
kumena
28.02.15
✎
20:13
|
>> Что делать с округлениями?
Рубашка 1000 / 7000 0,1428571428571429 = 571,4285714285716 + 428,5714285714287 легко может получиться из тысячи в 999.99 |
|||
42
kumena
28.02.15
✎
20:15
|
я писал запросы с нивелированием округлений, это решемо.
скидывал разницу на большую из сумм. считаешь сколько получилось округлением и сравниваешь с общей суммой, если сумма отличается, то корректировка большей из них. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |