|
v7: Не работает найти по реквизиту после прямой вставки данных | ☑ | ||
---|---|---|---|---|
0
КонецЦикла
13.11.13
✎
13:29
|
Точнее работает, но не для всех элементов о_О
Есть справочник, есть индексы (поля с сортировкой, отборами) 1С ищет так: set rowcount 1 select * from SC1507(NOLOCK INDEX=VI1497) where SP1497='4016369666159' order by SP1497,ROW_ID set rowcount 0 Заполняю справочник нагло инсертом с предварительным делетом Но по НЕКОТОРЫМ товарам поиск не работает Запросом не из 1С ищет, конечно Если установить сортировку по реквизиту в 1С - все ОК, "плохой" товар на своем месте Копать индекс не могу при открытой форме - слетит 1С Пересоздание после вставки не помогло. Переделать на свои поиски? Советы? Спасипки |
|||
1
Ork
13.11.13
✎
13:36
|
(0)
1. Переделать на работу с фоксовским драйвером. 2. При открытии файла ДБФ открывать СДХ. Оно само обновит индексы. |
|||
2
КонецЦикла
13.11.13
✎
13:37
|
Это СКЛ
|
|||
3
КонецЦикла
13.11.13
✎
13:37
|
Все, разобрался сцуко
|
|||
4
КонецЦикла
13.11.13
✎
13:38
|
Если Спр.НайтиПоРеквизиту("ШтрихКод", ШтрихКод,1) = 1 тогда
//АктивизироватьОбъект(Спр.ТекущийЭлемент()); АктивизироватьОбъект(Спр); КонецЕсли; Спр.ТекущийЭлемент() - пустой был |
|||
5
Ёпрст
13.11.13
✎
13:39
|
а какой поиск то перестал работать ?
|
|||
6
Ёпрст
13.11.13
✎
13:39
|
ааа...
|
|||
7
КонецЦикла
13.11.13
✎
13:39
|
у 1с курсоры с катушек съезжают при таком жестком подходе :)
|
|||
8
Ёпрст
13.11.13
✎
13:40
|
а смысл в делете записи ?
Лень update делать было ?.. |
|||
9
Ёпрст
13.11.13
✎
13:41
|
ты же с тем же id лепишь поди.. так ?
:) |
|||
10
КонецЦикла
13.11.13
✎
13:42
|
апдейт нет смыла
ид леплю какие хочу, это же служебный спр-к |
|||
11
КонецЦикла
13.11.13
✎
13:42
|
ид тот же :)
|
|||
12
КонецЦикла
13.11.13
✎
13:43
|
а... вот это интересно, но ведь индекс по row_id, а там автоинкремент
|
|||
13
КонецЦикла
13.11.13
✎
14:06
|
Походу ТекущийЭлемент() пустой из-за неправильно сформированных id. Я был настолько нагл, что id формировал инкрементом начиная с 1, в десятичной системе. Теперь начал нумеровать с 999 (чтобы четвертый знак не был нулевым, т.е. начиналось с 1000) и все взлетело.
|
|||
14
КонецЦикла
13.11.13
✎
14:09
|
Т.е. значение в строку внутр было для некоторых элементов " много пробелов 0239"
|
|||
15
КонецЦикла
13.11.13
✎
14:12
|
Спасибо Епрст за наводку :)
Спр-к переформировывается в среднем за 3 секунды, было чуть более минуты |
|||
16
КонецЦикла
13.11.13
✎
14:43
|
Вообще тут можно несколько зайцев убить, т.к. появляется возможность управлять row_id и как надо упорядочить поиск штатными ср-вами. Например, при поиске по ШК будет выдаваться партия, поступившая первой.
|
|||
17
Dolly_EV
14.11.13
✎
04:24
|
Можно я тут спрошу? дабы не плодить... тоже про ШтрихКоды))
Вот такой запрос: SELECT -- тзОстОбороты.АртикулСМ -- СпрТТ.ID AS [ТТочка $Справочник.ТоргТочки] тзТТ.ТекЭлемТТ AS [ТТочка $Справочник] ,MAX(тзТТ.ТекЭлемТТ) AS ТТочкаИсх ,MAX(тзОстОбороты.КодТТ) AS ТТочкаИзТЗ ,MAX(тзОстОбороты.АртикулСМ) AS АртикулСМ ,MAX(тзСМ_ШК.ШК) AS ШК ,СпрШК.PARENTEXT AS [Номенклатура $Справочник.Номенклатура] ,SUM(тзОстОбороты.ОстНач) AS ОстНач ,SUM(тзОстОбороты.Прих) AS Прих ,SUM(тзОстОбороты.Расх) AS Расх ,SUM(тзОстОбороты.ОстКон) AS ОстКон FROM vt_тзОстОбороты AS тзОстОбороты LEFT JOIN vt_тзСМ_ШК AS тзСМ_ШК ON тзОстОбороты.АртикулСМ = тзСМ_ШК.АртикулСМ LEFT JOIN [Справочник.ШтрихКодСпр] AS СпрШК ON RTRIM(тзСМ_ШК.ШК) = RTRIM(СпрШК.Штрихкод) LEFT JOIN vt_MapTable_PrivozRefContractor AS тзТТ ON RTRIM(тзОстОбороты.КодТТ) = RTRIM(тзТТ.КодТТ) WHERE 1=1 AND 2=2 GROUP BY тзТТ.ТекЭлемТТ,СпрШК.PARENTEXT Подбор индекса для таблицы SC51588: Ограничения: Найдено в кэше Индекс не выбран. Стоимость: 9986 Подбор индекса для таблицы SC51588: Ограничения: Найдено в кэше Индекс не выбран. Стоимость: 9986 Время подготовки запроса: 24 мс, время выполнения запроса: 254444 мс. Время запроса: 4 мин, 14 с, 468 мс - это 1SQLite на SQL - 200 мс. Вопрос: почему 1SQlite не находит индекс для Справочник.ШтрихКодСпр по полю "Штрихкод"?? Отбор и сортировка на реквизите стоит. |
|||
18
Dolly_EV
14.11.13
✎
10:42
|
ап
|
|||
19
Ёпрст
14.11.13
✎
10:43
|
(17) будь проще - укажи его явно в запросе.
|
|||
20
Dolly_EV
14.11.13
✎
10:44
|
(19) как?
|
|||
21
Ёпрст
14.11.13
✎
11:00
|
(20) через idx_....тут поля из твоего индекса
|
|||
22
Dolly_EV
14.11.13
✎
11:01
|
(21) можно по-подробнее? куда пихать idx_ ?
|
|||
23
Ёпрст
14.11.13
✎
11:08
|
в условие,
ЗЫ: индекс то какой хоть у таблички ? |
|||
24
Dolly_EV
14.11.13
✎
11:23
|
(23)
# Name |Descr |Type[A/S/U]|DBTableName|ReUsable T=SC51588 |Справочник ШтрихКодСпр |A |SC51588 |1 #-----Fields------- # Name |Descr |Type|Length|Precision F=ID |ID object |C |9 |0 F=PARENTEXT |Parent in other tabl|C |9 |0 F=ISMARK |Flag Object is Marke|C |1 |0 F=VERSTAMP |Version stamp |C |6 |0 F=SP51595 |(P)Штрихкод |C |13 |0 F=SP51592 |(P)Ед |C |9 |0 #----Indexes------ # Name |Descr |Unique|Indexed fields |DBName I=IDD |of ID |0 |ID |IDD I=PCODE |of PARENT |0 |PARENTEXT |PCODE I=VI51595 |VI51595 |0 |SP51595(UPPER=128) |VI51595 I=VIP51595 |VIP51595 |0 |PARENTEXT,SP51595(UPPER=128) |VIP51595 |
|||
25
Ёпрст
14.11.13
✎
11:31
|
Не уверен за синтаксис, так спробуй
(давно на клюшках ничего не писал) ON RTRIM(тзСМ_ШК.ШК) = RTRIM(СпрШК.IDX_PARENTEXT_SP51595) |
|||
26
Ёпрст
14.11.13
✎
11:33
|
только вон на счет тримов, не уверен, будет ли выбран VIP51595 в этом случае.
|
|||
27
Dolly_EV
14.11.13
✎
11:35
|
no such column: СпрШК.IDX_PARENTEXT_SP51595
и с тримами и без тримов |
|||
28
Dolly_EV
14.11.13
✎
11:36
|
(25) где вообще про это почитать? (явное использование индекса в запросе)
|
|||
29
Ёпрст
14.11.13
✎
11:47
|
(28) сделай
select * from [Справочник.ШтрихКодСпр] посмотри, какое имя индекса тама |
|||
30
Dolly_EV
14.11.13
✎
11:59
|
где и чем это сделать?
|
|||
31
Ёпрст
14.11.13
✎
12:24
|
да просто выполни запроос в консоли
|
|||
32
Ёпрст
14.11.13
✎
12:24
|
или выгрузи в тз и посмотри
|
|||
33
spock
14.11.13
✎
12:28
|
(13)Скорее всего эта классика у тебя есть, но вдруг поможет:
CREATE FUNCTION dbo.convert10to36(num int) RETURNS varchar(99) AS BEGIN DECLARE @r varchar(99) SET @r = '' WHILE num > 0 SELECT @r = char( CASE WHEN num % 36 < 10 THEN num % 36 + ascii('0') ELSE num % 36 + ascii('A') - 10 END ) + @r, num = num / 36 RETURN @r END GO CREATE FUNCTION dbo.convert36to10(input varchar(99)) RETURNS int AS BEGIN DECLARE temp as char(1) DECLARE @ret as int DECLARE degree as int DECLARE i as int DECLARE @charcode as int SET @ret = 0 SET i = 0 SET degree = 0 WHILE (LEN(input) - i) > 0 BEGIN SET temp = UPPER(SUBSTRING(input, LEN(input) - i, 1)) SET @charcode = ASCII(temp) IF ((@charcode > 57) and (@charcode < 65)) OR (@charcode < 48) OR (@charcode > 90) BEGIN SET i = i + 1 CONTINUE END IF (@charcode < 58) SET @ret = @ret + (@charcode - 48) * (POWER(36, degree)) ELSE IF (@charcode < 91) SET @ret = @ret + (10 + @charcode - 65) * (POWER(36, degree)) SET i = i + 1 SET degree = degree + 1 END RETURN @ret END GO CREATE FUNCTION dbo.IncID(input char(9), @step int = 1) RETURNS char(9) AS BEGIN DECLARE @retid as char(9) DECLARE @uribid as char(3) DECLARE @dec as int IF input IS NULL SET @retid = ' ' SET @uribid = RIGHT(input, 3) SET @dec = dbo.convert36to10(LEFT(input, 6)) SET @retid = dbo.convert10to36(@dec + @step) SET @retid = RIGHT(' ' + RTRIM(@retid) + @uribid, 9) RETURN @retid END GO |
|||
34
spock
14.11.13
✎
12:31
|
прикольно получилось
|
|||
35
КонецЦикла
14.11.13
✎
12:35
|
(33) Спасибо, этим тоже занимался, но оно и так прекрасно работает, в десятичном виде :)
Если бы там инфа расползалась или хранилась долгое время... Это служебные данные и заполняются очень быстро |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |