Выбрать дату регистратора регистра накопления
Не получается вытянуть дату регистратора в обход отбору по дате. Например если дата регистратора ранее даты отбора то крушится ошибкой "Преобразование значения к типу Дата не может быть выполнено"
Сам запрос:
Прошу помощи уважаемых знатоков!
Сам запрос:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| БланкиЗБ_.ЗалоговыйБилет КАК ЗалоговыйБилет,
| БланкиЗБ_.ЗалоговыйБилет.Код КАК Код,
| БланкиЗБ_.ПричинаСписания КАК ПричинаСписания,
| БланкиЗБ_.Организация КАК Организация,
| БланкиЗБ_.Филиал КАК Филиал,
| БланкиЗБ_.КоличествоПриход КАК КоличествоПриход,
| БланкиЗБ_.КоличествоРасход КАК КоличествоРасход,
| БланкиЗБ_.Регистратор КАК Регистратор,
| БланкиЗБ_.Регистратор.Дата КАК Дата,
| БланкиЗБ_.ЗалоговыйБилет.Залогодатель КАК Залогодатель,
| БланкиЗБ_.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
| БланкиЗБ_.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
|ИЗ
| РегистрНакопления.ЛМБ_БланкиЗалоговыхБилетов.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Регистратор, , Филиал = &Филиал) КАК БланкиЗБ_
|
|СГРУППИРОВАТЬ ПО
| БланкиЗБ_.ПричинаСписания,
| БланкиЗБ_.Филиал,
| БланкиЗБ_.ЗалоговыйБилет,
| БланкиЗБ_.Организация,
| БланкиЗБ_.Регистратор,
| БланкиЗБ_.Регистратор.Дата,
| БланкиЗБ_.ЗалоговыйБилет.Код,
| БланкиЗБ_.КоличествоПриход,
| БланкиЗБ_.КоличествоРасход,
| БланкиЗБ_.ЗалоговыйБилет.Залогодатель,
| БланкиЗБ_.КоличествоНачальныйОстаток,
| БланкиЗБ_.КоличествоКонечныйОстаток";
Запрос.УстановитьПараметр("ДатаНачала", Объект.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(Объект.ДатаОкончания));
Запрос.УстановитьПараметр("Филиал", Объект.Филиал);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Возврат РезультатЗапроса;
ПоказатьПрошу помощи уважаемых знатоков!
По теме из базы знаний
- Комплексный контроль остатков. Для одного или сразу нескольких логически связанных регистров накопления. Универсальное решение уровня данных для контроля не только складских остатков
- Доработка проведения в ERP 2.5. (Регистры накопления, Регистры сведений)
- Сюрприз от регистра накопления "Зарплата к выплате". ЗУП 3.1
- Особенности организации выборок из оборотного регистра накопления
- Корректировка вычетов НДФЛ в регистрах накопления (исправление ошибки задвоения исчисленного НДФЛ)
Найденные решения
(48) Ну вот накидал по-быстрому на регистре "ТоварыНаСкладах"
"ВЫБРАТЬ
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.Характеристика КАК Характеристика,
| ТоварыНаСкладахОстаткиИОбороты.Назначение КАК Назначение,
| ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
| ТоварыНаСкладахОстаткиИОбороты.Помещение КАК Помещение,
| ТоварыНаСкладахОстаткиИОбороты.Серия КАК Серия,
| ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток КАК ВНаличииНачальныйОстаток,
| ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток
|ПОМЕСТИТЬ ОстаткиЗаПериод
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , ) КАК ТоварыНаСкладахОстаткиИОбороты
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОбороты.Характеристика КАК Характеристика,
| ТоварыНаСкладахОбороты.Назначение КАК Назначение,
| ТоварыНаСкладахОбороты.Склад КАК Склад,
| ТоварыНаСкладахОбороты.Помещение КАК Помещение,
| ТоварыНаСкладахОбороты.Серия КАК Серия,
| МАКСИМУМ(ТоварыНаСкладахОбороты.Регистратор.Дата) КАК ДатаРегистратора
|ПОМЕСТИТЬ ДатыПоследнихРегистраторов
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Обороты(
| ,
| ,
| Регистратор,
| (Номенклатура, Характеристика, Назначение, Склад, Помещение, Серия) В
| (ВЫБРАТЬ
| ОстаткиЗаПериод.Номенклатура КАК Номенклатура,
| ОстаткиЗаПериод.Характеристика КАК Характеристика,
| ОстаткиЗаПериод.Назначение КАК Назначение,
| ОстаткиЗаПериод.Склад КАК Склад,
| ОстаткиЗаПериод.Помещение КАК Помещение,
| ОстаткиЗаПериод.Серия КАК Серия
| ИЗ
| ОстаткиЗаПериод КАК ОстаткиЗаПериод)) КАК ТоварыНаСкладахОбороты
|
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладахОбороты.Помещение,
| ТоварыНаСкладахОбороты.Серия,
| ТоварыНаСкладахОбороты.Назначение,
| ТоварыНаСкладахОбороты.Склад,
| ТоварыНаСкладахОбороты.Характеристика,
| ТоварыНаСкладахОбороты.Номенклатура
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ОстаткиЗаПериод.Номенклатура КАК Номенклатура,
| ОстаткиЗаПериод.Характеристика КАК Характеристика,
| ОстаткиЗаПериод.Назначение КАК Назначение,
| ОстаткиЗаПериод.Склад КАК Склад,
| ОстаткиЗаПериод.Помещение КАК Помещение,
| ОстаткиЗаПериод.Серия КАК Серия,
| ОстаткиЗаПериод.ВНаличииНачальныйОстаток КАК ВНаличииНачальныйОстаток,
| ОстаткиЗаПериод.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток,
| ДатыПоследнихРегистраторов.ДатаРегистратора КАК ДатаРегистратора
|ИЗ
| ОстаткиЗаПериод КАК ОстаткиЗаПериод
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДатыПоследнихРегистраторов КАК ДатыПоследнихРегистраторов
| ПО ОстаткиЗаПериод.Номенклатура = ДатыПоследнихРегистраторов.Номенклатура
| И ОстаткиЗаПериод.Характеристика = ДатыПоследнихРегистраторов.Характеристика
| И ОстаткиЗаПериод.Назначение = ДатыПоследнихРегистраторов.Назначение
| И ОстаткиЗаПериод.Склад = ДатыПоследнихРегистраторов.Склад
| И ОстаткиЗаПериод.Помещение = ДатыПоследнихРегистраторов.Помещение
| И ОстаткиЗаПериод.Серия = ДатыПоследнихРегистраторов.Серия"
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(16)у вас в запросе есть получение начальных (ну и конечных) остатков, допустим это регистр по складу вы получаете начальный остаток на СЕГОДНЯ и там количество 20, которое было сформировано документами поступления в течении полугода и документов там с полста, какую дату вы хотите получить?
(20) У остатка нет регистратора. А у регистра есть регистратор движения уникального объекта. Мне необходимо получить не регистратор общего остатка, а дату регистратора Прихода или Расхода уникального в данном случае залогового билета, не смотря на то что, дата движения регистратора не входит в отбор между &ДатаНачала и &ДатаОкончания
(18)О! придумал, если делать отчетом СКД, в запросе получаем всю таблицу по оборотам, без отбора по датам, потом вторую по остаткам, с отбором по датам, пересекаем их по билету, а дальше в группировке СКД будет Билет, начальный и конечный остаток на дату, а в детализации регистраторы за весь период жизни!
(48) Ну вот накидал по-быстрому на регистре "ТоварыНаСкладах"
"ВЫБРАТЬ
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.Характеристика КАК Характеристика,
| ТоварыНаСкладахОстаткиИОбороты.Назначение КАК Назначение,
| ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
| ТоварыНаСкладахОстаткиИОбороты.Помещение КАК Помещение,
| ТоварыНаСкладахОстаткиИОбороты.Серия КАК Серия,
| ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток КАК ВНаличииНачальныйОстаток,
| ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток
|ПОМЕСТИТЬ ОстаткиЗаПериод
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , ) КАК ТоварыНаСкладахОстаткиИОбороты
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОбороты.Характеристика КАК Характеристика,
| ТоварыНаСкладахОбороты.Назначение КАК Назначение,
| ТоварыНаСкладахОбороты.Склад КАК Склад,
| ТоварыНаСкладахОбороты.Помещение КАК Помещение,
| ТоварыНаСкладахОбороты.Серия КАК Серия,
| МАКСИМУМ(ТоварыНаСкладахОбороты.Регистратор.Дата) КАК ДатаРегистратора
|ПОМЕСТИТЬ ДатыПоследнихРегистраторов
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Обороты(
| ,
| ,
| Регистратор,
| (Номенклатура, Характеристика, Назначение, Склад, Помещение, Серия) В
| (ВЫБРАТЬ
| ОстаткиЗаПериод.Номенклатура КАК Номенклатура,
| ОстаткиЗаПериод.Характеристика КАК Характеристика,
| ОстаткиЗаПериод.Назначение КАК Назначение,
| ОстаткиЗаПериод.Склад КАК Склад,
| ОстаткиЗаПериод.Помещение КАК Помещение,
| ОстаткиЗаПериод.Серия КАК Серия
| ИЗ
| ОстаткиЗаПериод КАК ОстаткиЗаПериод)) КАК ТоварыНаСкладахОбороты
|
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладахОбороты.Помещение,
| ТоварыНаСкладахОбороты.Серия,
| ТоварыНаСкладахОбороты.Назначение,
| ТоварыНаСкладахОбороты.Склад,
| ТоварыНаСкладахОбороты.Характеристика,
| ТоварыНаСкладахОбороты.Номенклатура
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ОстаткиЗаПериод.Номенклатура КАК Номенклатура,
| ОстаткиЗаПериод.Характеристика КАК Характеристика,
| ОстаткиЗаПериод.Назначение КАК Назначение,
| ОстаткиЗаПериод.Склад КАК Склад,
| ОстаткиЗаПериод.Помещение КАК Помещение,
| ОстаткиЗаПериод.Серия КАК Серия,
| ОстаткиЗаПериод.ВНаличииНачальныйОстаток КАК ВНаличииНачальныйОстаток,
| ОстаткиЗаПериод.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток,
| ДатыПоследнихРегистраторов.ДатаРегистратора КАК ДатаРегистратора
|ИЗ
| ОстаткиЗаПериод КАК ОстаткиЗаПериод
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДатыПоследнихРегистраторов КАК ДатыПоследнихРегистраторов
| ПО ОстаткиЗаПериод.Номенклатура = ДатыПоследнихРегистраторов.Номенклатура
| И ОстаткиЗаПериод.Характеристика = ДатыПоследнихРегистраторов.Характеристика
| И ОстаткиЗаПериод.Назначение = ДатыПоследнихРегистраторов.Назначение
| И ОстаткиЗаПериод.Склад = ДатыПоследнихРегистраторов.Склад
| И ОстаткиЗаПериод.Помещение = ДатыПоследнихРегистраторов.Помещение
| И ОстаткиЗаПериод.Серия = ДатыПоследнихРегистраторов.Серия"
Показать
Да тут все проще, КМК. Раз нужны даты регистраторов, то и выборку делать надо не из виртуальной таблицы ОстаткиИОбороты, а из основной
"ВЫБРАТЬ
| БланкиЗБ_.ЗалоговыйБилет КАК ЗалоговыйБилет,
| БланкиЗБ_.Регистратор КАК Регистратор,
| БланкиЗБ_.Регистратор.Дата КАК Дата
|ИЗ
| РегистрНакопления.ЛМБ_БланкиЗалоговыхБилетов ГДЕ БланкиЗБ_.Период МЕЖДУ &ДатаНачала И &ДатаОкончания";
(27)
А вот дата регистратора - это совсем отдельная тема, она тоже всегда есть и вот именно она может не входить в выбранный период. Но это не дата движения! Да, они совпадают в общем случае, но не обязательно. Тем не менее, в результате запроса она всегда есть.
А те строки результата, в которых нет даты регистратора - это строки с начальными и конечными остатками по измерениям, у них и Дата = NULL и Регистратор = NULL, и все остальные реквизиты Регистратора = NULL, там не может быть даты по определению.
При обработке таких строк просто проверяйте наличие регистратора в результирующей таблице и в зависимости от этого подставляйте дату начала или дату окончания. Этой логикой ведает только разработчик, сама система вам тут не помощник.
дата движения не входит в выбранный период
Вот теперь вы мне расскажете, что вы называете датой движения. Дата движения - это служебное измерение "Период" регистра накопления, именно на него вы и ставите отбор в виртуальной таблице. То есть она всегда есть, и она всегда входит в выбранный период.
А вот дата регистратора - это совсем отдельная тема, она тоже всегда есть и вот именно она может не входить в выбранный период. Но это не дата движения! Да, они совпадают в общем случае, но не обязательно. Тем не менее, в результате запроса она всегда есть.
А те строки результата, в которых нет даты регистратора - это строки с начальными и конечными остатками по измерениям, у них и Дата = NULL и Регистратор = NULL, и все остальные реквизиты Регистратора = NULL, там не может быть даты по определению.
При обработке таких строк просто проверяйте наличие регистратора в результирующей таблице и в зависимости от этого подставляйте дату начала или дату окончания. Этой логикой ведает только разработчик, сама система вам тут не помощник.
(29) Ты слепой или глухой? Тебе уже сказали, что там где есть регистратор, там есть и дата. А там где регистратора нет и быть не может по определению (в строках с синтетическими остатками по измерениям) - там не может быть и даты регистратора!
Перечитай еще раз (14), попробуй, сравни, и тогда спорь. А пока остановимся на этом. Пока не разберешься, как работает запрос к таблице ОстаткиИОбороты - бесполезно тебе что-то объяснять.
Перечитай еще раз (14), попробуй, сравни, и тогда спорь. А пока остановимся на этом. Пока не разберешься, как работает запрос к таблице ОстаткиИОбороты - бесполезно тебе что-то объяснять.
(32)
А вообще интересно, как трансформируется задача - от "получить дату в обход периода" до "получить последнюю дату".
получить последнюю дату регистратора
Как это? У регистратора может быть несколько дат? Или все таки не последнюю дату регистратора, а "дату последнего регистратора, который формировал движения в выбранном периоде"? А может быть "дату регистратора последнего движения в выбранном периоде"?
А вообще интересно, как трансформируется задача - от "получить дату в обход периода" до "получить последнюю дату".
(36) Принцип такой:
Я правда не уверен, что можно сделать Максимум(Регистратор.МоментВремени).
Если так сделать нельзя, то придется сделать нумерацию регистраторов по моменту времени.
Принцип в следующем:
Выбрать
ЗалоговыйБилет,
Максимум(Регистратор.МоментВремени) КАК МоментВремени
Поместить ВТ_ДвиженияСрезПоследних
ИЗ
Регистр.ОсновнаяТаблица
СГРУППИРОВАТЬ ПО
ЗалоговыйБилет
;
Выбрать
Т1.ЗалоговыйБилет,
Т2.Регистратор.Дата КАК Дата
Из
Регистр.ОсновнаяТаблица КАК Т1
ЛЕВОЕ СОЕДИНЕНИЕ Регистр.ОсновнаяТаблица КАК Т2
ПО Т1.ЗалоговыйБилет = Т2.ЗалоговыйБилет
И Т1.МоментВремени = Т2.Регистратор.МоментВремени
ПоказатьЯ правда не уверен, что можно сделать Максимум(Регистратор.МоментВремени).
Если так сделать нельзя, то придется сделать нумерацию регистраторов по моменту времени.
Принцип в следующем:
Выбрать
ЗалоговыйБилет,
Регистратор.МоментВремени КАК МоментВремени
Поместить ВТ_Регистраторы
ИЗ
Регистр.ОсновнаяТаблица
;
Выбрать
Т1.ЗалоговыйБилет,
Т1.МоментВремени,
Сумма(1) КАК НомерСтроки
ПОМЕСТИТЬ ВТ_РегистраторыНумерованные
ИЗ
ВТ_Регистраторы КАК Т1
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Регистраторы КАК Т2
ПО Т1.ЗалоговыйБилет = Т2.ЗалоговыйБилет
И Т1.МоментВремени < Т2.МоментВремени
СГРУППИРОВАТЬ ПО
Т1.ЗалоговыйБилет,
Т1.МоментВремени
;
Выбрать
Т2.ЗалоговыйБилет,
Т1.Регистратор.Дата
ИЗ
Регистр.ОсновнаяТаблица КАК Т1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_РегистраторыНумерованные КАК Т2
ПО Т1.ЗалоговыйБилет = Т2.ЗалоговыйБилет
И Т2.НомерСтроки = 1
Показать
(37) Запрос:
Следует сделать следующим образом:
Выбрать
Т2.ЗалоговыйБилет,
Т1.Регистратор.Дата
ИЗ
Регистр.ОсновнаяТаблица КАК Т1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_РегистраторыНумерованные КАК Т2
ПО Т1.ЗалоговыйБилет = Т2.ЗалоговыйБилет
И Т2.НомерСтроки = 1
Следует сделать следующим образом:
Выбрать
Т2.ЗалоговыйБилет,
Т1.Регистратор.Дата
ИЗ
Регистр.ОсновнаяТаблица КАК Т1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_РегистраторыНумерованные КАК Т2
ПО Т1.ЗалоговыйБилет = Т2.ЗалоговыйБилет
И Т1.Регистратор.МоментВремени = Т2.МоментВремени
И Т2.НомерСтроки = 1
Показать
ФэйсПалм
БланкиЗБ_.Регистратор КАК Регистратор,
выбор когда БланкиЗБ_.Регистратор Ссылка ДокументТакой-То
тогда выразить(БланкиЗБ_.Регистратор КАК ДокментТакой-То).Дата
когда БланкиЗБ_.Регистратор Ссылка ДокументИной-То
тогда выразить(БланкиЗБ_.Регистратор КАК ДокментИной-То).Дата
иначе ДатаВремя(1,1,1)
конец как Дата
(25)
ФэйсПалм
А зря. Вряд ли в явно узкоспециализированном регистре будет много регистраторов. А вот группировать смысла тут никакого нет. Также автор не указал, в каком месте у него вылетает ошибка с датой. Предположу, что в регистре не всегда есть регистратор (например, битые ссылки удаленных непосредственно документов, что в отраслевых и самописных конфигурациях встречается на каждом шагу).
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот