Получить последний документ в запросе 1с
При использовании технологии хранения информации в базе данных, иногда требуется не только знать актуальную информацию на данный момент, но и то какое значение было актуальным в определенное время. Поэтому в данной статье мы поговорим о периодических регистрах сведений, которые обеспечивают именно эту возможность.
Для более предметного рассмотрения на примерах будет использоваться регистр “ЦеныНоменклатуры”, но это же применимо и к другим периодическим регистрам сведений. Прежде всего, необходимо понимать, что такое измерения, и что такое ресурсы.
Измерения – это то, в разрезе чего хранится информация. То есть в данном случае мы смотрим цены в разрезе номенклатуры и типов цен. Соответственно, номенклатура и тип цен являются измерениями.
Ресурсы непосредственно хранят интересующую нас информацию. Мы хотим знать цену для определенной номенклатуры. Следовательно, цена – это ресурс.
Помимо этого, надо понимать, что такое периодичность. Именно эта возможность регистра сведений позволяет хранить не только фактическую информацию на данный момент, но и узнавать интересующие нас значения в разрезе времени.
Получить срез последних на дату из регистра сведений можно двумя способами: с помощью метода менеджера регистра сведений и с помощью запроса регистра сведений.
1. Методы менеджера регистра сведений
Конец периода – Дата среза.
Отбор – отбор по измерениям регистра сведений (Структура).
Результат – Итог (Таблица значений)
Подобным образом работает метод:
2. Запрос регистра сведений
Так как мы работаем с периодическим регистром сведений, у нас появляется возможность работать с двумя виртуальными таблицами: “СрезПервых” и “СрезПоследних”.
Таблицы СрезПервых и СрезПоследних
Соответственно, работая с ними, можно получить необходимую Вам информацию. Нас интересует “СрезПоследних”. При выведении данной виртуальной таблицы регистра с помощью запроса в результате будет последнее значение ресурса, принадлежащее измерению. Но, к примеру, нам необходимо узнать, какая цена была в конкретный день. В случае получения среза на дату необходимо указать в запросе дату. Дату в запросе указываем в параметрах виртуальной таблицы.
Как указать дату в запросе?
Таким образом меняя этот параметр можно выводить срез на разные даты. В дальнейшем можно вносить дополнительные настройки для конкретизации выводимых данных, но это уже другая история.
Зная вышеперечисленные способы, можно подобрать именно тот, который подходит именно под Вашу задачу или Ваш конкретный случай.
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
Сортируем документы по убыванию даты и используем конструкцию «ВЫБРАТЬ ПЕРВЫЕ 1»:
Код 1C v 8.х
В результате запрос вернёт одну строку, с данными последнего документа по одному контрагенту.
А как сделать запрос, который вернёт последние документы по всем контрагентам, а не по одному конкретному?
Используем функцию МАКСИМУМ в запросе для решения данной задачи.
Код 1C v 8.х
Этот запрос выбирает последние документы по всем контрагентам.
Похожие FAQ
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D: ВашаБаза 1с77 " ; Пользователь= Excel файл как Внешний источник данных 16
Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто. 1. В конфигурации добавляет новый объект метаданных типа " Внешние источники данных" и назовем его просто " Excel" . https://helpf.pro/uploads/img Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 2
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: . по причине: Ошибка компоновки данных по причине: Ошибка получени Посмотреть все результаты поиска похожих
Еще в этой же категории
Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL()) 48
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы
Сортируем документы по убыванию даты и используем конструкцию «ВЫБРАТЬ ПЕРВЫЕ 1»:
Код 1C v 8.х
В результате запрос вернёт одну строку, с данными последнего документа по одному контрагенту.
А как сделать запрос, который вернёт последние документы по всем контрагентам, а не по одному конкретному?
Используем функцию МАКСИМУМ в запросе для решения данной задачи.
Код 1C v 8.х
Этот запрос выбирает последние документы по всем контрагентам.
Похожие FAQ
Еще в этой же категории
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Оператор ВЫРАЗИТЬ, аналог методов Лев, Прав, СокрЛП в Запросе? 11
Использовать конструкцию « ВЫРАЗИТЬ »: Запрос.Текст = " … |ГДЕ | (ВЫРАЗИТЬ(ЕдиницыХранения.Владелец.Наименование КАК СТРОКА(4))) Груз" ; Запрос.УстановитьПараметр(" Груз" ," Тонн" ); С целью приведения строк неограниченной длины к строкам Посмотреть все в категории Запросы
Сторожилы помогите. Написал запрос который выбирает все взаимодействия(встречи и телефонные звонки). А нужно чтоб он возвращал только последнее. Причем только одно. Или телефонный звонок или встречу. Подскажите пожалуйста. Как этого добиться, не могу даже в голове сложить. Заранее большое спасибо. Текст запроса ниже:
Дальше уже куча вариантов. Делате то же самое для второго документа, потом сравниваете. Или используете полученную таблицу и ее джойните с таблицей второго документа проверяя уже даты. тут уж сами решайте.
А вообще в CRM конфах, как правило, есть какой-нибудь РС, в котором фиксируются события (звонки, встречи, КП и т.п.) и, по-хорошему, запрос нужно к нему строить. Так как при запросе к таблицам документов у вас деградация запроса чудовищно нарастать со временем начнет.
Первые 1 .
.
Упорядочить Дата Убыв
(2) Да, но результатом объединения станет 2 записи. Первая это последняя встреча. Вторая последний телефонный звонок.А мне нужно чтоб в результаты была только одна запись. Та что старше из них.
(3)
Вы меня троллите?
(4) Наверное я все же туплю. Дело в том что я выложил не полный запрос. И этот запрос у меня идет во вложенном запросе. А ПОМЕСТИТЬ МОЖЕТ находиться только в основном запросе. Подскажите пожалуйста, как перестроить структуру запроса чтобы, заработало. Идея такая: Мы выбираем ВСЕХ контрагентов и находим по каждому из них максимальный документ.(может быть разных типов).Но результатом должно стать что выведет всех контрагентов и если существовал документ то последний из них. Прошу прощения за тупость и заранее большое спасибо. Полный текст запроса:
Дальше уже куча вариантов. Делате то же самое для второго документа, потом сравниваете. Или используете полученную таблицу и ее джойните с таблицей второго документа проверяя уже даты. тут уж сами решайте.
А вообще в CRM конфах, как правило, есть какой-нибудь РС, в котором фиксируются события (звонки, встречи, КП и т.п.) и, по-хорошему, запрос нужно к нему строить. Так как при запросе к таблицам документов у вас деградация запроса чудовищно нарастать со временем начнет.
привет, подскажите в запросе есть ссылка на документ и дата, как выбрать самый последний док из кучи строк регистра бухгалтерии, функция МАКСИМУМ?
(2) в этом запросе,не понимаю почему на выходе получаю не последний документ а последний документ января, хотя последний в октябре должен быть
(4) упорядочил:
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Промежуточная_ТЗ.Контрагент,
поля:
датадокумента документ
31.10.2012 23:59:59 операция 00001 от 31.01.2012:23 59 59
МАКСИМУМ(ХозрасчетныйОбороты.Регистратор.Дата)
и
МАКСИМУМ(ХозрасчетныйОбороты.Регистратор)
вообще-то не связаны др/др
(17) я ж говорю сначала получает документы по максимальной даты и потом из этой даты выбирает макс(Ссылка). почему фигня?
Если "без шуток", то в запросе "скрытая" ошибка. Желая получить дату и ссылку на последний документ - нельзя использовать максимум по дате и максимум по ссылке. Вы можете получить дату из одного документа и ссылку на другой документ.
(29) Грац - у меня мозг взорвался от просветления при чтении поста.
PS: я говорил про конкретный запрос, а не "в общем виде".
хотя на самом деле в (29) все равно используется максимум по ссылке. что не дает гарантию, что из двух документов с одинаковой датой выберется самый последний.
имхо самый правильный вариант:
получить в запросе отсортированную по Номенклатуре и МоментуВремени (убыв) таблицу ТАБЛ1
Номенклатура Регистратор МоментВремени
Пронумеровать строки в запросе.
Соединить ТАБЛ2 и ТАБЛ1 по номеру строки и получить регистратор (напримере соединения в (29))
Нуф-Нуф, не парься. Регистратором в регистре накопления могут быть документы различного вида и тогда сортировка или максимум по ссылке - информация "не об чём" в контексте поиска последнего документа.
(33) да нашлась строка результата запроса в которой некорректно вывелся последний документ, в осв это документ не последний а предпоследний т.е даты у 2х документов совпадают 31.10.2012 23 59 59
Момент времени - это дата документа + номер таблицы вида документа + уникальный идентификатор документа. Ссылка - это номер таблицы + идентификатор. Так?
Имхо: сортировки по дате и ссылке с отбором первых/последних (от сортировки зависит) - достаточно.
(37) получилось так
но почему-то этот запрос медленее отрабатывает по сравнению с тем если получить все документы по оборотам 60.01(в случае с программной обработкой результата запроса)
на моих тестовых базах разница в 3-5 сек.
Читайте также: