Ну, и чтобы запрос не был совсем детским, добавим изюминку — необходимо пронумеровать созданные пары свойств в пределах каждого товара.
Функции языка запросов 1С. Работа с датами
Дата — один из примитивных типов данных в системе 1С:Предприятие. Дата всегда имеет формат год, месяц, день, час, минута, секунда. Таким образом, переменная типа дата содержит не только дату, но и время.
Одной из первых моих статей в этой рубрике была небольшая шпаргалка по работе с датами, но о датах в запросах там было написано очень мало. В запросах 1С с датами приходится работать довольно часто, особенно когда запрос строится к объектам метаданных в которых содержится периодическая информация. Как правило это регистры (сведений, накопления, расчета, бухгалтерии).
Почему тормозит 1С. Регламентные задания — Записки IT специалиста
Только не следует впадать в крайности, грамотно рассудите, насколько вам необходимы те или иные возможности и как часто следует выполнять связанные с ними задания.
12 комментариев:
В последнем запросе таблицы соединяются по дате, так делать нельзя т.к. это будет не правильно работать в случае когда у разных поступлений одинаковая дата и время.
Почему нет? В последнем запросе в случае, когда встретится два и более документа с одинаковым датой/временем, возьмется только один по МАКСИМУМ(ТоварыНаСкладахОбороты.Регистратор), иначе говоря последний введенный документ поступления на эту дату/время.
Промокоды на Займер на скидки
Получается МАКСИМУМ() выбирает максимальный уникальный идентификатор, который икрементально строится на основании даты создания ссылки ?
В общих чертах, да. По результатам, МАКСИМУМ по ссылке дает ссылку (он же УИД) на последний введенный объект.
Михаил Андрияшкин, объекты зачастую мигрируют из одних баз в другие и выгружаются по ссылке, поэтому «МАКСИМУМ по ссылке дает ссылку» не верно.
Согласен! Вчера нужно было отобрать в запросе максимальный документ по дате. В результате пришлось отбирать документы по максимальной дате, а потом по максимальной ссылке. При этом все равно отобрался не последний документ, т.к. документы были созданы загрузкой. И тут уж ничего не поделать.
Спасибо, полдня мучался пока не нашел этот пост. Вот что получилось у меня под мою задачу
СГРУППИРОВАТЬ ПО
ТоварыОрганизацийОбороты.Организация,
ТоварыОрганизацийОбороты.АналитикаУчетаНоменклатуры.Склад,
ТоварыОрганизацийОбороты.АналитикаУчетаНоменклатуры.Номенклатура,
ТоварыОрганизацийОбороты.АналитикаУчетаНоменклатуры.Характеристика
;
СГРУППИРОВАТЬ ПО
ВТ_ДатыПоступлений.Организация,
ВТ_ДатыПоступлений.Склад,
ВТ_ДатыПоступлений.Номенклатура,
ВТ_ДатыПоступлений.Характеристика,
ВТ_ДатыПоступлений.ДатаПоступления
УПОРЯДОЧИТЬ ПО
Организация,
Склад,
Номенклатура,
Характеристика,
ДатаПоступления УБЫВ,
Поступление УБЫВ
Но вот в чем меня терзают смутные сомнения в собственной профпригодности. Как поведет себя этот запрос при большом количестве накопленных данных, не будет ли выполняться по полчаса. В принципе можно исходя из конкретных условий ограничить дату начала выбирания оборотов, но тогда получается некошерно, не все последние поступления будут выбираться.
Оптимизация запросов 1С – Ваш петербургский программист 1С
1C Запрос Исключить Движения Текущего Документа
Наверняка многие коллеги сталкивались с такой задачей, как получение первых/последних документов в выборке. В зависимости от необходимого результата к реализации решения можно подойти различными способами.
Без автоупорядочивания сортировка произойдет без учета даты документа, по уникальному идентификатору. В этом случае, документы введенные позже приходного ордера ЦУ-33 задним числом встанут в начало выборки. Уберем «АВТОУПОРЯДОЧИВАНИЕ» из запроса и посмотрим результат.
Если воспользоваться методом получения даты создания объекта из GUID, то в первом случае 3339428b-6656-11e0-af2a-0015e9b8c48d создан 14.04.2011, во втором b2c7cfa2-6ca9-11e0-af30-0015e9b8c48d — 22.04.2011. То есть второй способ можно применять, если нужно определить последний документ прихода, введенный пользователем.
В случае, когда нужно определить последние документы для перечня номенклатуры конструкция «ВЫБРАТЬ ПЕРВЫЕ» нам уже не подходит. Поэтому, чтобы свернуть выборку по регистратору, будем использовать функцию МАКСИМУМ.
Период возможно указать с точностью до секунды, возможно ситуация когда движения могут быть в пределах одной секунды, и если использовать дату в качестве периода можно получить некорректные данные.
Параметры виртуальной таблицы 1С остатков.
Период – Дата, либо момент времени на который необходимо получить остатки.
В качестве примера рассмотрим следующую таблицу движений и параметры виртуальной таблицы 1С:
Если к примеру мы укажем дату остатков 20.01.2019 12:00:00 то движения за период 20.01.2019 12:00:00 учтены не будут, и остаток будет равен 8.
Период возможно указать с точностью до секунды, возможно ситуация когда движения могут быть в пределах одной секунды, и если использовать дату в качестве периода можно получить некорректные данные.
Движения формируются документом, для того чтобы документы располагались в хронологическом порядке в пределах секунды, платформа 1С использует объект Момент времени.
Момент времени создается автоматически, и изменить его в пределах одной секунды невозможно. Изменить хронологию документов можно, только переместив дату одного издокументов на следующую секунду.
Допустим, что 20.01.2019 12:00:00 был проведен еще один документ, таблица движений примет следующий вид:
На временной оси два последних документа будут расположены следующим образом
При расчете остатков на МоментВремени документа, движения этого документа не учитываются !
Для того чтобы получить остатки с учетом его движений, необходимо использовать объект Граница.
В зависимости от свойства Вид Границы, можно получить момент непосредственно перед или после позиции документа.
МоментПолученияОстатков = Новый Граница ( МоментВремени (), ВидГраницы . Включая );
Условие – параметр позволяющий произвести отбор данных по измерениям регистра.
В нашем примере у регистра остатков только одно измерение «Номенклатура».
Условия можно описывать как простой конструкцией, например
При обращении к виртуальной таблице следует передавать в условия наиболее простые конструкции. Не рекомендуется использовать подзапросы и соединения в параметрах виртуальной таблицы, так как это приводит к медленной работе запроса.
Если все же подзапрос необходим, то необходимо соблюдать следующие условия:
· в подзапросе только одна таблица, нет соединений с другими таблицами.
· если в подзапросе таблица табличной части (например, Документ.Накладная.СписокТоваров), то не должно быть обращения к реквизитам таблицы-шапки (Накладная.Проведен).
· если в подзапросе таблица, у которой могут быть табличные части (например, Документ.Накладная), то не должно быть обращений к табличным частям (например, ГДЕ Документ.Накладная.СписокТоваров.Номенклатура = «1»).
· если в подзапросе временная таблица, то не должно быть условий (раздела ГДЕ).
· если в подзапросе постоянная таблица, то условие (раздел ГДЕ) может быть допустимо, только если условие выполняется для 80% (или более) случаев, отсутствие условия означает выполнение для 100% случаев
· если в подзапросе постоянная таблица, то в ограничениях доступа к данным (RLS) не должно содержатся подзапросов и соединений (допускаются только простые условия вида «ГДЕ Реквизит = Значение», «ГДЕ Истина»).
Как в 1С посмотреть историю изменения документа?
Основные параметры таблицы Оборотов.
Как видим в качестве периода здесь два параметра, это НачалоПериода и КонецПериода.
Обороты в отличие от остатков можно получить только за определенный период. К примеру, если нам требуется узнать остаток товаров, то мы говорим : «Сколько товаров осталось на сегодня на 12:00? а вчера на 18:00». В случае оборотов вопрос строится так: «Сколько товаров было продано за сегодня? А за этот месяц?».
НачалоПериода – в случае если указывается дата, то берется начало секунды; если параметр не указан, то берется начало секунды периода первого движения.
КонецПериода – в случае если указывается дата, то берется конец секунды; если параметр не указан, то берется конец секунды периода последнего движения.
Если оба основных параметра таблицы указать одинаковыми, то период будет равен 1 секунде.
В случае если в качестве параметра НачалоПериода или КонецПериода, берется МоментВремени документа, то движения самого документа будут входить в выбираемый период!
Для того чтобы получить момент непосредственно перед или после позиции документа, следует воспользоваться объектом Граница.
Следующим параметром таблицы оборотов является Периодичность таблицы.
Периодичность — позволяет детализировать записи виртуальной таблицы обороты в соответствии с выбранным периодом.
Рассмотрим использование данного параметра на примере следующей таблицы движений:
Выберем данные из таблицы оборотов, в качестве периодичности выберем месяц.
Т.к. все движения формировались в одном месяце, то получим всего одну запись:
Изменим периодичность на секунду, два последних движения сформированы в одну секунду, поэтому они будут представлены одной записью:
Для того чтобы детализировать записи в пределах секунды, в качестве периодичности выберем Регистратор, в результате появится дополнительная колонка Регистратор:
Если в качестве периодичности выбрать авто то возможно привести данные к нескольким периодам:
Параметр условие аналогичен условию в виртуальной таблице остатков.
При использовании в запросах виртуальных таблиц, в первую очередь необходимо выбирать таблицы, расчет которых производится на основе таблиц итогов.
Для регистра с видом остатки это таблица остатки, для оборотного обороты.
Далее необходимо максимально точно описать условия виртуальных таблиц.
При соблюдении этих условий, возможно получить данные наиболее оптимальным способом.
Специалист компании ООО «Кодерлайн»
Александр Гармышев
Микрофинансирование → Микрокредиты → Специальные предложения → Скачать файлы → Обзор Быстроденег → Предмет договора → Ответственность сторон → Отличные наличные→ Экспресс займы