Имя: Пароль:
1C
1C 7.7
v7: Как посчитать периодические значения?
0 Cyr
 
17.04.24
13:28
Есть договор с периодическим значением цены за день.
Цена в период действия договора меняется.
Как посчитать стоимость услуги за месяц?
Нужно выводить сумму по каждой цене.
1 DJ Anthon
 
17.04.24
13:37
вывести все количества оказанных услуг, умноженных на стоимость услуги в день оказания услуг, и их сумму
2 mishaPH
 
17.04.24
13:44
(0) так в документах вы же отразите сколько дней
ну вот и выставляйте частями столько то по такой цен столько то по такой.
3 mishaPH
 
17.04.24
13:45
вообще странная задача. только недалекие люди меняют цены в середине периода
4 Cyr
 
17.04.24
13:49
(3) согласен с вами. я долго ругался. но начальство прибыль интересует.
(1) договор на квартал. в течении месяца менялась цена. как разделить эти периоды? в этом загвоздка. учёт только по договорам.
5 Злопчинский
 
17.04.24
13:49
(3) это пока доллар более-менее стабильный. как только начнет ползать сильно - рублевые цены сразу будут скакать хоть каждый день, проходили уже
6 Cyr
 
17.04.24
13:50
(2) ответил выше.
7 Cyr
 
17.04.24
13:53
Я вот знаю как вывести цены.
Процедура ВыбратьЦены(Тариф);
    Цены = СоздатьОбъект("Периодический");
    Цены.ИспользоватьОбъект("Цена", Тариф);
    // Просматриваем историю цены выбранного тарифа
    Цены.ОбратныйПорядок(1);
    Цены.ВыбратьЗначения();
    Пока Цены.ПолучитьЗначение() = 1 Цикл
        Цена = Цены.Значение;
        ДатаЦены = Цены.ДатаЗнач;
        Сообщить(Строка(Тариф)+":"+Строка(Цена)+" c "+Строка(ДатаЦены));
    КонецЦикла;
КонецПроцедуры
Но как посчитать сумму за месяц?
8 mishaPH
 
17.04.24
13:56
(4) ну тут просто.

выставляете счет за услугу за период.Если цена в днях
то высчитываете

//*******************************************
Процедура Сформировать()
    ДатаОт = дата();
    датаПо = Дата();
    
    Сумма = 0;
    Для Дата0 = ДатаОт По датаПо Цикл
        Сумма = Сумма + (Цена.Получить(Дата0));
    КонецЦикла;
КонецПроцедуры

цена это объект справочника цен который вы для этого товара уже отобрали. Просто вычисляете его периодичность
в типовой это обычно глПолучитьЦену(тип,товар,дата)
9 Злопчинский
 
17.04.24
13:54
(0) если не стоит вопрос эффективного кода - то всё же на уровне копрокода порешать можно. Тупо перебрать дни периода.
ТЗ, колонки Цена,Количество,Сумма
Цикл ПоДнямПериода
  Цена = ТипаПолучитьЦенуНаДеньПериода
  ТипаНайтиДатуВТЗдляЦены
  Если Не Нашли Тогда ДобавитьСТрокуСценой КонецЕсли;
  ПолучитьСтрокуТЗ
  ПрибавитьпоСТрокеПоказателиСуммыИлиЧегоТамНАдо
КонецЦикла
.
всё.
проблемы в чем?
10 Cyr
 
17.04.24
13:54
Если что, у нас договор аренды с ценой за каждый день
11 mishaPH
 
17.04.24
13:55
(7) зачем вам это
12 Злопчинский
 
17.04.24
13:57
(4) не надо делить периода, в которые менялась цена.
собери цены-показатели за ПЕРИОД отчета как выше нарисовал
автоматом получаться периода изменения цен. и выводи в отчет как удобно по ТЗ, хоть даже универсальным отчетом по ТЗ
13 Irbis
 
17.04.24
13:57
(3) Ну, почему же. Хоть каждые пять минут можно менять, главное учет и контроль. У некоторых ещё и скидки от общего объема бывают
14 Cyr
 
17.04.24
13:57
(8) Тут ещё надо вывести периоды. Т.е.
договор1
цена1, количество дней, сумма
цена2, количество дней, сумма
...
ценаN, количество дней, сумма
...
договорN
...
15 skafandr
 
17.04.24
13:58
(0) Берете объект периодический, используете его по цене. В цикле смотрите даты изменения цены и сами цены, считаете среднюю
16 mishaPH
 
17.04.24
13:58
вам отчет или выставить клиенту ? посчитать одно отчет по изменению другое
17 Злопчинский
 
17.04.24
13:58
я бы вообще не морочился.
как выше нарисовал только еще проще
в ТЗ тупо пихал бы строки НА КАЖДЫЙ ДЕНЬ
Цена-Дата-Количество-Сумма
потом эту плоскую таблицу подсунул в универсальны йотчет по ТЗ, он сам сгруппирует как надо...
https://infostart.ru/1c/tools/14794/
18 Irbis
 
17.04.24
13:59
(14) Число дней  — разница между датами изменения значения цены и/или началом и кончалом периода
19 Злопчинский
 
17.04.24
14:00
(14) похер. сделай плоскую ТЗ
Договор-День-Цена-Количество-Сумма
подсунь в униотчет по тЗ. а там группируй как хочешь.
работы максимум на час с перекурами чтобы собрать плоскую ТЗ.
.
если нужно суперопуперфедипердозный отчет с выпендрежами  ихерней полной тогда трахаться выводит/строить ручками.
20 Cyr
 
17.04.24
14:02
(16) нам отчёт для главбуха.
21 Irbis
 
17.04.24
14:04
(20) Нехер баловать, пусть в ёкселе сама считает
22 Cyr
 
17.04.24
14:04
(17) наверное так и придётся поступить
23 Злопчинский
 
17.04.24
14:09
(22) такое ощущение что какая-то глобальная проблема...
можно все в нндексированную ТЗ пихать совершенно аналогично, а потом ИТЗ.Группировать(...) и выводить по строкам сгруппированной ТЗ рекурсивно ТЗПотомки
24 Arbuz
 
17.04.24
14:34
(23) Ну... можно жыш ещё прямым запросом всё это сразу получить по списку контрагентов, с отбором по каким-нибудь свойствáм договоров.
25 Cyr
 
17.04.24
17:03
(23) Там ещё в другом документе, типа табеле ведётся каждодневный учёт оплаты за месяц. Но не суммой, а буквой "Н", если не оплатил. Так вот нужно эти "Н" считать за каждый день, брать из договора периодическую цену за день и считать суммы оплаты и долга...
26 АгентБезопасной Нацио
 
17.04.24
17:29
(24) (23) каждый делает "как может". Но возникает вопрос - нахрена за это берутся люди, которые вообще нихрена не могут.
27 Злопчинский
 
17.04.24
18:32
(25) ну и что, склеить данные как надо и запихнуть в ту же самую таблицу плоскую по дням - и далее как выше
28 Злопчинский
 
17.04.24
18:34
(25) ну сденлай в ТЗ две колонки, СуммаДолг и СуммаОплата и заполняй ту или другую. Или вообще хватит одной колонки сумма - если нудевое значени - значит оплачено, ненулевое - сумма долга.
29 Злопчинский
 
17.04.24
18:35
(25) вы там определитесь.. а то у вас уже три сущности - сумма услуги, сумма оплаты и сумма долга.
30 Злопчинский
 
17.04.24
18:38
с учетом буквы Н - СуммаУслуги = СуммаДолга, т.к. буква Н не подразумевает частичный дог/частичную оплату. Т.е. в се таки две сущности.. или три?
.
и вопросы желательно излагать изнеачально полностью, а не расширять по ходу...а то построили велосипед, а оказывается нужен был танк
31 Cyr
 
17.04.24
20:07
(30)"Н" в табеле это неоплата за весь день. Т. е. надо пройтись по каждому дню, найти, какой договор этому дню соответствовал, выяснить цену на этот день, и потом посчитать сумму положенную по договору и сумму оплаченую, а так же неоплаченную.
32 Злопчинский
 
18.04.24
00:08
(31) ну и что? тупо перебираешь так как описал и все...
.
очередной день, тупо считаем сумму услуги.
- если стоит Н - сумма услуги и будет неоплаченная сумма.
- если не стоит Н - сумма услуги и будет оплаченная сумма.
все.

Изложенное тобой соответствует тому что у вас нет таких ситуаций когда сумма оплаты, падающая на день (оплата день в день или ПРЕДОПЛАТА) НЕКРАТНА сумме услуг за сколько-то дней
т.е. 1 число: сумма услуги = 20, 2 число: сумма услуги = 25 и если 1 числа оплатили 45 руб = ОК, а если оплатили 42 руб = жопа, так как 2 число получилось оплачено частично, а по вышеизложенному тобой может быть
<Н> = неоплата за весь день или
<пусто> = оплачен весь день
и получается и не Н и не Пусто (частичную оплату нельзя трактовать как полную неоплату ибо в общем случае она подвиснет как неучтенная)
.
учитывай такой нюанс, я бы при формировании отчета при попадании на такую ситуацию ТУПО "ЛОМАЛ" ОТЧЕТ с выдачей содержательного сообщения, пусть правят бухи, ибо иначе утонешь в этом гуано придуманном неизвестно кем.
.
Скорее всего у вас аренда по постоплате. В этом случае значит если прошел платеж за период, превышающий нужную сумму за период на дельту суммы некратную дням последующего периода - см.выше - с нова (_о_)...
33 Злопчинский
 
18.04.24
00:14
(10) "Если что, у нас договор аренды с ценой за каждый день"
и что? у вас в договоре оговорено что вы получаете оплату каждый день? (не ЗА каждый день, а ПЛАТЯТ ВАМ КАЖДЫЙ ДЕНЬ)..? - или вы точки на рынке продаете в аренду на каждый день?
.
допустим за период неделя сумма услуг общая составила 1000 руб. По окончании недели вам оплатили 950 руб. - вам что, расписывают как именно эти 950 рублей заплатили за какой день сколько? более ранние долги погашаются раньше. 50 рублей вам недоплатили за последний день (или за последние два/три/четыре...)
34 Злопчинский
 
18.04.24
00:18
(10) ". но начальство прибыль интересует."
не имея себестоимости - вы прибыль не посчитаете.
Если под прибылью вы понимаете ВЫРУЧКУ соотнесенную с суммой услуг, то - см.(33) - ваша прибыль (950-1000) составит -50 рублей и не надо по дням раскладывать чтобы это понять... А если получили в оплату 1000-1000=0 то ваша прибыль = 0. Или 1000 - это смотря как считать... ;-)
35 Злопчинский
 
18.04.24
00:20
А может я тут ахинею несу... Или ахинея несет меня..
36 Злопчинский
 
18.04.24
00:20
(31) вообще не вижу пока никаких проблем принципиальных посчитать нужное (с учетом п.32)
37 Garykom
 
18.04.24
00:25
(0) Посчитать среднюю цену за месяц
Если полный выставить по средней
Если неполный месяц - % от кол-ва дней (когда оказывали услугу) в месяце
Причем брать "стандартный месяц" в 30 дней ))

ЗЫ
Не забыть прописать этот изврат в договоре...
38 Злопчинский
 
18.04.24
02:20
(37) "Если неполный месяц - % от кол-ва дней (когда оказывали услугу) в месяце"
- тут средняя по всем дням считается?
- тут сразу не соображу - будет ли тут косяк (окажутся в пролете если цена когда оказывали/не оказывали услугиу отличается от цены когда не оказывали/оказывали услугу..?
39 АгентБезопасной Нацио
 
18.04.24
08:37
(33) ну так по ФИФО. неоплачены последние дни (если в документе платежа период не указан явно. Тогда возникает недоплата-переплата, которая не учитывается в распределении оплат, и висит "до ручного решения"). И еще нюанс - если в условиях договора не указано явно, что "при изменении цен в оплченном периоде поставщик имеет право на пересчет", то при предоплате - пофиг на изменение цен в течение периода. Заплатили за месяц вперед, и пусть там хоть как цены прыгают.
Но в общем, все это тривиально. Вот чего я понять не могу, так почему это 6 часов обсуждается...
40 Cyr
 
19.04.24
18:36
(33)> у вас в договоре оговорено что вы получаете оплату каждый день? (не ЗА каждый день, а ПЛАТЯТ ВАМ КАЖДЫЙ ДЕНЬ)..? - или вы точки на рынке продаете в аренду на каждый день?

Именно так. каждый день за каждый день. можно сразу за месяц. Частичной оплаты за день не может быть. т.к. платят в кассу за определённое место (аренда). кассир не примет половину оплаты за день.
(34) да, выручку.
(32) ну я так и делаю. просто раньше всегда цена не менялась в течении месяца, и поэтому цену на начало месяца просто умножал на количество дней с Н и без Н. на этом все отчёты и счета были построены. но теперь вдруг начальство решило цену поменять в середине месяца. и я приплыл немного. думал тупо разбить на периоды между ценами и умножить на количество дней в этом периоде. поэтому я и задал такой вопрос в начале темы.
41 Irbis
 
18.04.24
09:30
(40) Считать всегда надо по минимальной единице предмета расчетов. День, час, месяц или м2 без разницы какая цена, причём цена должна быть без учёта налогов и без долей копеек. Они отдельно и сверху, тогда и вопросов всяких неудобных возникать не бедуе
42 Cyr
 
18.04.24
09:49
(41) Так мы и так считали по дням. Вопрос то, что цена в периоде поменялась. И чтобы не переписывать все отчёты с нуля, я ищу способ разбить договор на периоды по ценам.
43 Irbis
 
18.04.24
09:55
(42) Из того что ты пишешь всё как раз наеборот, вы шли по пути наименьшего сопротивления. Раз цена одинаковая, то схлопнем её и просто посчитаем количество дней.
44 Cyr
 
18.04.24
10:01
(43)по дням мы считали количество "Н". Цену по дням мы не считали, потому что она не менялась...
45 Irbis
 
18.04.24
10:51
(44) Именно в этом и ошибка, сделали бы сразу по уму, не пришлось бы переделывать.
46 Злопчинский
 
18.04.24
17:28
блин
можно подумать у вас отчет считается пять часов, а вы хотите сделать 10 секунд. больше тут обсуждений, чем времени сделать потратить,
47 Cyr
 
18.04.24
20:47
(46) да я уже сделал. Как вы говорили. Сначала делаем отбор договоров на место, потом за каждый день смотрим цену и наличие Н, помещаем эти параметры в новую строку ТЗ. Но хочется оптимизировать, в новую строку ТЗ помещать эти параметры только когда новая цена появляется. А до этого увеличивать счётчики по существующей цене.
48 Ivan_495
 
18.04.24
21:04
А регистр сделать и собрать из него отчёт не пробовали?
49 Cyr
 
19.04.24
18:28
(48) не. Я использовал только справочники и документы без проведения.
50 Злопчинский
 
18.04.24
23:18
(47)  в новую строку ТЗ помещать эти параметры только когда новая цена появляется.
- и что мешает?
51 Злопчинский
 
18.04.24
23:19
(47) ". А до этого увеличивать счётчики по существующей цене."
- а это зачем?
52 Злопчинский
 
18.04.24
23:20
(48) а че, норм.
у меня коллега есть, который в самописке резервы считает на лету всегда когда надо, ни тебе гемора со снятием резервов и прочим...
53 Irbis
 
19.04.24
07:14
(49) И биться сердце перестало, тут не сцаными тряпками, тут автоматизатора бейсбольной битой потчевать требуется.
Независимо от того, куда вы едете — это в гору и против ветра!