новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Ошибка получения остатков

  • Добавить свою публикацию
  • для этого требуется регистрация

Пример запроса

Рассмотрим следующий запрос:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	СвободныеОстаткиОстатки.Склад,
|	СвободныеОстаткиОстатки.Номенклатура,
|	СвободныеОстаткиОстатки.КоличествоОстаток
|ИЗ
|	РегистрНакопления.СвободныеОстатки.Остатки(&ДатаОстатков, )
|				 КАК СвободныеОстаткиОстатки";

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

Изображение

Вроде все правильно. Мы получим остатки на конец дня 16 июня 2013 года. Но здесь мы и получим ошибку, так как отчет в некоторых ситуациях будет выдавать некорректные остатки! Проанализируем причины.

Суть ошибки

Из-за технических особенностей платформы 1С:Предприятие 8 запрос к базе данных для виртуальной таблицы "Остатки" возвращает данные на переданную дату остатков за минусом одной секунды. Поясню. Например, остаток по номенклатуре "Мужские сапоги с натуральным мехом" на складе "Склад обуви" составляет 1355 пар обуви на дату 16.06.2013.

Изображение

Введем этой же датой документ "Списание товаров" по этому же складу и номенклатуре. Спишем весь остаток.Изображение

Обратите внимание на дату документа. Логично, что после проведения документа наш запрос с прошлыми параметрами должен показать, что остатка теперь на складе нет. Однако мы получим результат, аналогичный предыдущему: 

Изображение

В чем же дело?

Как правильно

Если мы в параметр запроса передадим дату на 1 секунду больше, то получим правильные результаты. Вот так изменится результат запроса, если мы получим остаток на дату 17.06.2013 00:00:00".  

Изображение

Описанная особенность виртуальной таблицы остатков должна учитываться при разработке типовых решений.

Заключение

В заключение покажу еще один вариант передачи параметра в запрос к виртуальной таблице "Остатки". Один вариант мы уже рассматривали. Достаточно увеличить дату на одну секунду. Еще один вариант заключается в передаче границы периода в качестве параметра. Для нашего примера это будет выглядеть следующим образом:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	СвободныеОстаткиОстатки.Склад,
|	СвободныеОстаткиОстатки.Номенклатура,
|	СвободныеОстаткиОстатки.КоличествоОстаток
|ИЗ
|	РегистрНакопления.СвободныеОстатки.Остатки(&ДатаОстатков, )
|				 КАК СвободныеОстаткиОстатки";
// Передаем границу периода в запрос
Запрос.УстановитьПараметр("ДатаОстатков", Новый Граница(ДатаОстатков, ВидГраницы.Включая));

 Будьте внимательны при использовании виртуальной таблицы "Остатки".

 
0
Читайте также
Заполнения предоплат и отгрузок в документах: Поступления товаров, реализациях и платежках
Правильная работа типового отчета "Дебиторская задолженность по срокам долга"
Подчиненные справочники. Быстро.
Создание подчиненных справочников
Разработки
Отчет по сроку годности номенклатуры
Отчет показывает остатки номенклатуры на складах УТ10.3
Универсальный отчет "Остатки и обороты"
Отчет "Остатки и обороты"с возможностью выводить в колонках значения, взятые из документа
Универсальная замена значений для ЛЮБОЙ конфигурации
Замена объектов на новые или перенос данных по счету
Еще от автора
≡ к списку статей