Имя: Пароль:
1C
1С v8
Вопрос по запросу к регистру накопления.
0 asder117
 
04.09.15
18:16
Я в прошлый раз задал вопрос Мне в 1с БП 2.0 надо организовать сдачу в аренду весов (для торговли). Спасибо всем кто ответил. Меня натолкнули на мысль и я ее сделал получая данные из регистра по дням но вот вопрос:
Запрос
ВЫБРАТЬ РАЗЛИЧНЫЕ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
ПОМЕСТИТЬ Дни
ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Движения.Договор,
    ДНИ.ДатаКалендаря КАК ДатаКалендаря,
    Движения.Оборудование,
    Движения.КоличествоНачальныйОстаток,
    Движения.КоличествоКонечныйОстаток,
    Движения.КоличествоОборот,
    Движения.КоличествоПриход,
    Движения.КоличествоРасход
ИЗ
    Дни КАК ДНИ
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Агро_ПередачаДополнительногоОборудования.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК Движения
        ПО (Движения.Период <= ДНИ.ДатаКалендаря)

УПОРЯДОЧИТЬ ПО
    ДатаКалендаря

движения по регистру у меня (2 пришло 1 числа, 12 - 1 ушел, 27 - 1 еще ушел) т.е конечный остаток 0.
В консоли запросов я получаю следующее: до 12 числа все нормально, по одной записи в день. а с 12 чехарда. с 12 по 27 число - по две записи в день, а с 27 когда уже 0 вообще 3 записи. Что не так подскажите плз. Заранее спасибо.
1 Брегорьян
 
04.09.15
18:18
естьнулла нет. но, может, так задумано
2 Tateossian
 
04.09.15
18:32
А зачем такое условие "<="? Ты для каждого дня календаря получаешь все записи за предыдущий период.
3 RomanYS
 
04.09.15
19:13
(0) "Что не так подскажите плз"
Всё так: результат точно соответствует приведенным запросу и движениям. Например для 27-го числа три записи движений соответствуют твоему соединению.

Что-то не так у тебя в ожиданиях...и понимании, как минимум соединений. Непонятно, что вообще ты хотел получить таким запросом.
4 asder117
 
04.09.15
20:42
(3) я хочу получить остаток на каждый день просто
5 asder117
 
04.09.15
20:51
(3) блин звиняйте вроде ступил. надо было просто по регистру остаток взять и по периоду циклом пройтись на каждый день
6 RomanYS
 
04.09.15
20:54
(5) Зачем тебе вообще остатки на каждый день? Получай периоды и считай.
Запрос в цикле конечно может решить твою проблему. Но это со всех сторон плохое решение.
7 asder117
 
04.09.15
20:57
(6) Я просто думаю использовать такую конструкцию
    ДеньРасчета  = 0;
    
    Пока ДеньРасчета <= (ДнейВМесяце-1) Цикл
        
        Если РасчетСДняСдачи Тогда
            Период = КонецДня(ПериодВзаиморасчетов + ДеньРасчета*24*60*60);
        Иначе
            Период = НачалоДня(ПериодВзаиморасчетов + ДеньРасчета*24*60*60);
        КонецЕсли;
        
        ЗапросТР.УстановитьПараметр("Период", Период);
        Таблица = ЗапросТР.Выполнить().Выгрузить();
8 RomanYS
 
04.09.15
21:01
Идея такова:

ВЫБРАТЬ
    Движения.Период как ДеньС,
    ЕстьNULL(Минимум(Движения1.Период), &КонецПериода) как ДеньПо,
    Движения.Договор,
    Движения.Оборудование,
    Движения.КоличествоКонечныйОстаток КАК ОстатокНаКонецДня
ИЗ
РегистрНакопления.Агро_ПередачаДополнительногоОборудования.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК Движения
   ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Агро_ПередачаДополнительногоОборудования.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК Движения1
ПО
    Движения.Договор = Движения1.Договор
    И Движения.Оборудование = Движения1.Оборудование
    И Движения.Период < Движения1.Период

Если сможешь разобраться, получишь решение на порядок быстрее цикла по периодам. Иначе делай как знаешь.
9 asder117
 
04.09.15
21:05
(8) матюгается на поле не входит в группу Движения.Период
10 asder117
 
04.09.15
21:05
(8) а так в принципе идея интересная
11 RomanYS
 
04.09.15
21:06
добавь
Сгруппировать по
   Движения.Период,
    Движения.Договор,
    Движения.Оборудование,
    Движения.КоличествоКонечныйОстаток
12 asder117
 
04.09.15
21:13
(11) т.е. потом получить разность дат в днях, это число умножить на ставку за день и получить сколько арендатор должен за данный период. напомню задачу
Мне 1с БП 2.0. надо организовать сдачу в аренду весов (для торговли). так вот. Я сделал документ акт передачи весов арендатору и акт возврата весов арендатору. А дальше ступор. Если у меня арендатор ими полный месяц пользуется то никаких проблем, я делаю регистр ив конце месяца по срезу последних забираю. Но а если у меня движение весов происходит в середине месяца? к примеру:
1. арендатор взял 1 числа 1 весы, 10 еще одни. по срезу последних я с него должен взять за 2 весов. Мне надо чтобы за первые 10 дней у меня посчитались 1 весы а за вторые 2.
2. У арендатора были 2 весов он одни в середине месяца сдал. расчет тот-же.
а так спасибо большое за помощь
13 RomanYS
 
04.09.15
21:15
(12) удачи
не забудь узнать как учитывать дни выдачи/возврата
14 asder117
 
04.09.15
21:16
(13) в смысле?
разность дат то будет ДатаПо-ДатаС
15 asder117
 
04.09.15
21:21
(8) Кстати это работает когда дата окончания (возврата есть), а так он мне выдает два периода с 1 по 31 и с 31 по 31
16 RomanYS
 
04.09.15
21:24
(14) если сегодня взял - завтра вернул. Это один день или два?

Если взял в прошлом месяце, вернул 1-го. Это один день или 0?

Если взял 31-го. Это один день или 0?

(15) это идея, с границами там надо тонко поработать. Но сначала определиться с (13)
17 asder117
 
04.09.15
21:28
(16) учитывать дни выдачи/возврата - задается в константах и они булево и равно истина
(14) если сегодня взял - завтра вернул. Это один день или два? если с утра взял и вечером следующего дня вернул то 2 если с утра вернул то 1

Если взял в прошлом месяце, вернул 1-го. Это один день или 0? тоже самое что и первое

Если взял 31-го. Это один день или 0? 31 с утра день

(15) это идея, с границами там надо тонко поработать. Но сначала определиться с (13)
18 asder117
 
04.09.15
21:29
(16) когда в цикле по датам то вроде получается то что надо
19 RomanYS
 
04.09.15
21:33
(18) (17)  )))) и как ты в цикле по датам узнаешь утром/вечером у тебя взяли, а если в обед??)))
(18) если "получается", то не заморачивайся, делай как получается
20 asder117
 
04.09.15
21:47
(19) мне проще менеджеров зоствить, что если 1 день чтобы возврат следующим днем а дни получить
(НачалоДня(Датаконца)-НачалоДня(ДатаНачала))   /(60*60*24);
21 Мимохожий Однако
 
04.09.15
22:03
В чем смысл использования регистра накопления?
22 asder117
 
04.09.15
22:19
(21) так подскажите как по другому плз
23 asder117
 
05.09.15
00:12
(19) а как можно чтобы он последнюю запись к пример один день конца месяца не выводил