Табличное поле в 1С++

Автор АЛьФ, 11 марта 2024, 09:07

« назад - далее »

АЛьФ

Цитата: trdm от 20 марта 2024, 11:45А еще лучше модернизировать ODBCRecordset для уничтожения таблиц после запроса.
Вот как раз заглавный пост этой теме и показывает, что хорошо, когда этого не происходит :)

trdm

Ну дык временем жизни временных таблиц управляешь сам.

trdm

Любопытно. есть глюк с SELECT INTO
SELECT
Поле as ПолеСКирилицей
,Поле as fldLat

INTO
#timeTable
;
Select 
From obj
Where 
obj.fld in (Select ПолеСКирилицей from #timeTable) -- не работает.
obj.fld in (Select fldLat from #timeTable) -- работает.

trad

collation_name текущей БД и tempdb совпадают?

trdm

Cyrillic_General_CI_AS - тестовая
Cyrillic_General_CI_AS - tempdb

Ёпрст

Цитата: trdm от 01 апреля 2024, 10:54Любопытно. есть глюк с SELECT INTO
SELECT
Поле as ПолеСКирилицей
,Поле as fldLat

INTO
#timeTable
;
Select 
From obj
Where 
obj.fld in (Select ПолеСКирилицей from #timeTable) -- не работает.
obj.fld in (Select fldLat from #timeTable) -- работает.

А че значит не работает ?
Ну выведи чего там obj.fld в селекте и сравни.

Ёпрст

Не понимаю, чего там может не работать?

SELECT
'тут явно одна из черепашек врёт' as Хрень
,'Вася' as fld
INTO
#obj
;

SELECT
'Вася' as ПолеСКирилицей
,'loshped' as fldLat
INTO
#timeTable
;
Select * 
From #obj  
Where fld in (Select ПолеСКирилицей from #timeTable) -- усё работает работает.
--obj.fld in (Select fldLat from #timeTable) -- работает.

trdm

в оригинеле так:
ТекстЗапроса = "
	|-- Чистка временной таблицы
	|set nocount on
	|if exists (select * from tempdb..sysobjects where id = object_id('tempdb..#ВосстановленныеТовары') and sysstat & 0xf = 3)
	|  drop table #ВосстановленныеТовары;
	|
	|-- ловим документы передачи товара реализатору
	|SELECT 
	|	$регПартииТов.Фирма as [Фирма $Справочник.Фирмы]
	|	, $регПартииТов.Товар as [Товар $Справочник.Номенклатура]
	|	,$регПартииТов.ПрихДокумент as [Документ $Документ] -- не пашет :(
	|	,$регПартииТов.ПрихДокумент as docum_pr
	|	, -$дсОтчетР.Количество as Количество
	|	, -$дсОтчетР.Сумма as Сумма
	|	, CAST(LEFT(жОбщий.Date_Time_IDDoc, 8) as DateTime) as Дата
	|	INTO #ВосстановленныеТовары
	|FROM 
	|	$Регистр.ПартииТоваров as регПартииТов(NOLOCK)
	|	LEFT JOIN $ДокументСтроки.ОтчетРеализатора as дсОтчетР(NOLOCK) 
	|		ON дсОтчетР.IDDOC = :ВыбОтчетРеализатора And $дсОтчетР.Товар = $регПартииТов.Товар
	|		AND $дсОтчетР.Количество <0
	|	LEFT JOIN _1SJourn as жОбщий (NOLOCK) on жОбщий.IDDOC = RIGHT($регПартииТов.ПрихДокумент,9)
	|WHERE
	|	регПартииТов.IDDOC = :ВыбОтчетРеализатора
	|	AND регПартииТов.DEBKRED = 0
	|ORDER BY	жОбщий.DATE_TIME_IDDOC
	|
	|; 
	|
	|SELECT 
	|	 $регВзаимПок.Фирма as [Фирма $Справочник.Фирмы]
	|	 ,регВзаимПок.DEBKRED as ПриходРасход
	|	 ,регВзаимПок.ACTNO as ACTNO
	|	, $регВзаимПок.Клиент as [Клиент $Справочник]
	|	, $регВзаимПок.Договор as [Договор $Справочник.Договора]
	|	, $регВзаимПок.СтавкаНДС as [СтавкаНДС $Перечисление.ЗначенияНДС]
	|	, $регВзаимПок.СтавкаНП as [СтавкаНП $Справочник.СтавкиНП]
	|	, $регВзаимПок.ПоставщикКомм as [ПоставщикКомм $Справочник.Контрагенты]
	|	, $регВзаимПок.ДоговорКомм as [ДоговорКомм $Справочник.Договора]
	|	, $регВзаимПок.ВидОтгрузки as ВидОтгрузки
	|	, $регВзаимПок.КредДокумент as [КредДокумент $Документ]
	|
	|	, $регВзаимПок.Долг as Долг
	|	, $регВзаимПок.НеоплачСтоимость as НеоплачСтоимость
	|
	|	, $регВзаимПок.ОблагаемаяБазаНП as ОблагаемаяБазаНП
	|	, $регВзаимПок.КодОперации as КодОперации
	|	, $регВзаимПок.Комитент as [Комитент $Справочник.Контрагенты]
	|	, $регВзаимПок.ДоговорКомитента as [ДоговорКомитента $Справочник.Договора]
	|	, $регВзаимПок.ДокПередачи as [ДокПередачи $Документ]
	|	, $регВзаимПок.ВзаимозачетС as [ВзаимозачетС $Справочник]
	|	, жОбщий.IDDOC as [Докум $Документ]
	|	, жОбщий.IDDOCDEF as Докум_вид
	|FROM
	|	$Регистр.ВзаиморасчетыПокупателей as регВзаимПок(NOLOCK)
	|	INNER JOIN _1SJourn as жОбщий (NOLOCK) on регВзаимПок.IDDOC = жОбщий.IDDOC
	|WHERE
	|	жОбщий.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~
	|	AND $регВзаимПок.Клиент = $ВидСправочника36.Контрагенты+:ВыбКлиент
	|	AND ($регВзаимПок.КредДокумент IN (SELECT docum_pr FROM #ВосстановленныеТовары) OR 
	|		$регВзаимПок.ДокПередачи IN (SELECT docum_pr FROM #ВосстановленныеТовары))
	|ORDER BY
	|	жОбщий.DATE_TIME_IDDOC Desc
	|";

Ёпрст

Цитата: trdm от 07 апреля 2024, 15:14в оригинеле так:
ТекстЗапроса = "
	|-- Чистка временной таблицы
	|set nocount on
	|if exists (select * from tempdb..sysobjects where id = object_id('tempdb..#ВосстановленныеТовары') and sysstat & 0xf = 3)
	|  drop table #ВосстановленныеТовары;
	|
	|-- ловим документы передачи товара реализатору
	|SELECT 
	|	$регПартииТов.Фирма as [Фирма $Справочник.Фирмы]
	|	, $регПартииТов.Товар as [Товар $Справочник.Номенклатура]
	|	,$регПартииТов.ПрихДокумент as [Документ $Документ] -- не пашет :(
	|	,$регПартииТов.ПрихДокумент as docum_pr
	|	, -$дсОтчетР.Количество as Количество
	|	, -$дсОтчетР.Сумма as Сумма
	|	, CAST(LEFT(жОбщий.Date_Time_IDDoc, 8) as DateTime) as Дата
	|	INTO #ВосстановленныеТовары
	|FROM 
	|	$Регистр.ПартииТоваров as регПартииТов(NOLOCK)
	|	LEFT JOIN $ДокументСтроки.ОтчетРеализатора as дсОтчетР(NOLOCK) 
	|		ON дсОтчетР.IDDOC = :ВыбОтчетРеализатора And $дсОтчетР.Товар = $регПартииТов.Товар
	|		AND $дсОтчетР.Количество <0
	|	LEFT JOIN _1SJourn as жОбщий (NOLOCK) on жОбщий.IDDOC = RIGHT($регПартииТов.ПрихДокумент,9)
	|WHERE
	|	регПартииТов.IDDOC = :ВыбОтчетРеализатора
	|	AND регПартииТов.DEBKRED = 0
	|ORDER BY	жОбщий.DATE_TIME_IDDOC
	|
	|; 
	|
	|SELECT 
	|	 $регВзаимПок.Фирма as [Фирма $Справочник.Фирмы]
	|	 ,регВзаимПок.DEBKRED as ПриходРасход
	|	 ,регВзаимПок.ACTNO as ACTNO
	|	, $регВзаимПок.Клиент as [Клиент $Справочник]
	|	, $регВзаимПок.Договор as [Договор $Справочник.Договора]
	|	, $регВзаимПок.СтавкаНДС as [СтавкаНДС $Перечисление.ЗначенияНДС]
	|	, $регВзаимПок.СтавкаНП as [СтавкаНП $Справочник.СтавкиНП]
	|	, $регВзаимПок.ПоставщикКомм as [ПоставщикКомм $Справочник.Контрагенты]
	|	, $регВзаимПок.ДоговорКомм as [ДоговорКомм $Справочник.Договора]
	|	, $регВзаимПок.ВидОтгрузки as ВидОтгрузки
	|	, $регВзаимПок.КредДокумент as [КредДокумент $Документ]
	|
	|	, $регВзаимПок.Долг as Долг
	|	, $регВзаимПок.НеоплачСтоимость as НеоплачСтоимость
	|
	|	, $регВзаимПок.ОблагаемаяБазаНП as ОблагаемаяБазаНП
	|	, $регВзаимПок.КодОперации as КодОперации
	|	, $регВзаимПок.Комитент as [Комитент $Справочник.Контрагенты]
	|	, $регВзаимПок.ДоговорКомитента as [ДоговорКомитента $Справочник.Договора]
	|	, $регВзаимПок.ДокПередачи as [ДокПередачи $Документ]
	|	, $регВзаимПок.ВзаимозачетС as [ВзаимозачетС $Справочник]
	|	, жОбщий.IDDOC as [Докум $Документ]
	|	, жОбщий.IDDOCDEF as Докум_вид
	|FROM
	|	$Регистр.ВзаиморасчетыПокупателей as регВзаимПок(NOLOCK)
	|	INNER JOIN _1SJourn as жОбщий (NOLOCK) on регВзаимПок.IDDOC = жОбщий.IDDOC
	|WHERE
	|	жОбщий.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~
	|	AND $регВзаимПок.Клиент = $ВидСправочника36.Контрагенты+:ВыбКлиент
	|	AND ($регВзаимПок.КредДокумент IN (SELECT docum_pr FROM #ВосстановленныеТовары) OR 
	|		$регВзаимПок.ДокПередачи IN (SELECT docum_pr FROM #ВосстановленныеТовары))
	|ORDER BY
	|	жОбщий.DATE_TIME_IDDOC Desc
	|";

Ёпта... линейкой бы металлической за такой код (забыл добавить, по пальчикам! )
НАХРЕНА ты типизацию пихаешь во временную табличку ?!!! Выкинь к едрени фени всю типизацию оттуда и всё заработает:

   |   $регПартииТов.Фирма Фирма -- Никогда не пихай типизацию во временные таблички или в union и т.п as [Фирма $Справочник.Фирмы]
   |   , $регПартииТов.Товар Товар --as [Товар $Справочник.Номенклатура]
   |   ,$регПартииТов.ПрихДокумент Документ -- as [Документ $Документ] -- не пашет :(
   |   ,$регПартииТов.ПрихДокумент as docum_pr
   |   , -$дсОтчетР.Количество as Количество
   |   , -$дсОтчетР.Сумма as Сумма
   |   , CAST(LEFT(жОбщий.Date_Time_IDDoc, 8) as DateTime) as Дата
   |   INTO #ВосстановленныеТовары

trdm

Цитата: Ёпрст от 08 апреля 2024, 09:04НАХРЕНА ты типизацию пихаешь во временную табличку ?!!! Выкинь к едрени фени всю типизацию оттуда и всё заработает:
Это предварительный код, в основном пригладил.

trad

Так что в итоге-то? работает "ПолеСКирилицей" или нет?
Я не уловил превращение анамнеза

АЛьФ

Цитата: trad от 08 апреля 2024, 11:51Так что в итоге-то? работает "ПолеСКирилицей" или нет?
Я не уловил превращение анамнеза

Работает. Просто код типа ", $регПартииТов.Товар as [Товар $Справочник.Номенклатура]" дает во временной таблице колонку и именем "[Товар $Справочник.Номенклатура]".

Arbuz

Цитата: Ёпрст от 08 апреля 2024, 09:04Ёпта... линейкой бы металлической за такой код (забыл добавить, по пальчикам! )
НАХРЕНА ты типизацию пихаешь во временную табличку ?!!! Выкинь к едрени фени всю типизацию оттуда и всё заработает:


Да, я тоже прошёлся по этим граблям. И — по моим наблюдениям — новички, в основном, прут именно по ним. На начальном этапе сразу не хватает элементарной базы: что там унутре лежит, как оно барюкает и чего эта типизация делает в принципе. Самообразование, оно такое... несистемное.