Вход | Регистрация



Регистр накопления остатки не захватывает последний день

Регистр накопления остатки не захватывает последний день
Я
   asder117
 
05.09.18 - 22:10
Доброе время суток. Есть запрос
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
|    Агро_ПередачаДополнительногоОборудованияОстатки.Контрагент,
|    Агро_ПередачаДополнительногоОборудованияОстатки.Договор,
|    Агро_ПередачаДополнительногоОборудованияОстатки.Оборудование КАК Номенклатура,
|    Агро_ПередачаДополнительногоОборудованияОстатки.КоличествоОстаток,
|    Агро_ПередачаДополнительногоОборудованияОстатки.Объект
|ИЗ
|    РегистрНакопления.Агро_ПередачаДополнительногоОборудования.Остатки(&Начало,Договор В (&Договоры)) КАК Агро_ПередачаДополнительногоОборудованияОстатки";

Запрос.УстановитьПараметр("Договоры", МассивДоговоров);
    
////

 ДеньРасчета  = 0;
    
    Пока ДеньРасчета <= (ДнейВМесяце-1) Цикл
        
        Если РасчетСДняСдачи Тогда
            Период = КонецДня(ПериодВзаиморасчетов + ДеньРасчета*24*60*60);
        Иначе
            Период = КонецДня(ПериодВзаиморасчетов + ДеньРасчета*24*60*60);
        КонецЕсли;

        Запрос.УстановитьПараметр("Начало", Новый Граница(Период, ВидГраницы.Включая));
        Таблица1 = Запрос.Выполнить().Выбрать();
        Пока Таблица1.Следующий() цикл
        //КолвоДни = Таблица1.КоличествоОстаток;

        строкаТ = ТаблицаРасчетовПредварительная.Добавить();
        строкаТ.Арендатор = Таблица1.Контрагент;
        строкаТ.Договор = Таблица1.Договор;
        строкаТ.Номенклатура = Таблица1.Номенклатура;
        строкаТ.Объект = Таблица1.Объект;
        строкаТ.РезультатДней = Таблица1.КоличествоОстаток;
        строкаТ.СуммаИтого = 1;
        КонецЦикла;
        ДеньРасчета = ДеньРасчета + 1;
        
    КонецЦикла;

Если по регистру нет движения расход, то последний день к примеру 31.08.2018 23:59:59 результат захватывает и данные есть.
Если же есть движение "расход" по данной дате, то за этот день данные не попадают в результат. Последний день за который есть данные (запрос получает) 30.08.2018 23:59:59. Что можно сделать и как решить эту проблему. Проводить документ 01.09.2018 00:00:00 не предлагать. От этого зависит расчет суммы оплаты.

Документ делает движения
Движения.Агро_ПередачаДополнительногоОборудования.Очистить();
    Для Каждого ТекСтрокаДопОборудование Из ДопОборудование Цикл
        Движение = Движения.Агро_ПередачаДополнительногоОборудования.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        //08072018 проба для правильного расчета

        Движение.Период = КонецДня(Дата);
        Движение.Контрагент = Контрагент;
        Движение.Договор = Договор;
        Движение.Объект = ТекСтрокаДопОборудование.Объект;
        Движение.Оборудование = ТекСтрокаДопОборудование.Оборудование;
        Движение.Количество = ТекСтрокаДопОборудование.Количество;
    КонецЦикла;
 
 
   PR
 
1 - 05.09.18 - 22:23
Уговорил, рассказывай, как решил
   asder117
 
2 - 05.09.18 - 22:27
(1) что решил? я решение и спрашиваю
   PR
 
3 - 05.09.18 - 22:28
(2) Спрашиваешь? Где? В (0) же нет знаков вопроса.
   asder117
 
4 - 05.09.18 - 22:29
(3) Ну звиняйте. Что можно сделать и как решить эту проблему?
   hhhh
 
5 - 05.09.18 - 23:14
(4) исправить ошибку. Чтобы остатки брались на 1 сентября.
   catena
 
6 - 06.09.18 - 05:34
(4)Делать заполнение от дат, а не от наличия остатка. Сделать один запрос вместо тридцати. Не писать странное, типа
Если РасчетСДняСдачи Тогда
            Период = КонецДня(ПериодВзаиморасчетов + ДеньРасчета*24*60*60);
        Иначе
            Период = КонецДня(ПериодВзаиморасчетов + ДеньРасчета*24*60*60);
        КонецЕсли;
   los_hooliganos
 
7 - 06.09.18 - 05:41
Надо сделать запрос остатки на каждый день.
Точкой отсчета вообще должно быть наличие оборудования на начало дня судя по той логике/методологии которую вы рассказываете.
   Пробел
 
8 - 06.09.18 - 06:14
Вас волнует, что Запрос.Выполнить() оказывается пустым, я правильно понял? Тогда попробуйте использовать виртуальную таблицу ОстаткиИОбороты с пустым началом периода, с периодичностью "Период" и методом дополнения "ДвиженияИГраницыПериода". Она покажет остатки по всем существующим ключам, даже если они нулевые.

А вообще лучше получить "ТаблицаРасчетовПредварительная" одним запросом. В первом пакете определить список дней, от НачалоПериода до КонецПериода, во втором получить ОстаткиИОбороты за период с периодичностью "День", в третьем к списку дней присоединить ключи из второго, в четвертом - к третьему пакету присоединить остатки из второго.
   asder117
 
9 - 06.09.18 - 07:00
(6) это битовский разработчиков код я его менять не стал. "Делать заполнение от дат, а не от наличия остатка"- это как лучше? (7) так он и берет на каждый день выкидывает ее в тз а потом сворачивает (8) да когда в значение периода приходит 31 число когда прошло движение расход. а остальное надо размылять но пока не догоню
   catena
 
10 - 06.09.18 - 07:18
(9)"это как лучше?" - подробно написано в (8), прям пошаговая инструкция.
 
 Рекламное место пустует
   asder117
 
11 - 06.09.18 - 21:31
(10) Это то я понял
согласно (8) я сделал
ВЫБРАТЬ
    Агро_ПередачаДополнительногоОборудованияОстаткиИОбороты.Период,
    Агро_ПередачаДополнительногоОборудованияОстаткиИОбороты.Контрагент,
    Агро_ПередачаДополнительногоОборудованияОстаткиИОбороты.Договор,
    Агро_ПередачаДополнительногоОборудованияОстаткиИОбороты.Объект,
    Агро_ПередачаДополнительногоОборудованияОстаткиИОбороты.Оборудование,
    Агро_ПередачаДополнительногоОборудованияОстаткиИОбороты.КоличествоНачальныйОстаток,
    Агро_ПередачаДополнительногоОборудованияОстаткиИОбороты.КоличествоКонечныйОстаток,
    Агро_ПередачаДополнительногоОборудованияОстаткиИОбороты.КоличествоОборот,
    Агро_ПередачаДополнительногоОборудованияОстаткиИОбороты.КоличествоПриход,
    Агро_ПередачаДополнительногоОборудованияОстаткиИОбороты.КоличествоРасход
ИЗ
    РегистрНакопления.Агро_ПередачаДополнительногоОборудования.ОстаткиИОбороты(&НачалоПериода, &КонецПериода,День, ДвиженияИГраницыПериода, ) КАК Агро_ПередачаДополнительногоОборудованияОстаткиИОбороты
Согласен обороты я получил за все дни т.е. на начало периода и на конец периода т.е. последнюю дату я получил это есть гуд. А теперь как я понял опять в конец периода подставлять каждое число и потом сворачивать таблицу т.к. в результате запроса количество дней не получить.
Буду думать над вторым предложение и общим запросом
   asder117
 
12 - 06.09.18 - 22:02
(8) А такой общий получился...и блин работает ведь..не пойму почему разрабы сразу так не сделали
ВЫБРАТЬ РАЗЛИЧНЫЕ
    НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, ДЕНЬ) КАК Поле1
ПОМЕСТИТЬ ТаблицаДней
ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода
;

////////////////////////////////////////////////////////////////////////////////

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

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ТаблицаДней.Поле1 КАК Поле1,
    ТаблицаЗанятостиВесов.Контрагент КАК Контрагент,
    ТаблицаЗанятостиВесов.Договор КАК Договор,
    ТаблицаЗанятостиВесов.Оборудование КАК Оборудование
ИЗ
    ТаблицаДней КАК ТаблицаДней,
    ТаблицаЗанятостиВесов КАК ТаблицаЗанятостиВесов
ИТОГИ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Поле1)
ПО
    Контрагент,
    Договор,
    Оборудование
   asder117
 
13 - 06.09.18 - 22:03
(12) Вопрос остается только если рваный период...т.е в середине меся взял или отдал или добавил или и то и другое
   CepeLLlka
 
14 - 06.09.18 - 22:14
(13)Период задаёшь датой или границей? Попробуй границей..
   asder117
 
15 - 06.09.18 - 22:22
(14) рано радовался. сейчас смотрю чел взял оборудование 2 августа, в результате у него должен быть 30 дней а в результате запроса показывает что и 1.08 тоже было оборудование на руках..т.е. количество 31.в чем собака порылась не пойму
   asder117
 
16 - 06.09.18 - 22:42
(14) а период датой. границей попробовал не помогло
   unregistered
 
17 - 06.09.18 - 23:31
Я правильно понимаю, что в последний день регистр закрывается в ноль (списываются в расход все остатки), но вы хотите видеть какие-то остатки на конец этого дня?
Если это так, то поведение системы нормально. Так и должно быть. Раз регистр закрылся в ноль остатков быть не должно и результат запроса пустой. Виртуальные таблицы нулевые остатки не выводят.
Сама задача мне не понятна. Что конкретно нужно. В зависимости от задачи решения могут быть разными.
   unregistered
 
18 - 06.09.18 - 23:40
(15) > количество 31.в чем собака порылась не пойму

В том, что в таблице ТаблицаДней 31 день.
В последнем запросе не указан вид и условие соединения таблиц. А значит выводятся все записи из обеих таблиц.
   unregistered
 
19 - 06.09.18 - 23:53
Поищи на тему "Запрос остатков на каждый день".
В найденный запрос добавь условие исключающее записи где остаток нач. и кон., и обороты нулевые
   asder117
 
20 - 07.09.18 - 09:24
(17) Задача вкадце такая. Контрагентам передается определеннное оборудование. оно может быть передано в начале года в середине месяца и т.д. Также это оборудование может быть возвращено в любое время. Цель в конце каждого месяца получить итог сколько дней он этим оборудованием пользовался. Приэтом учитывается и деть сдачи и день возврата
   asder117
 
21 - 07.09.18 - 09:27
(17) а остатки само собой если в ноль то не будет но у многих оборудование на месте и исчисление идет.
Расчет дней помесячно
   asder117
 
22 - 07.09.18 - 09:31
(17) И еще оборудование может добавляться и убавляться в любой день
   тарам пам пам
 
23 - 07.09.18 - 10:11
(20) в описанном тобой виде нужно отслеживать каждую  конкретную единицу оборудования. Иначе получится ситуация:
передали оборудование 1 01.01.2018 в количестве 10 ед.,
передали оборудование 1 10.01.2018 в количестве 10 ед.,
вернули оборудование 1 15.01.2018 в количестве 5 ед.

Непонятно, вернули оборудование, которое передали 01 числа или 10 числа? Соответственно использовали его 15 дней или 5 дней?
   asder117
 
24 - 07.09.18 - 10:37
(23) в точку. С эти и мучаюсь. У меня надо в конце получить к примеру оборудование в начале 1 числа взяли 2 штуки 10 числа еще одну штуку. В конце надо видеть что 2 штуки оборудования использовалось весь месяц а одна штука только 21 день
   тарам пам пам
 
25 - 07.09.18 - 14:13
(24) А что мучаться - с текущей структурой ты эту задачу никак не решишь. Это орг. вопрос - готов ли заказчик учитывать каждую единицу оборудования.

Если готов - то пусть вносят каждую единицу оборудования в виде отдельного элемента справочника Оборудование с идентификацией по серийному номеру, например. Тогда и отчет можно будет достаточно просто сделать.

Если не готов - то и отчета, показывающего адекватные данные, не построишь. Можно только придумывать всякую хрень типа ФИФО, которая будет иметь мало общего с реальностью.
   Вафель
 
26 - 07.09.18 - 14:16
нужны остатки на каждый день? чтоб посчитать среднюю?
   asder117
 
27 - 07.09.18 - 17:03
(26) я задачу описал выше  (20) средняя тут не нужна
(25) есть одна единица номенклатуры которая учавствует в движении. а насчет того что если бы номенклатура была разная то я понимаю там легче. тут номенклатура как услуга идет вообще


Список тем форума
Рекламное место пустует  Рекламное место пустует
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует