8.х Проводки не попадают в "остатки" журнала проводок

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем for_maricat, 4 дек 2012.

  1. TopicStarter Overlay
    for_maricat
    Offline

    for_maricat Опытный в 1С

    Регистрация:
    11 ноя 2010
    Сообщения:
    236
    Симпатии:
    0
    Баллы:
    26
    Доброе время суток!

    У меня возникла такая проблема: Если документы делаются последним днем месяца и временем 23:59:59, то сделанные ими проводки не попадают в виртуальную таблицу остатков. То есть, если обращаться к виртуальной таблице остатков на дату 31.10.2012 (например)
    как-то так
    Код:
    Выбрать * ИЗ ЕПСБУОстатки(&ДатаОтчета, ...), 
    и при этом &ДатаОтчета устанавливается как КонецДня(ДатаОтчета)

    то в отчет не попадают проводки с периодом 31.10.2012 23:59:59,
    а если &ДатаОтчета устанавливается как НачалоДня(КонецДня(ДатаОтчета)+1), то они попадают.

    Если бы дело было в одном самописном отчете, то это бы полбеды, но стандартные документы, при заполнении которых используется обращение к регистру остатков ЕПСБУ тоже теперь заполняются неправильно, без учета этих проводок. А раньше заполнялись правильно.
    И, что самое интересное, в оборотку эти проводки попадают на 31.10 без проблем. Собственно, и заметили это потому, что перестало сходиться с обороткой. А раньше нормально было.

    Пересчет итогов не помог.

    Из-за чего такое могло произойти и что делать теперь с этим чудом, всю конфу, что ли переписывать? :( Помогите, пожалуйста, может, кто-то сталкивался с таким.

    ЗЫ: Конфигурация БГУ, релиз 1.0.14, база на MS SQL. Хотя выгрузили ее в файловую - клоуны остались.
  2. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.984
    Симпатии:
    398
    Баллы:
    104
    А такое после чего-то произошло?
  3. TopicStarter Overlay
    for_maricat
    Offline

    for_maricat Опытный в 1С

    Регистрация:
    11 ноя 2010
    Сообщения:
    236
    Симпатии:
    0
    Баллы:
    26
    Да вроде на пустом месте :( Хотя, возможно, (но теперь точно не узнать) это произошло после того, как при динамическом обновлении конфигурации БД (в смысле, в конфу внесли небольшие изменения, а потом нажали кнопку "обновить конфигурацию БД"), что-то глюкнуло и конфа БД как-то странно изменилась. Потом мы ее починили, а могло ли это повлиять на данные таким образом - не знаю. Изменения не были не связаны с проводками, правда, возникшие глюки тоже не были связаны с изменениями. :(
  4. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Вообще, это задуманное поведение платформы. А именно виртуальных таблиц вида Остатки. При использовании их в запросах последняя секунда никогда не попадала в результат. Такая уж у них особенность. Чтобы включить последнюю секунду, надо либо прибавлять секунду, либо использовать объект "Граница" (вид границы - "Включая").

    В стандартных отчетах, наверное, все-таки таблицы вида Остатки используются не так часто. Чаще - ОстаткиИОбороты. А они включают последнюю секунду. Поэтому в оборотку у Вас все проводки попадают (вернее даже не поэтому, а просто потому, что стандартные отчеты должны включать все данные за выбранный период :))).

    Я с БГУ не работаю, не знаю, что там и как....Но, может, все-таки, такое поведение задумано в некоторых документах, т.е. чтобы последняя секунда не включалась в расчет???

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


    Вы уверены, что раньше заполнялись "правильно"?
    Попробуйте взять демо-версию, посмотреть там.
  5. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.984
    Симпатии:
    398
    Баллы:
    104
    Спасибо, не знал.

    У меня теперь тоже такой вопрос возник.
  6. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Ну тут я с вами не соглашусь. По крайней мере в 8.1 последняя секунда могла и попадать в выборку, а могла и не попадать. Иногда лечиться пересчетом итогов, иногда нет.
    Вариант прибавлять секунду в параметре запроса
    Код:
    Запрос1С.УстановитьПараметр("ДатаОтчета", КонецДня(ДатаОтчета) + 1);
    Прокатывает, но проблема в том, что этот параметр может использоваться в других частях отчета, и это нужно учитывать.

    Для случаев же виртуальных таблиц в 1С присутсвует специальная фича "Граница".

    Использовать можно так:
    Код:
    Запрос1С.УстановитьПараметр("ГраницаДатаОтчета", Новый Граница(КонецДня(ДатаОтчета), ВидГраницы.Включая));
    ну или, пока руку не набъете разложить по составляющим
    Код:
    ДатаКонцаОтчетаССекундами = КонецДня(ДатаОтчета); //т.к. элемент расположенный на форме может иметь состав только "Дата", то попытка его приведения к секундам - приведет к фейлу без атеншна.
    ГраницаКонцаОтчета = Новый Граница(ДатаКонцаОтчетаССекундами, ВидГраницы.Включая); //получили границу, которая включает последнюю секунду указанного дня
    Запрос1С.УстановитьПараметр("ГраницаДатаОтчета", ГраницаКонцаОтчета);
    
    Но нужно учитывать, что тип Граница <> тип Дата. Т.е. если на этот параметр ориентируется еще что то в запросе (реквизиты справочников/таблиц/табличных частей/регистров) - то их сравнивать с границей нельзя! это выдаст ошибку. Для этих случаев в запрос нужно передавать отдельный параметр, типа Дата

    Код:
    //т.к. элемент расположенный на форме может иметь состав только "Дата", то попытка его приведения к секундам - приведет к фейлу без атеншна.
    ДатаКонцаОтчетаССекундами = КонецДня(ДатаОтчета);
    //получим границу, которая включает последнюю секунду указанного дня
    ГраницаКонцаОтчета = Новый Граница(ДатаКонцаОтчетаССекундами, ВидГраницы.Включая);
    //передадим в запрос параметр типа Граница - можно использовать в конструкциях
    //Между и в качестве фильтра периода движений/срезов регистров.
    Запрос1С.УстановитьПараметр("ГраницаДатаОтчета", ГраницаКонцаОтчета);
    //передадим в запрос параметр типа Дата. Его можно использовать при сравнении с реквизитами типа Дата.
    Запрос1С.УстановитьПараметр("ДатаОтчета", ДатаКонцаОтчетаССекундами);
    
  7. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Возможно, зря я написал "Никогда не попадала". Честно говоря, не знаю, как было раньше :))
    Но вот с тех пор, как я только начал изучать язык запросов, у меня как-то даже и не было сомнений в том, что это так и никак иначе. Во всех тех немногих курсах, что я слушал, об этом прямо так и говорилось, без всяких вариантов, что последняя секунда не попадает в расчет при использовании виртуальных таблиц вида "Остатки".

    А вот официальную документацию по этому поводу, каюсь, не читал :))
    Придется почитать :))
  8. TopicStarter Overlay
    for_maricat
    Offline

    for_maricat Опытный в 1С

    Регистрация:
    11 ноя 2010
    Сообщения:
    236
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте!
    Спасибо большое за объяснения, буду иметь в виду.
    Вот-вот. Иногда попадает, а иногда не попадает :) Что интересно, в документе из примерно 500 строк проводки строк 10-12 попадают в "КонецДня", а остальные не попадают :)

    В общем, с самописными отчетами все ясно - нужно исправить. А вот некоторые документы 1С, например "инвентаризация взаиморасчетов" ведут себя при автозаполнении не очень адекватно - если заполнять на 23:59:59 - некоторые проводки не попадают, а если на 00:00:00 следующего дня, то попадают проводки из других документов, которые сделаны на 00:00:00. Пришлось все их перепроводить на 00:01. Это, я так понимаю, нужно им жаловаться? Хотя я уже сказала юзерам, чтобы не делали документов ни 00:00:00, ни 23:59:59. Проблема только, что сама 1С-ка зачем-то регулярно ставит это время автоматически. :(
  9. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    а в чем секас? почему последнюю секунду не включают?
  10. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Мне бы хоть раз с таким столкнуться :))
    Чет сколько не экспериментировал, не попадает последняя секунда и все тут :))

    Не знаю :icon_pain25:

Поделиться этой страницей