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


1С:Предприятие ::

Метки: 

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

Я
   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 или кнопку "Обновить" в браузере.
Рекламное место пустует