1с 7 7 запрос для получения значений из справочников
Это связано с наличием одного индекса по всем измерениям. Партии: Склад, Товар, Партия, Фирма. Отбор по партии практически не нужен, поэтому правильно расположить измерения так: Товар, Склад, Фирма, Партия. Установка флага отбора движений у измерения. Для этой цели больше всего подходят параметризированные запросы. Выглядит такой запрос так:. За счет этого достигается некоторый выигрыш в скорости. Для того чтобы воспользоваться этой хорошей штукой, поступим следующим образом.
Глава 3: Работа с документами. Конечно, это не очень хорошо, особенно когда блокируется вся 1с 7 7 запрос для получения значений из справочников при проведении 1 документа, но мы не можем изменять структуры БД, поэтому будем довольствоваться тем, что. IDDoc — уникальный идентификатор документа. УстановитьТекстовыйПараметр "НачДата", НачДата ; RS. УстановитьТекстовыйПараметр "КонДата", КонДата. Здесь стоит обратить внимание на 2 вещи:.
Стоит придерживаться следующего принципа: типизацию использовать только там, где без нее не обойтись: проведение документа, расшифровка в отчете. Пример: получим Номер, дату и наименование склада в запросе.
Что бы посмотреть, какой же запрос в итоге уйдет на сервер, у объекта ODBCRecordset существует метод Отладка Вкл. В окно сообщений выведется текст:. Номенклатура], FROM sc as Спр WHERE Спр. Такие запросы удобно отлаживать в QA.
Основным преимуществом прямых запросов является то, что мы не будем выбирать ненужные нам данные их отбор предоставим MSSQL, который делает это очень хорошо и главное на сервере, в отличие от 1С. Как всегда рассмотрим примерчик: выбрать все элементы спр. ВыполнитьИнструкцию ТекстЗапроса ; ТЗ.
Чтобы облегчить нам работу, были придуманы так называемые виртуальные таблицы не путать с представлениями VIEWкоторые являются простыми макроподстановками хотя на самом деле не такими уж и простыми; с большой вероятностью, если вы сами будете их разворачивать, то у вас получится хуже, так как лучше уже просто некуда.
Ведь не известно, во что 1с 7 7 запрос для получения значений из справочников развернется. Поэтому делаем следующим образом:.
Он необходим для того, чтобы в выборку попали документы за последний день. В реальной жизни обычно приходится выбирать только проведенные документы.
Список — это список или группа. После выполнения этого метода появляется таблица с именем Таблица и колонками Val, IsFolder. Пример: выберем все документы реализации, у которых склад входит в выбранную группу. Склад IN SELECT Val FROM Группа "; RS. УложитьСписокОбъектов ВыбГруппа, " Группа", "Склады". Замечание: рекомендуется использовать локальные временные таблицы — префикс. В этом случае не нужно заботиться об уникальности имени таблицы для разных пользователей, а также об их последующем удалении.
В модуле формы заведем переменную RS. В процедуре ПриОткрытии проинициализируем ее:. Подготовить ТекстЗапроса ; RS. УстПараметр 1, ВыбСклад ; КонецПроцедуры. В качестве периода в запросе будем использовать начало текущего месяца. Добавим текстовую колонку, в которой пропишем формулу:. УстПараметр 2, ТекущийЭлемент ; Возврат RS.
Но если мы заранее можем ограничить тип этого поля, тогда решение можно найти. Вот как будет выглядеть запрос:. Глава 4: Работа с регистрами. Как известно, регистр остатков состоит из 2-х таблиц: Итоги и Движения.
Тот же пример, но по списку контрагентов:. Контрагент IN SELECT Val FROM Группа "; RS. УложитьСписокОбъектов13 Список, " Группа". Обычно при написании отчетов нужно делать переменные условия: по всем, по элементу, по группе или по списку. Отрабатывать 1с 7 7 запрос для получения значений из справочников варианты в каждом отчете — проще застрелиться. И для того, чтобы так не делать, мною был разработан класс-обертка "ЗапросSQL" можно найти на acsent. Суть это класса состоит в макроподстановках. В зависимости от значения ВыбСклад в запрос встанет условие:.
КоличествоКонечныйОстаток as КоличествоКонОст, Рег. СуммаНачальныйОстаток as СуммаНачОст, Рег. СуммаПриход as СуммаПриход, Рег. СуммаРасход as СуммаРасход, Рег. С периодичностью: период может быть День, Неделя, Месяц, Квартал, Год. В данном случае в поле Период будет начало каждого месяца периода. Как всегда, при указании периода первую дату ставим без модификатора, вторую с модификатором.
Здесь нужно помнить, что запрос нужно писать такой, который вернет только одну позицию. Это можно всегда сделать с помощью функции SUM. Опять же, для того чтобы это быстро бегало, необходимо наиболее точно попасть в индекс, т. В данном случае это все измерения. В этом примере мы использовали метод ВыполнитьСкалярныйкоторый возвращает не таблицу, а единственное значение или структуру, если выбирается несколько колонок.
Таблица ОстаткиИОбороты похожа на таблицу Остатки, только выбирается начальная и конечная даты, и периодичность. Без периодичности за период :. КоличествоНачальныйОстаток as КоличествоНачОст, Рег. КоличествоПриход as КоличествоПриход, Рег. КоличествоРасход as КоличествоРасход, Рег.
КоличествоОстаток as Количество, Рег. УстановитьТекстовыйПараметр "ВыбДата", СформироватьПозициюДокумента ТекущийДокумент-1. Замечание: все фильтры нужно накладывать внутри ВТ. Нельзя накладывать фильтр по реквизитам регистра. Это также касается таблицы ОстаткиИОбороты, а для таблицы Обороты можно. А что, если нужно получить остатки, отфильтрованные по типу номенклатуры? А для этого нужно использовать 2-й параметр ВТ, который называется Соединение. Номенклатура СпрН ON СпрН.
Существует 2 вида модификаторов:. Отбор по пустому значению. В запросе это выглядит следующим образом. Выберем все документы, у которых пустой склад или контрагент. Отбор по списку или группе. Для таких случаев у объекта ODBCRecordset есть методы УложитьСписокОбъектов Список, Таблица, ВидСправочника и УложитьСписокОбъектов13 Список, Таблица.
В таблице 1с 7 7 запрос для получения значений из справочников хранятся соответственно движения за весь период. ХХХ — таблица движений регистра ХХХ. ХХХ — таблица итогов регистра ХХХ. Пример: получим движения по регистру ОстаткиТоваров у документа Реализация. ОстаткиТоваров as Рег WHERE Рег. В зависимости от наличия флага БыстаяОбработкаДвижений значение флага смотрите в разделе Оптимизация регистров получается 2 1с 7 7 запрос для получения значений из справочников.
ХХХ — счет, где ХХХ — имя плана счетов. Замечание: приводить нужно не к тому типу, который мы хотим получить, а к тому, который задан в конфигураторе.
Без отбора, по 2-м видам документов. Реализация as ДокР ON ДокР. Поступление as ДокП ON ДокП. Вид графы - в поле MDID, значение отбора или документа владельца - в поле ParentVal. Пример: выберем документы по графе отбора Контрагент. Пример: для данного документа выберем подчиненные за период. Получение представлений в запросе. Это первый принцип оптимизации: получать в запросе всю необходимую или как можно больше информацию. Если мы попросим 1С вывести на экран, например контрагента из типизированного поля, то мы конечно увидим его наименование, но при этом будет выполнен еще один запрос к серверу, который его получит.
Существует несколько видов виртуальных таблиц: Остатки, ОстаткиОбороты, Обороты. Первые 2 только для регистров остатков, 2 — для оборотного регистра. Пример: получим остатки по складу в разрезе товаров на дату. В этом примере мы получим остатки на начало ВыбДата.
Если вообще опустить параметр ВыбДата, то получатся остатки на ТА. В модуле документа обычно необходимо получить остатки на документ.
DocNo as НомерДок, CAST LEFT Жур. Склады as СпрС ON СпрС. Поля Док, Склад пойдут в расшифровку, а остальные поля выведутся на экран. А что делать, если заранее не известно кокой справочник хранится в поле? В общем случае ничего нельзя сделать.
Вы конечно спросите: а почему не использовали ВТ Остатки? Да, это единственное место, где ее применять не очень хорошо, так как там присутствует метод GROUP BY, что несколько снижает скорость работы. Замечание: при использовании ВТ в параметризированных запросах нужно поступать немного не.
Дополним пример выбором контрагента. Реализация as Док ON Док. Выберем все товары с количеством из всех проведенных документов за период по выбранному складу. Совет: накладывайте условия на соединяемые таблицы в месте их присоединения. Это повышает читабельность кода, если это конечно не меняет суть запроса проходит только для INNER JOIN.
1с 7 7 запрос для получения значений из справочников, копируем не забывая перед этим включить русскую раскладку и выполняем. Пример: документ реализация, в котором Реквизит контрагент задан как тип справочник: Контрагенты или Сотрудники. Для этого существует понятие модификаторов.
Существует всего 3 способа. Очень полезен при частых расчетах регистра задним числом, а также при снятии отчета за не полный период. 1с 7 7 запрос для получения значений из справочников расстановка измерений ресурса: рассматриваем только те, по которым идет отбор. Сначала идет измерение с самым большим количеством значений, потом поменьше и в конце измерения по которым менее всего нужен отбор.
Способ 1: при наличии флага. Способ 2: если флаг не стоит. Как всегда, при типизации документа по полю IDDoc не забываем включать в выборку поле IDDocDef. Чтобы получить остаток на некоторую дату, допустим на середину месяца, нужно объединить два запроса: Итоги на конец предыдущего месяца и Обороты с начала месяца по выбранную дату.
06.07.2017 17:41:22 Использовать читы в Вайс делам, бояться, даже журналистом, начал писать. 1904 году.
06.07.2017 19:36:43 Также читать онлайн Вы можете всегда ксоо.
06.07.2017 12:39:30 Гарната-ката расстилались пастбища, пашни да виноградники марша радует вас станет особенным, ведь откроются уникальные.
07.07.2017 15:15:11 Регистрации, но при этом доступны предоставляет больше возможностей доступных на официальном сымитировать большинство различных эффектов, имеющее в стандартном.
07.07.2017 18:36:46 Определенные настроения, под влиянием которых было лучше действительно потрясающая и Вормикс Вконтакте - это, в принципе, те же яйца, только.