Доброго дня всем! Знатоки, как корректно выглядит такой запрос SQL из 1С? А то что-то не получается никак(
ВЫБРАТЬ
ОстаткиНом.Номенклатура КАК Номенклатура,
ОстаткиНом.КоличествоОстаток КАК Остаток
ПОМЕСТИТЬ ВТостатки
ИЗ
РегистрНакопления.ОстаткиНоменклатуры.Остатки(&ДатаОстатка, Склад = &Склад) КАК ОстаткиНом
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТостатки.Номенклатура КАК Номенклатура,
ВТостатки.Остаток КАК Остаток
ИЗ
ВТостатки КАК ВТостатки
ПоказатьПо теме из базы знаний
- Работа с периодическими реквизитами 1С версии 7.7 при помощи прямых запросов.
- Ленивые запросы SQL (1С++) для 7.7 на русском
- Регистрация изменений в узле плана обмена данных независимых регистров сведений напрямую в sql
- Однопальцевое преобразование "одинэсного" запроса в запрос на SQL v 1.0
- Модель запроса SQL
Найденные решения
Например так
Запрос = СоздатьОбъект("ODBCRecordSet");
Запрос.УстановитьТекстовыйПараметр("ДатаОстатка", ДатаОстатка);
Запрос.УстановитьТекстовыйПараметр("Склад", Склад);
ТекстЗапроса = "Set NoCount ON
|CRE ATE TABLE #t (Номенклатура char(9), Остаток Numeric(19, 2))
|
|INS ERT IN TO #t (Номенклатура, Остаток)
|SELECT
| рег.Номенклатура,
| рег.КоличествоОстаток
|FROM
| $РегистрОстатки.ОстаткиНоменклатуры(:ДатаОстатка,, Склад = :Склад, (Номенклатура), (Количество)) рег
|
|SELECT
| t.Номенклатура [Номенклатура $Справочник.Номенклатура],
| t.Остаток
|FROM
| #t t
|";
Запрос = СоздатьОбъект("ODBCRecordSet");
Запрос.УстановитьТекстовыйПараметр("ДатаОстатка", ДатаОстатка);
Запрос.УстановитьТекстовыйПараметр("Склад", Склад);
ТекстЗапроса = "Set NoCount ON
|CRE ATE TABLE #t (Номенклатура char(9), Остаток Numeric(19, 2))
|
|INS ERT IN TO #t (Номенклатура, Остаток)
|SELECT
| рег.Номенклатура,
| рег.КоличествоОстаток
|FROM
| $РегистрОстатки.ОстаткиНоменклатуры(:ДатаОстатка,, Склад = :Склад, (Номенклатура), (Количество)) рег
|
|SELECT
| t.Номенклатура [Номенклатура $Справочник.Номенклатура],
| t.Остаток
|FROM
| #t t
|";
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) берем стандартную консоль запросов от 1С. Идет вместе с БСП. Включаем показ плана выполнения запроса.
Будет что-то вроде этого:
Тут использованы несколько другие таблицы.
Будет что-то вроде этого:
SEL ECT
T1._Period,
T1._UseTotals,
T1._ActualPeriod,
T1._UseSplitter,
T1._MinPeriod,
T1._MinCalculatedPeriod
FR OM _AccumRgOpt38853 T1
WHERE ((T1._Fld1551 = 0)) AND (T1._RegID = 0xBB0C44807BF920468ECAB89F9A033F08 AND T1._Fld1551 = 0
SEL ECT
T1.Fld38239RRef AS _Q_001_F_000RRef,
T1.Fld38245Balance_ AS _Q_001_F_001 INTO #T47190f70f3cc46a5bea0ca744f7bb7f5
FR OM (SEL ECT
T2.Fld38239RRef AS Fld38239RRef,
SUM(T2.Fld38245Balance_) AS Fld38245Balance_
FR OM (SELECT
T3._Fld38239RRef AS Fld38239RRef,
SUM(T3._Fld38245) AS Fld38245Balance_
FR OM _AccumRgT38248 T3
WH ERE ((T3._Fld1551 = 0)) AND (T3._Period = {ts '3999-11-01 00:00:00'} AND ((T3._Fld38242RRef = 0xB3380011955CBA6B11DF730308305ACC)) AND (T3._Fld38245 <> 0) AND (T3._Fld38245 <> 0))
GROUP BY T3._Fld38239RRef
HAVING (SUM(T3._Fld38245)) <> 0
UNI ON ALL SEL ECT
T4._Fld38239RRef AS Fld38239RRef,
CAST(SUM(CASE WHEN T4._RecordKind = 0 THEN -T4._Fld38245 ELSE T4._Fld38245 END) AS NUMERIC(27, 3)) AS Fld38245Balance_
FR OM _AccumRg38238 T4
WH ERE ((T4._Fld1551 = 0)) AND (T4._Period >= {ts '2018-06-21 00:00:00'} AND T4._Period < {ts '3999-11-01 00:00:00'} AND T4._Active = TRUE AND ((T4._Fld38242RRef = 0xB3380011955CBA6B11DF730308305ACC)))
GROUP BY T4._Fld38239RRef
HAVING (CAST(SUM(CASE WHEN T4._RecordKind = 0 THEN -T4._Fld38245 ELSE T4._Fld38245 END) AS NUMERIC(27, 3))) <> 0) T2
GROUP BY T2.Fld38239RRef
HAVING (SUM(T2.Fld38245Balance_)) <> 0) T1
ПоказатьТут использованы несколько другие таблицы.
Особенностью использования этой виртуальной таблицы является получение остатков на дату с использованием таблицы итогов.
Поэтому, если использование итогов отключено для регистра, работа с этой таблицей станет невозможной.
Поэтому, если использование итогов отключено для регистра, работа с этой таблицей станет невозможной.
У тебя в 7.7 есть таблица остатков на начало интервалов учета (в ТиС обычно месяц) и таблица движений.
Работает так : берешь запросом из таблицы остатков на начало месяца даты, Объединяешь с движениями (+ / -) из таблицы движений за период с начала месяца до даты+Время на которую нужны остатки.
Как называются таблицы - смотри инструменты какие у тебя есть, или пользуйся tSQL / 1c++
P.S.: 13 лет на 1c++ не писал, но помню )
Работает так : берешь запросом из таблицы остатков на начало месяца даты, Объединяешь с движениями (+ / -) из таблицы движений за период с начала месяца до даты+Время на которую нужны остатки.
Как называются таблицы - смотри инструменты какие у тебя есть, или пользуйся tSQL / 1c++
P.S.: 13 лет на 1c++ не писал, но помню )
Запрос = СоздатьОбъект("ODBCRecordSet");
Запрос.УстановитьТекстовыйПараметр("ДатаОстатка", ДатаОстатка);
Запрос.УстановитьТекстовыйПараметр("Склад", Склад);
ТекстЗапроса = "Set NoCount ON
|SELECT
| рег.Номенклатура [Номенклатура $Справочник.Номенклатура],
| рег.КоличествоОстаток Остаток
|FROM
| $РегистрОстатки.ОстаткиНоменклатуры(:ДатаОстатка,, Склад = :Склад, (Номенклатура), (Количество)) рег
|";
Показать
Например так
Запрос = СоздатьОбъект("ODBCRecordSet");
Запрос.УстановитьТекстовыйПараметр("ДатаОстатка", ДатаОстатка);
Запрос.УстановитьТекстовыйПараметр("Склад", Склад);
ТекстЗапроса = "Set NoCount ON
|CRE ATE TABLE #t (Номенклатура char(9), Остаток Numeric(19, 2))
|
|INS ERT IN TO #t (Номенклатура, Остаток)
|SELECT
| рег.Номенклатура,
| рег.КоличествоОстаток
|FROM
| $РегистрОстатки.ОстаткиНоменклатуры(:ДатаОстатка,, Склад = :Склад, (Номенклатура), (Количество)) рег
|
|SELECT
| t.Номенклатура [Номенклатура $Справочник.Номенклатура],
| t.Остаток
|FROM
| #t t
|";
Запрос = СоздатьОбъект("ODBCRecordSet");
Запрос.УстановитьТекстовыйПараметр("ДатаОстатка", ДатаОстатка);
Запрос.УстановитьТекстовыйПараметр("Склад", Склад);
ТекстЗапроса = "Set NoCount ON
|CRE ATE TABLE #t (Номенклатура char(9), Остаток Numeric(19, 2))
|
|INS ERT IN TO #t (Номенклатура, Остаток)
|SELECT
| рег.Номенклатура,
| рег.КоличествоОстаток
|FROM
| $РегистрОстатки.ОстаткиНоменклатуры(:ДатаОстатка,, Склад = :Склад, (Номенклатура), (Количество)) рег
|
|SELECT
| t.Номенклатура [Номенклатура $Справочник.Номенклатура],
| t.Остаток
|FROM
| #t t
|";
(11) Согласен, конкретно в этом примере они не нужны абсолютно) Мне просто нужно прямой SQL запрос составить с 4-мя или 5тью временными таблицами для последующих соединений, поэтому и интересовался для наглядности примера. Читал про Create, Insert, Ins ert in to - но не получилось что-то. Потому и код правильный нужен чтобы от него отталкиваться.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот