Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) ИндексированнаяТаблица : странное поведение (число прочтений - 5957 )
IgorEr
YaBB Newbies
*
Отсутствует


I Love Life!

Сообщений: 3
Зарегистрирован: 28. Августа 2006
Пол: Мужской
ИндексированнаяТаблица : странное поведение
30. Октября 2006 :: 11:57
Печать  
Использую 1cpp v.2.0.3.1 от 29.08.2006.
Никогда ранее не использовал ИндексированнуюТаблицу.
Попробовал. Сделал небольшой тест и получились странные результаты.
Вроде так не должно работать.

Кратко:
1)
индексирую тз по колонке с модификатором '*'.
перебираю тз и пытаюсь найди каждое значение по индексу.
Находит
2)
индексирую тз по колонке без каких-либо модификаторов.
перебираю тз и пытаюсь найди каждое значение по индексу.
Некоторые не Находит !!!


Файл с результатами прикладываю.
  

_part01.rar ( 224 KB | Загрузки )
Наверх
 
IP записан
 
IgorEr
YaBB Newbies
*
Отсутствует


I Love Life!

Сообщений: 3
Зарегистрирован: 28. Августа 2006
Пол: Мужской
Re: ИндексированнаяТаблица : странное поведение
Ответ #1 - 30. Октября 2006 :: 11:58
Печать  
Вторая часть результатов
  

_part02.rar ( 167 KB | Загрузки )
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ИндексированнаяТаблица : странное поведение
Ответ #2 - 30. Октября 2006 :: 13:33
Печать  
Давай простой тест.
Код можешь выложить прямо сюда.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: ИндексированнаяТаблица : странное поведение
Ответ #3 - 31. Октября 2006 :: 06:09
Печать  
Не заморачиваетесь.
Это не баг ИТЗ а баг 1С.
Индексировать без модификатора лучше только в тех случаях если ты данную колонку бедшь юзать для поиска. Во все остальных случаях лучше пользоваться "*". это не мое мненение а мнение adirks
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ИндексированнаяТаблица : странное поведение
Ответ #4 - 31. Октября 2006 :: 07:16
Печать  
varelchik писал(а) 31. Октября 2006 :: 06:09:
Не заморачиваетесь.
Это не баг ИТЗ а баг 1С.

Можно поподробнее, плз?

Цитата:
Индексировать без модификатора лучше только в тех случаях если ты данную колонку бедшь юзать для поиска. Во все остальных случаях лучше пользоваться "*". это не мое мненение а мнение adirks

Ровным счетом наоборот Улыбка

Индекс без модификатора - это очень медленный индекс для алфавитной сортировки объектов.
Индекс по внутр. предст - это быстрый индекс для поиска и т.д.

То же самое - для документов.
Пока так.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
IgorEr
YaBB Newbies
*
Отсутствует


I Love Life!

Сообщений: 3
Зарегистрирован: 28. Августа 2006
Пол: Мужской
Re: ИндексированнаяТаблица : странное поведение
Ответ #5 - 31. Октября 2006 :: 10:10
Печать  
Для 'artbear':
В первых двух сообщениях rar-архивы с результатами и в них же тестовый код.
Хочу обратить внимание, что поиск неправильный, если индексируемая колонка имеет тип 'Справочник', если тип 'Строка', то все нормально.
Не знаю то ли индекс без модификатора неправильно строится, то ли поиск неправильно происходит. Хотя я склоняюсь к последнему.

Заполняем итз значениями из справочника (количество строк 10896).
Добавляем по одной колонке индекс без модификатора '*'.
Перебираем строки итз и пытаемся найти ('НайтиСтроку') значение индексированной колонки.
Значений из примерно 20-25 строк не найдено.

(сегодня попробовал)
Выбираем строки из справочника и пытаемся найти ('НайтиСтроку') атрибут, которым заполнялась индексированная колонка итз.
Значений из примерно 12-14 строк не найдено.

Разница в количестве не найденных строк и наталкивает на мысль, что неправильно работает поиск.

Хотя я не знаю как это все реализовано и могу ошибаться.

И еще. Раньше я использовал простые 1С-овские тз. Сейчас некоторую часть кода заменил на итз. Могу сравнить результаты. Если при индексировании использовать '*', то все работает правильно, иначе - нет.

Для 'varelchik'
Спасибо, а то когда натыкаешься на такое, начинаешь сомневаться в собственном здравом смысле
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ИндексированнаяТаблица : странное поведение
Ответ #6 - 31. Октября 2006 :: 10:42
Печать  
Прошу высказаться автора - Леша Диркс (ADirks) - что скажешь?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ИндексированнаяТаблица : странное поведение
Ответ #7 - 31. Октября 2006 :: 10:57
Печать  
Мда... косяк имеет место быть. Причём косяк нестабильный.
Несколько прогонов по той же таблице даёт разные результаты.

Тестовый код:
Код
Выбрать все
Функция Заполнить()
	итз = СоздатьОбъект("ИндексированнаяТаблица");
	итз.НоваяКолонка("Элемент");

	Спр = СоздатьОбъект("Справочник.Контрагенты");
	Спр.ВыбратьЭлементы();
	Пока Спр.ПолучитьЭлемент() = 1 Цикл
		итз.НоваяСтрока();
		итз.Элемент = Спр.ТекущийЭлемент();
	КонецЦикла;

	Сообщить("------- По представлению (1)--------------");
	итз.ДобавитьИндекс("И1", "Элемент");
	итз.ВыбратьСтроки();
	Пока итз.ПолучитьСтроку() = 1 Цикл
		Если итз.НайтиСтроку("И1", итз.Элемент, 0, 0) = 0 Тогда
			Сообщить(""+итз.НомерСтроки+": "+итз.Элемент);
		КонецЕсли;
	КонецЦикла;
	Сообщить("------- По представлению (2)--------------");
	итз.ВыбратьСтроки();
	Пока итз.ПолучитьСтроку() = 1 Цикл
		Если итз.НайтиСтроку("И1", итз.Элемент, 0, 0) = 0 Тогда
			Сообщить(""+итз.НомерСтроки+": "+итз.Элемент);
		КонецЕсли;
	КонецЦикла;
	Сообщить("------- По представлению (3)--------------");
	Спр.ВыбратьЭлементы();
	Пока Спр.ПолучитьЭлемент() = 1 Цикл
		Если итз.НайтиСтроку("И1", Спр.ТекущийЭлемент(), 0, 0) = 0 Тогда
			Сообщить(""+Спр.ТекущийЭлемент());
		КонецЕсли;
	КонецЦикла;

	Сообщить("------- По внутр. представлению --------------");
	итз.ДобавитьИндекс("И2", "*Элемент");
	итз.ВыбратьСтроки();
	Пока итз.ПолучитьСтроку() = 1 Цикл
		Если итз.НайтиСтроку("И2", итз.Элемент, 0, 0) = 0 Тогда
			Сообщить(""+итз.НомерСтроки+": "+итз.Элемент);
		КонецЕсли;
	КонецЦикла;
КонецФункции
 

  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ИндексированнаяТаблица : странное поведение
Ответ #8 - 31. Октября 2006 :: 11:06
Печать  
ADirks

В точности.
А spock уже сто лет назад жаловался на сортировку документов - а я ему не верил.

Посыпаю голову пеплом. Нерешительный
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ИндексированнаяТаблица : странное поведение
Ответ #9 - 31. Октября 2006 :: 11:28
Печать  
Прошу добавить новый баг в багзиллу.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ИндексированнаяТаблица : странное поведение
Ответ #10 - 31. Октября 2006 :: 11:29
Печать  
kms писал(а) 31. Октября 2006 :: 11:06:
ADirks

В точности.
А spock уже сто лет назад жаловался на сортировку документов - а я ему не верил.

Посыпаю голову пеплом. Нерешительный

Хотя сейчас проверил - аналогичная проблема для документов у меня не воспроизводится.
В отличие от справочников.

Если там что-то и есть, то что-то другое.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: ИндексированнаяТаблица : странное поведение
Ответ #11 - 31. Октября 2006 :: 13:43
Печать  
kms писал(а) 31. Октября 2006 :: 07:16:
varelchik писал(а) 31. Октября 2006 :: 06:09:
Не заморачиваетесь.
Это не баг ИТЗ а баг 1С.

Можно поподробнее, плз?

Цитата:
Индексировать без модификатора лучше только в тех случаях если ты данную колонку бедшь юзать для поиска. Во все остальных случаях лучше пользоваться "*". это не мое мненение а мнение adirks

Ровным счетом наоборот Улыбка

Индекс без модификатора - это очень медленный индекс для алфавитной сортировки объектов.
Индекс по внутр. предст - это быстрый индекс для поиска и т.д.

То же самое - для документов.
Пока так.


Прошу прошения .
Не правильно выразился.
Не для поиска а для сортировки
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ИндексированнаяТаблица : странное поведение
Ответ #12 - 01. Ноября 2006 :: 22:30
Печать  
Исправлено (надеюсь)
  

De quelle planète es-tu?
Наверх
 
IP записан
 
vlad-1c
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 10
Зарегистрирован: 09. Июля 2006
Re: ИндексированнаяТаблица : странное поведение
Ответ #13 - 14. Ноября 2006 :: 08:31
Печать  
Возникла проблема при обходе группировок ИТЗ:
ТбОстаткиSQL.Группировать("ТМЦ: ТМЦ; МестоХранения: МестоХранения", "ОстатокТовара",1);

Далее:
           Если ТбОстаткиSQL.НайтиСтроку("ТМЦ",Товар,,1) <> 0 Тогда
                 ОстатокВсего = ТбОстаткиSQL.ОстатокТовара;
                 ТбПотомки = ТбОстаткиSQL.тзПотомки;
                 Если ТбПотомки.НайтиСтроку("МестоХранения",Склад,,1) <> 0 Тогда
                       ТекущийОстаток = ТбПотомки.ОстатокТовара;
                 КонецЕсли;
           КонецЕсли;      

До группировки:
ТМЦ1 - Склад1
ТМЦ1 - Склад2
ТМЦ2 - Склад1
При выборе ТбПотомки по первой строке:
ТМЦ1 - Склад1
Т.е. пропадает значение "Склад2". При заходе в 1С при первом проведении документа все работает корректно, далее группировка работает некорректно. При трассировании иногда выдает корректные данные. При возврате к 1С++ 1.8.1.6.fb03 работает корректно. Тестировалось на 1С++ 2.0.3.1, 2.02

Провел ряд тестов - на ночной сборке 2.5 проблем с проведением не возникло, но возникли "другие проблемы" (видимо нестабильности релиза). На ночной сборке 2.0.3 - проблемы остались.
При изменении:
ТбОстаткиSQL.Группировать("ТМЦ: *ТМЦ; МестоХранения: *МестоХранения", "ОстатокТовара",1); //проблемы исчезли?!!! (2.0.3.1)
  
Наверх
 
IP записан
 
nvg
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 72
Местоположение: Киев
Зарегистрирован: 14. Сентября 2006
Пол: Мужской
Re: ИндексированнаяТаблица : странное поведение
Ответ #14 - 15. Ноября 2006 :: 14:34
Печать  
Возникла проблема при свертке ИТЗ по индексу, с использованием символа '#' при построении индекса.

Содержимое индексированной таблицы:
- item_code, serial_lot_code - код товара и код партии (Строка, 30 символов)
- qty_1C, qty_Era  -  количество товара в различных БД
- qty_Check  -  контрольная колонка, равна qty_1C * ( - 1),
не нулевые значения после свертки есть признак разности количества товара в базах.

Если попытаться свернуть ИТЗ по индексу  - некоторые значения не сворачиваются.
А некоторые не просто не сворачиваются, но при этом изменяются исходные значения числовых полей.

При свертке значений по основному индексу все правильно сворачивает и значения правильно суммирует.

Релиз 1С - 21, SQL
Проверялось на 1C++: 2.5.0.0, 2.0.3.2, 2.0.3.1


Может я что-то не так делаю? Вот код:

// Добавляем индекс
итз1.Свернуть("item_code, serial_lot_code", "qty_1C, qty_Check, qty_Era", );

В результате все строки правильно свернулись, в колонке qty_Check остались только нулевые значения.

// Свернем по индексу
// Добавляем индекс
итз1.ДобавитьИндекс("КаталжныйПартия", "#item_code, #serial_lot_code", 0);
итз1.Свернуть("item_code, serial_lot_code", "qty_1C, qty_Check, qty_Era", "КаталжныйПартия");

В результате выполнения в колонке qty_Check остались ненулевые значения...
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать