Имя: Пароль:
1C
1С v8
Как засунуть алгоритм в СКД
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
я писал запросы с нивелированием округлений, это решемо.
скидывал разницу на большую из сумм. считаешь сколько получилось округлением и сравниваешь с общей суммой, если  сумма отличается, то корректировка большей из них.
Независимо от того, куда вы едете — это в гору и против ветра!