powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Прямой запрос к sql из 1С 7.7
19 сообщений из 19, страница 1 из 1
Прямой запрос к sql из 1С 7.7
    #36933369
nick_dem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть 1с 7.7 с базой на sql. Нужно выбрать последний приходный документ по каждому из товаров. Подскажите прямой запрос к sql пожалуйста
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36933447
Leierkastenmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nick_dem,

Это вам быстрее ответят в разделе Microsoft SQL Server. Я бы и тут ответил, если была бы хотя бы структура таблицы с полями.

Без таблицы могу сказать, что надо сделать что-то типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select *
from    ТаблицаПриходов Т1
where  not exists (
                            select *
                            from    ТаблицаПриходов Т2
                            where  Т2.Товар = Т1.Товар 
                                      and
                                      Т2.ДатаВремяДокумента > Т1.ДатаВремяДокумента 
                          )
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36933479
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кидали бы их в периодический реквзит...
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36933494
nick_dem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leierkastenmann,
вот структура:
RA1130 ОстаткиТоваров движения
#-----Fields-------
# Name |Descr |Type|Length|Precision
F=IDDOC |ID Document's |C |9 |0
F=LINENO_ |LineNo |S |0 |0
F=ACTNO |Action No |I |0 |0
F=DEBKRED |Flag Debet/Kredit |L |0 |0
F=IDDOCDEF |ID Def Document |I |0 |0
F=DATE_TIME_IDDOC |Date+Time+IDDoc |C |23 |0
F=SP1131 |(P)Товар |C |9 |0
F=SP6445 |(P)Склад |C |9 |0
F=SP1132 |(P)Партия |C |9 |0
F=SP7032 |(P)Фирма |C |9 |0
F=SP1133 |(P)ОстатокТовара |N |11 |3
F=SP2655 |(P)Стоимость |N |14 |2
F=SP6488 |(P)НДС |N |14 |2
F=SP3027 |(P)КодОперации |C |1 |0
F=SP8129 |(P)СтавкаНДС |C |9 |0
F=SP8130 |(P)НДСДокумента |N |14 |2

в sql я смог придумать только такой вот запрос:
select top 1 * from RA1130
where (SP1131=' 5S9Ц ')
and (DEBKRED=1)
order by DATE_TIME_IDDOC desc

но он мне возвращает последний приход по конкретному товару, а как по всем сделать - у меня проблема(
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36933501
nick_dem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист 1сКидали бы их в периодический реквзит...
Если бы делал с нуля, вообще бы с семеркой не связывался))
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36933581
Leierkastenmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nick_demLeierkastenmann,
вот структура:
RA1130 ОстаткиТоваров движения
#-----Fields-------
# Name |Descr |Type|Length|Precision
F=IDDOC |ID Document's |C |9 |0
F=LINENO_ |LineNo |S |0 |0
F=ACTNO |Action No |I |0 |0
F=DEBKRED |Flag Debet/Kredit |L |0 |0
F=IDDOCDEF |ID Def Document |I |0 |0
F=DATE_TIME_IDDOC |Date+Time+IDDoc |C |23 |0
F=SP1131 |(P)Товар |C |9 |0
F=SP6445 |(P)Склад |C |9 |0
F=SP1132 |(P)Партия |C |9 |0
F=SP7032 |(P)Фирма |C |9 |0
F=SP1133 |(P)ОстатокТовара |N |11 |3
F=SP2655 |(P)Стоимость |N |14 |2
F=SP6488 |(P)НДС |N |14 |2
F=SP3027 |(P)КодОперации |C |1 |0
F=SP8129 |(P)СтавкаНДС |C |9 |0
F=SP8130 |(P)НДСДокумента |N |14 |2

в sql я смог придумать только такой вот запрос:
select top 1 * from RA1130
where (SP1131=' 5S9Ц ')
and (DEBKRED=1)
order by DATE_TIME_IDDOC desc

но он мне возвращает последний приход по конкретному товару, а как по всем сделать - у меня проблема(

Ну вот и подставляйте в запрос, который я написал.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select *
from    RA1130  Т1
where  not exists (
                            select *
                            from    RA1130  Т2
                            where  Т2.SP1131  = Т1.SP1131 
                                      and
                                      Т2.DATE_TIME_IDDOC > Т1.DATE_TIME_IDDOC
                                      and
                                      Т2.DEBKRED =  1 
                          )
          and
          Т1.DEBKRED =  1 

Если надо ограничение по товару, то просто еще условие добавьте.
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36933597
Leierkastenmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист 1сКидали бы их в периодический реквзит...

Прямой запрос от этого не сильно изменится, если нужен будет последний приход по товару. То же самое будет, только к _1sconst.
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36933601
nick_dem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leierkastenmann
Ну вот и подставляйте в запрос, который я написал.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select *
from    RA1130  Т1
where  not exists (
                            select *
                            from    RA1130  Т2
                            where  Т2.SP1131  = Т1.SP1131 
                                      and
                                      Т2.DATE_TIME_IDDOC > Т1.DATE_TIME_IDDOC
                                      and
                                      Т2.DEBKRED =  1 
                          )
          and
          Т1.DEBKRED =  1 

Если надо ограничение по товару, то просто еще условие добавьте.
Дело в том что этот запрос вернет ВСЕ приходы по всем товарам, а мне надо только последний ..
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36933707
Leierkastenmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nick_dem
Дело в том что этот запрос вернет ВСЕ приходы по всем товарам, а мне надо только последний ..

Запрос вернул или вы думаете, что он вернет?

Только кстати почему debkred = 1, если приходные движения debkred = 0?
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36933853
nick_dem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leierkastenmann
Запрос вернул или вы думаете, что он вернет?

Вернул
Leierkastenmann
Только кстати почему debkred = 1, если приходные движения debkred = 0?

Действительно, черт попутал)

Сделал на базе вашего примера следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select IDDOC,DATE_TIME_IDDOC,SP1131,SP1133,SP2655
from    RA1130  Т1
where  not exists (
                            select top  1  *
                            from    RA1130  Т2
                            where  Т2.SP1131  = Т1.SP1131 
                                      and
                                      Т2.IDDOC <> Т1.IDDOC
                                      and
                                      Т2.DEBKRED =  0 
                            order by Т2.DATE_TIME_IDDOC desc          
                          )
          and
          Т1.DEBKRED =  0 
order by T1.sp1131

Спасибо за помощь!!!
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36933960
Leierkastenmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nick_dem,

Не верю, чтобы мой запрос вернул для одного и того же товара несколько строк с разными значениями поля iddoc. Несколько строк может быть только если документ делает несколько движений или просто товар по строкам дублируется. Это исключается дополнительным условием на поле actno (или lineno_)

А вот ваш модифицированный запрос вернет только тот товар, по которому не было других приходов. Естественно что единственный приход он есть последний, но как быть с товарами, у которых несколько приходов?

Сортировки внутри exists в данном случае бессмысленны, от них наличие/отсутствие записей не меняется.
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36934030
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чёт у Вас тут как-то всё сложно ;)

Select ra.SP1131, Max(j.DATE_TIME_IDDOC)
From RA1130 ra
Join _1Sjounr J on ra.IDDOC = j.IDDOC
Group By ra.SP1131

Товары могут приходоваться разными типами документов? Если нет, то строить не по регистру, а по ТЧ документа.
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36934055
Leierkastenmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AHDP,

А если другие реквизиты помимо номенклатуры и документа нужны, то как с таким запросом выкручиваться будете? Наворочанные соединения строить?
И зачем соединение с журналом? Условий на период никаких нет.
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36934063
nick_dem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AHDP, Leierkastenmann

огромное спасибо!

P.S. Интересно бы почитать курс молодого бойца в sql
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36934079
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про журнал согласен, забыл, что дата в регистре лежит. Дата необходима для определения "Последний" в пользоваетльском понимании этого термина. Так что всё вообще сводится к простой группировке по товару с определением Max().

Если запрос более хитрый, тогда и добавятся Join's с Exist'ами.
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36934095
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nick_dem,

Вам уже указали на sql-ex.ru. Учебник к нему тут sql-tutorial.ru
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36934212
nick_dem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AHDP,
Я прошу прощения, но у меня есть ещё один глупый вопрос.
Собственно запрос я делаю средствами 1С++ для 1с77.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ТекстЗапроса="Select  ra.SP6445, ra.SP1131, Max(ra.DATE_TIME_IDDOC) as Dat
		|From RA1130 ra
		|group by ra.SP6445, ra.SP1131
		|order By ra.SP6445, ra.SP1131";
	Запрос=СоздатьОбъект("ODBCRecordSet");
	Запрос.Открыть(ТекстЗапроса);
	Запрос.УстТипыКолонок1С("Справочник.Склады,Справочник.Товары,Документ");
	ТЗ=СоздатьОбъект("ТаблицаЗначений");
	Запрос.ПолучитьРезультатыВ_ТЗ(ТЗ, 1 );
	Запрос.Закрыть();
	ТЗ.ВыбратьСтроку()
В результате получается таблица из трех колонок, где в первых двух находятся объекты 1с, а вот в последней ссылку на документ не получается получить (масло масленное))) пробовал добавлять iddoc, но тоже положительного результата не добился... Помогите...
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36934228
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ссылку на документ даёт IDDOC. Вам для получения IDDOC необходимо воспользоваться функцией Right(Max(...), 9)
...
Рейтинг: 0 / 0
Прямой запрос к sql из 1С 7.7
    #36935563
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nick_dem,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Запрос=СоздатьОбъект("ODBCRecordSet");
ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТекстЗапроса="
|SELECT Подзапрос.Товар as [Товар $Справочник.Товары]
|	, Right(Подзапрос.ДатаВремяIddoc,9) as [ДокПрихода $Документ]
|	, Ж2.IDDOCDEF as ДокПрихода_Вид
|FROM
|	(SELECT MAX(Жур.datetimeiddoc) as ДатаВремяIddoc
|		, $TReg.Товар as Товар
|	FROM $Регистр.ОстаткиТоваров AS TReg
|		LEFT JOIN _1SJOURN AS Жур ON Жур.IDDOC = Right(TReg.IDDOC,9)
|	GROUP BY $TReg.Товар) as Подзапрос
|LEFT JOIN _1SJourn as Ж2 ON Ж2.IDDoc = Right(Подзапрос.ДатаВремяIddoc,9)";
Запрос.ВыполнитьИнструкцию(ТекстЗапроса,ТЗ, 1 );

Ну а так научитесь пользоваться поиском. Я по крайней мере ради интереса посмотрел - штук 6 ссылок дает практически на готовое решение.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Прямой запрос к sql из 1С 7.7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]