Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Индексы при вставке записей (число прочтений - 11896 )
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Индексы при вставке записей
19. Апреля 2009 :: 00:50
Печать  
База DBF. 1СPP.DLL от 02.04.08, VFPOLEDB.DLL от 04.11.05. Прямым запросом выбираю из справочника "Номенклатура" группу товаров только с остатками и вставляю записи в справочник, аналогичный по структуре. Под SQL все работает у клиента, хотя может просто не натыкались, у них справочник маленький. А под DBF похоже трабл с индексами. При сортировке результирующего справочника по коду его форма списка отлично работает, при сортировке по наименованию пропускается целый блок записей. После переиндексации все работает как надо. Куда копать? Я грешу на стврый драйвер VFPOLEDB, попробовал поставить новый, но ругается на строку инициализации при подключении, не было времени разбираться. И влияет ли как-то сортировка вставляемой в справочник выборки. Короче, коллеги, помогите кто сталкивался, срочно горит Улыбка
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #1 - 19. Апреля 2009 :: 02:09
Печать  
После переиндексации базы форма списка справочника работает нормально, то есть по всем признакам - кривой индекс по наименованию  Печаль
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Индексы при вставке записей
Ответ #2 - 19. Апреля 2009 :: 05:37
Печать  
Скорее всего несовпадение сортировки.
Попробуй так подключаться (и лучше к новому драйверу)
Код
Выбрать все
СтрокаСодинния = "
	|Provider=VFPOLEDB.1;
	|Null = Yes;
	|Exclusive = No;
	|SourceType = DBF;
	|Data Source=" + КаталогИБ() + ";
	|Mode=ReadWrite;
	|Extended Properties="""";
	|User ID="""";
	|Password="""";
	|Mask Password=False;
	|Collating Sequence=MACHINE;
	|DSN=""""";

 

  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #3 - 19. Апреля 2009 :: 10:08
Печать  
Взял новый драйвер VFP OLEDB 9.0 sp2 от 15.10.07. Строка соединения такая, как советуешь, с Collating Sequence  = MACHINE. эффекта никакого. Причем, в форме списка у меня есть SQL поиск наименованию или артикулу, так вот запросом c LIKE я нахожу требуемые позиции из этого справочника, предлагаю выбрать одну и затем пытаюсь позиционироваться на выбранной с помощью АктивизироватьОбъект. Позиционирования не происходит на тех позициях, которые в проскакиваемых при листании блоках. Более того, если листать форму списка в обратном направлении, то вообще косяки, их трудно описать, но скроллигн косячит. При сортировке списка по коду все чудесно.
И попутный вопрос, как вставлять в справочник записи, чтобы он не распух. DELETE лишь помечает на удаление и при следующей вставке новые записи добавлябтся и приемник пухнет. У меня что-то нет никакой идеи
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #4 - 19. Апреля 2009 :: 10:17
Печать  
Не связано ли это как-то с тем, что я данные в 1с закачивал из FPD 2.6 for DOS. Но я применял OEMTOANSI и закачано визуально все отлично, и типовые списки номенклатуры работают без проблем
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Индексы при вставке записей
Ответ #5 - 19. Апреля 2009 :: 16:05
Печать  
Попробуй полностью удалить CDX и переиндексировать.
Вообще с FPD на sql.ru много проблем описано с заголовком ДБФ и индесами.
Проведи тестирование ИБ - 1С пишет где неправильно сформировано наименование.

Цитата:
DELETE лишь помечает на удаление и при следующей вставке новые записи добавлябтся и приемник пухнет. У меня что-то нет никакой идеи


Если Delete Fox-ом или полное удалением 1С-ом (а не только пометка), то следующие записи пишутся на месте удаленных.
Т.е. пухнуть никак  не должен.
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #6 - 20. Апреля 2009 :: 05:35
Печать  
Тестирование и физической целостности и логической проходит на ура, без претензий.
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #7 - 20. Апреля 2009 :: 05:40
Печать  
Я DELETE делаю прямым запросом, перед вставкой выборки. Вот еще загадка. Когда я средствами 1С предварительно перед запросом стал чистить справочник, то 1С устойчиво вылетала на одной позиции группы "Невосстановимая ошибка бд". Удалал, кладя в список и затем уже проходя по нему и находя элементы. Причем соритировка была по коду, а позиционировался НайтиЭлемент(). После переиндексации справочник успешно чистился. Прямям просмотром таблиц в фоксе не нашел в этой позиции ничего отличного от других
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #8 - 20. Апреля 2009 :: 05:43
Печать  
Прямой запрос написан к справочнику "Номенклатура", его формы работают без претензий, все сортируется, как надо. Думаю надо попробовать загрузить базу в SQL, посмотреть что будет там
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #9 - 20. Апреля 2009 :: 07:00
Печать  
В базе под MS SQL 2000 все работает, никаких косяков, там правда скроллинг чуть иначе отрабатывает, но все нормально
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Индексы при вставке записей
Ответ #10 - 20. Апреля 2009 :: 07:32
Печать  
Ну еще возможные варианты

Во время вставки  часть полей не заполняется -
PARENTEXT,CODE,DESCR,ID, поля по которым стоит "отбор",ISFOLDER  - не должны быть Null
(по хорошему вообще ни одного поля)

ID не уникален

транзакция Delete закончилась неудачно

Драйвер родной или от Ужаса?

Код надо смотреть
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #11 - 20. Апреля 2009 :: 07:48
Печать  
Дай ссылку на нормальный, проверенный драйвер? Под SQL все пашет, но у иеня были случаи, что с одним и тем же косяком поведение разное в DBF и скуле. Поля все проверял, щас еще буду смотреть
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Индексы при вставке записей
Ответ #12 - 20. Апреля 2009 :: 08:15
Печать  
Ну так Микрософт Улыбка
http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA...

И непонятно - справочник один раз заполняется или при каждом проведении...

Еще есть sqllite Орефкова
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Индексы при вставке записей
Ответ #13 - 20. Апреля 2009 :: 08:23
Печать  
Мне кажется, что подобная тема уже была. И там также ни к чему не пришли (
а с помощью 1sqllite не вставишь данные в таблицы 1С
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #14 - 20. Апреля 2009 :: 08:35
Печать  
Скачал последний драйвер с Микрософта, у меня тот же самый. Справочник заполняется всякий раз, перед этим выполняется прямой запрос DELETE FROM. Все записи помечены, в фоксе проверял. Я уже думал про конфликт удаленных записей с "живыми", но и при вставке в чисты справочник тот же косяк. Щас еще раз проверю, но после переиндексации все вроде как работало ОК. А когда поля не заполнены, то запрос и не отрабатывает, требует определения полей.
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #15 - 20. Апреля 2009 :: 08:37
Печать  
основной кусок кода вот:
//  Удаляем старое содержимое      
     MW  = СоздатьОбъект("MetaDataWork");
    ТабDst = MW.GetRefTableName(Справочник);
     ТекстЗапроса = "DELETE FROM " + ТабDst;
     SQLComm.ExecuteStatement (ТекстЗапроса);                              

//  Поля источника      
     СписокПолей = "Id,Code,Descr,IsFolder,IsMark,ParentId,VerStamp,";
     СписокПолейSrc = СписокПолей;
     КолПовт = СписокПолейОбяз.РазмерСписка();
     Для Поз = 1 По КолПовт Цикл
           Идентификатор  = СписокПолейОбяз.ПолучитьЗначение(Поз);
           СписокПолейSrc = СписокПолейSrc + "SP" + MW.GetRefFieldId("Номенклатура",Идентификатор) + ",";
     КонецЦикла;      
     СписокПолейSrc = СписокПолейSrc + "Id";
     СписокПолейSrc = СтрЗаменить(СписокПолейSrc, "ParentId", """     0   """);
     
//  Поля приемника      
     СписокПолейDst = СписокПолей;
     Для Поз = 1 По КолПовт Цикл   
           Идентификатор  = СписокПолейОбяз.ПолучитьЗначение(Поз);
           СписокПолейDst = СписокПолейDst + "SP" + MW.GetRefFieldId(Справочник, Идентификатор) + ",";
     КонецЦикла;                     
     СписокПолейDst = СписокПолейDst + "SP" + MW.GetRefFieldId(Справочник, "Номенклатура") + ",";
     СписокПолейDst = СписокПолейDst + "SP" + MW.GetRefFieldId(Справочник, "Остаток") + ",";
     СписокПолейDst = СписокПолейDst + "SP" + MW.GetRefFieldId(Справочник, "ОстатокПоФирме") + ",";
     СписокПолейDst = СписокПолейDst + "SP" + MW.GetRefFieldId(Справочник, "Цена");

     ТекстЗапросаОстаткиФирма = ТекстЗапросаПоОстаткам(1);
     
//      Запрос на вставку выборки в приемник                           
     ТекстЗапроса = "INSERT INTO " + ТабDst + "
                          |(" +  СписокПолейDst + ")
                    |SELECT " + СписокПолейSrc + ",0.00, 0.00, 0.00
                          |FROM $Справочник.Номенклатура Ном
                          |WHERE 1 = 1";
                          
     Если ТолькоСОстатками = 1 Тогда                           
           ТекстЗапроса = ТекстЗапроса;
           ТекстЗапроса = ТекстЗапроса + " AND                  
           |  (Ном.Id IN (SELECT SOst.Id FROM (" + ТекстЗапросаОстаткиФирма + ")SOst))";
     Иначе
           Если ПустоеЗначение(ВыбТМЦ) = 0 Тогда
                 ТекстЗапроса = ТекстЗапроса + " AND
               |(Ном.ParentId = :ВыбТМЦ)";
           КонецЕсли;      
     КонецЕсли;          

//      Сообщить(ТекстЗапроса);
     SQLComm.SetTextParam ("ДатаИтогов", ДатаИтогов);
     SQLComm.ExecuteStatement (ТекстЗапроса);                              
     
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #16 - 20. Апреля 2009 :: 08:38
Печать  
Потом еще остатки вставляются с помошью UPDATE, могут и цены, но это неважно и без них косяк
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #17 - 20. Апреля 2009 :: 08:43
Печать  
А то, что драйвер добавляет в индексный файл свой  тэг по IDELETED , это может быть принципиальным? Ведь формально посде этого структура индексов не соответсвует словарю 1СV7.MD
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Индексы при вставке записей
Ответ #18 - 20. Апреля 2009 :: 08:50
Печать  
AAA_CHEL писал(а) 20. Апреля 2009 :: 08:43:
А то, что драйвер добавляет в индексный файл свой  тэг по IDELETED , это может быть принципиальным? Ведь формально посде этого структура индексов не соответсвует словарю 1СV7.MD


Нет. Это стандартно для 1С и нужно для фильтрованных индексов (как 1С)
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Индексы при вставке записей
Ответ #19 - 20. Апреля 2009 :: 08:59
Печать  
По поводу запросов - попробуй везде использовать псевдонимы
типа

DELETE тОстатки FROM "+ТабDst+" as тОстатки

и тоже с UPDATE
http://www.1cpp.ru/forum/YaBB.pl?num=1223527883/11#11

P.S. Если запросы в модуле, то в строке подключения должно быть
TABLEVALIDATE =0;
отключает блокировку заголовку таблиц штатным способом ()
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Индексы при вставке записей
Ответ #20 - 20. Апреля 2009 :: 09:15
Печать  
Текс запроса по остаткам - не понятно - возможен ли случай что ParentId
есть, а саму группу не внесли.

Т.е. наблюдается ли ошибка если
ТолькоСОстатками <>1
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #21 - 20. Апреля 2009 :: 09:27
Печать  
я же ParentId обнуляю пустым значением:
     СписокПолейSrc = СтрЗаменить(СписокПолейSrc, "ParentId", """     0   """);
с ним все нормально, я смотрел в базе. Еще непонятно, почему до и после переиндексации разный порядок следования индексных тэгов. После ререиндексации - как в словаре, а сразу после вставки записей в справочник - отличается. Хотя тэги именованные, но вдруг тут загадка
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #22 - 20. Апреля 2009 :: 09:37
Печать  
Все, больше суток с этим сижу, голова кругом. Сейчас тот же порядок следования тэгов, только все равно не работает )))
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Индексы при вставке записей
Ответ #23 - 20. Апреля 2009 :: 10:00
Печать  
Да , задачка ....
Есть еще одна идея - поиграться
SQLComm.ExecuteStatement("Exec('SET DELETED OFF')")
или
SQLComm.ExecuteStatement("Exec('SET DELETED ON')")
после инициализации SQLComm.
Вдруг фоксу нужно и индекс IDELETED обновлять при вставке...

Цитата:
Параметры
ON
Определяет, что команды не обрабатывают записи, помеченные на удаление, включая записи в связанных (дочерних) таблицах; задаваемые диапазоны записей (Scope Records) также не включают эти записи в свои списки.

OFF
(По-умолчанию) Определяет, что записи, помеченные на удаление обрабатываются как обычные записи, включая записи в связанных (дочерних) таблицах; диапазоны записей также включают их в списки, как и обычные записи.
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #24 - 20. Апреля 2009 :: 10:10
Печать  
[quote author=kiruha link=1240102224/15#23 date=1240221650]Да , задачка ....
Есть еще одна идея - поиграться
SQLComm.ExecuteStatement("Exec('SET DELETED OFF')")
или
SQLComm.ExecuteStatement("Exec('SET DELETED ON')")
после инициализации SQLComm.
Вдруг фоксу нужно и индекс IDELETED обновлять при вставке...

Не дает эффекта, список крутится и вдруг как будто его конец, сразу перескакивает в хвост
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #25 - 20. Апреля 2009 :: 11:05
Печать  
Еще информация, пока малопонятная для использования, но сужающая круг поиска.
- Родной CDX файла справочника при первой вставке - 87040. Форма списка глючит
- Делаю в фоксе VFP 9.0  REINDEX таблицы. CDX - 73216. Форма списка глючит.
- Делаю переиндексацию в 1С.  CDX - 73216. Форма списка работает нормально.
- Ещке раз делаю в фоксе REINDEX таблицы. CDX - 73216. Форма списка опять глючит.
Вот такие пироги. То есть дело явно в OLEDB, точнее даже в фоксе Улыбка но что не так, щас фактически надо понять и довести таблицу до ума  в самом фоксе. Индексы получаются разные в 1С и фоксе
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #26 - 20. Апреля 2009 :: 11:09
Печать  
По моему это как-то связано с 1с-овскими индексами по UPPER и для русских букв получается видимо фигня, как-то по разному индексируют
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Индексы при вставке записей
Ответ #27 - 20. Апреля 2009 :: 11:13
Печать  
Провел тест.
В конфигураторе копируем справочник номенклатуры, вставляем -
получается спр Номенклатура1

Запускаем тест : очистка Номенклатура1 и заполнение из спр Номенклатура.

Никаких глюков не нашел
  

_______________________1.ert ( 32 KB | Загрузки )
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #28 - 20. Апреля 2009 :: 11:36
Печать  
kiruha писал(а) 20. Апреля 2009 :: 11:13:
Провел тест.
В конфигураторе копируем справочник номенклатуры, вставляем -
получается спр Номенклатура1

Запускаем тест : очистка Номенклатура1 и заполнение из спр Номенклатура.

Никаких глюков не нашел


Может ты их просто не видишь, или дело в моем исходном справочнике, у меня в этой группе порядка 800 позиций, и глючит не во всех группах, всего групп 60. На ней просто наткнулись. Я индексирую в фоксе INDEX ON UPPER(DESCR) TAG DESCR и форма списка справочника ломается. Индексирую опять в 1с, все работает. Кодовая страница файла не задана. Это чем можно объяснить, забыв всю тему. Это уже точно факт
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Индексы при вставке записей
Ответ #29 - 20. Апреля 2009 :: 11:39
Печать  
AAA_CHEL писал(а) 20. Апреля 2009 :: 11:36:
kiruha писал(а) 20. Апреля 2009 :: 11:13:
Провел тест.
В конфигураторе копируем справочник номенклатуры, вставляем -
получается спр Номенклатура1

Запускаем тест : очистка Номенклатура1 и заполнение из спр Номенклатура.

Никаких глюков не нашел


Может ты их просто не видишь, или дело в моем исходном справочнике, у меня в этой группе порядка 800 позиций, и глючит не во всех группах, всего групп 60. На ней просто наткнулись. Я индексирую в фоксе INDEX ON UPPER(DESCR) TAG DESCR и форма списка справочника ломается. Индексирую опять в 1с, все работает. Кодовая страница файла не задана. Это чем можно объяснить, забыв всю тему. Это уже точно факт


Там тест я выложил универсальный .
Проверь на своей тестовой базе - пройдет или нет.
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #30 - 20. Апреля 2009 :: 11:54
Печать  
Закачал твоей обработкой весь справочник успешно, все группы, при пролистывании этой группы с сортировкой по наименованию тот же косяк. Блин, какая то  лажа с наименваниями. Я их закачивал из доса, применяя при загрузке в таблицу значений OEMTOANSI. а затем уже создавал в 1С элементы справочника Номенклатура
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #31 - 20. Апреля 2009 :: 11:55
Печать  
Закачал твоей обработкой весь справочник успешно, все группы, при пролистывании этой группы с сортировкой по наименованию тот же косяк. Блин, какая то  лажа с наименваниями. Я их закачивал из доса, применяя при загрузке в таблицу значений OEMTOANSI. а затем уже создавал в 1С элементы справочника Номенклатура
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #32 - 20. Апреля 2009 :: 11:57
Печать  
Истина бродит где-то уже совсем рядом ...
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Индексы при вставке записей
Ответ #33 - 20. Апреля 2009 :: 12:01
Печать  
Возьми проблемный элемент - вручную перепиши наименование -
отобразится в спр или нет
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #34 - 20. Апреля 2009 :: 12:05
Печать  
kiruha писал(а) 20. Апреля 2009 :: 12:01:
Возьми проблемный элемент - вручную перепиши наименование -
отобразится в спр или нет

Так при сортировке по коду вообще все работает, я так понимаю что выборка сбивается при сортировке по наименованию, так по нему строится кривой индекс
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #35 - 20. Апреля 2009 :: 12:10
Печать  
После переиндексации работает и справочник, закачанный твоей обработкой
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Индексы при вставке записей
Ответ #36 - 20. Апреля 2009 :: 13:50
Печать  
Это я предлагал поменять наименование в спр Номенклатуры до переноса -
ты же пишешь что только часть не отображается. Вдруг проблема в символах ?

Кстати

ТЗ=SQLComm.ExecuteStatement ("CPCURRENT()");  
ТЗ.ВыбратьСтроку();

показывает 1251 ? (Текущая кодировка)
Похожие глюки удалось воспроизвести при 1252
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #37 - 20. Апреля 2009 :: 14:09
Печать  
kiruha писал(а) 20. Апреля 2009 :: 13:50:
Это я предлагал поменять наименование в спр Номенклатуры до переноса -
ты же пишешь что только часть не отображается. Вдруг проблема в символах ?

Кстати

ТЗ=SQLComm.ExecuteStatement ("CPCURRENT()");  
ТЗ.ВыбратьСтроку();

показывает 1251 ? (Текущая кодировка)
Похожие глюки удалось воспроизвести при 1252


Так на что я поменяю до переноса? Я не знаю, может есть невидимые символы, я уже удалил "№", но без толку. У самих таблиц 1С нет кодовой страницы. Я брал типовую, посмотрел щас в других базах, там тоже нулевая. Визуально в файле все отлично, когда сортировка по коду, то вообще все работает, а по наименованию, не то что конкретные позиции не показываются, а глючть форма списка и поиск. Штатный поиск биноклем может искать позицию, при следующей выборке может не искать.
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #38 - 20. Апреля 2009 :: 14:10
Печать  
Да, показывает 1251
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #39 - 20. Апреля 2009 :: 15:51
Печать  
Итак, что мы имеем:
1 - Родной справочник "Номенклатура" (SС84) - форма списка работает как надо, никаких претензий
2 - делаем дубль справочника и вставляем в него все записи прямым запросом. Форма списка нового справочника - глючит
3 - Переиндексируем базу или одну таблицу нового справочника средствами 1С - форма списка нового справочника начинает работать
4 - Переиндексируем в VFP 9.0  всю таблицу нового справочника или только тэг DESCR = UPPER(DESCR). форма списка нового справочника перестает работать
5 - может быть самое интересное, а может быть и самое банальное, потому как так и должно быть: Переиндексируем  в VFP 9.0  всю таблицу исходного справочника SC84. Его форма списка как работала, так и работает

Значит косяк именно во вставке? При этом строится кривой индекс? Но не верю, что старик VFP не умеет строить индексы, этому он многих научит
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #40 - 20. Апреля 2009 :: 16:31
Печать  
Рискую ошибиться, но эпопея кажется подходит к концу, но все хлипко и неуверенно
Все таки после замены в наименованиях "№" на "N" глюков в форме списка нового мправочника не обнаружено, хотя в первой замене вроде бы ничего не изменилось Косяк с "№" сидит в памяти, но что с ним точно было связано, не помню.
Покручу дальше, возможно все иллюзия. Но запрос в фоксе на сравнение наименований исходного и результирующего справочника не дал записей. То есть вставляютсмя записи тоже вроде верно. Короче, в целом я мало что понял, точнее - ничего Улыбка
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Индексы при вставке записей
Ответ #41 - 20. Апреля 2009 :: 19:34
Печать  
AAA_CHEL писал(а) 20. Апреля 2009 :: 16:31:
Рискую ошибиться, но эпопея кажется подходит к концу, но все хлипко и неуверенно
Все таки после замены в наименованиях "№" на "N" глюков в форме списка нового мправочника не обнаружено, хотя в первой замене вроде бы ничего не изменилось Косяк с "№" сидит в памяти, но что с ним точно было связано, не помню.
Покручу дальше, возможно все иллюзия. Но запрос в фоксе на сравнение наименований исходного и результирующего справочника не дал записей. То есть вставляютсмя записи тоже вроде верно. Короче, в целом я мало что понял, точнее - ничего Улыбка

Да, тут ты прав. Спроси у Саши Орефкова, он уже натыкался на эти проблемы при создании 1sqlite, в частности: http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/480 . Так что спрашивай либо у него, либо бери исходники этого добра здесь: http://code.google.com/p/sqlite1c/ (хотя не знаю, что тебе это даст)
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #42 - 21. Апреля 2009 :: 01:10
Печать  
Я поторопился, косяки остались, но в той группе, которая обычно тестировалась, явно не видны. В другой большой группе видно сразу. Причем после 1с переиндексации список листается ровно и плавно, а сразу после вставки даже визуально как-то дергано.
Видимо все-таки дело в моих данных, так как после переиндексации криво работает вот такой простой запрос по выбору групп:
     ТекстЗапроса = "SELECT  $Ном.КодГруппы    AS [КодГруппы    $Строка],
                          |            Ном.Id            AS [Группа       $Справочник.Номенклатура]
                          |FROM   $Справочник.Номенклатура Ном
                          |WHERE  Ном.IsFolder = 1
                          |ORDER  BY $Ном.КодГруппы"; 

     ТВсп = Запрос.ExecuteStatement (ТекстЗапроса);      
     ТДат.Загрузить(ТВсп);
     
     ТДат.УстановитьПараметрыКолонки("КодГруппы", "Строка", 3,0, "Код", 5);
     ТДат.УстановитьПараметрыКолонки("Группа", , ,, "Группа", 60);

Точнее, он работает, но вместо группы пишет "Объект не найден", я уж было подумал что что-то удалил, но самое прикольное, что нужная группа правильно выбирается из ТЗ на форме выбора группы. То есть в запросе ТЗ типизируется криво, а выбранная "несуществующая" группа правильно возвращается и подставляется в основной, большой запрос. Я уже ничего не понимаю. Есть какой-то изьян. Уж этот запрос на группы невинный и полностью зависит лишь от sс84, которая почему "кривится"  после переиндексайии VFP
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #43 - 21. Апреля 2009 :: 01:12
Печать  
Запрос на группы кривит после фоксовой переиндексации SС84
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #44 - 22. Апреля 2009 :: 03:36
Печать  
Установлено точно:
- Индексы портит прямой запрос DELETE FROM ..
Я заменил вставку записей в справочник прямым запросом на выборку в таблицу значений и затем в транзакции обычное добавление элемента средствами 1С. По скорости почти не видно проигрыша. Но формы списка некоторых групп продолжали косячить, причем одна просто зацикливалась, сколько я не прокручивал 450 элементов не мог прокрутить. Причем в одном случае по моему в таблице даже не было удаленных элементов, просто 1ч на место удаленных записала новые. Вот такие чудеса. Убрал DELETE, удалил средствами 1С. Теперь косяков пока не заметил, да и вроде нет причин. Остается проверить, а вдруг INSERT будет работать без DELETE перед ним.
Конечно коряво, имея в руках инструмент прямых запросов писать Объект.Новый() и заполнять, но что поделаешь Улыбка))
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Индексы при вставке записей
Ответ #45 - 22. Апреля 2009 :: 08:21
Печать  
возможно проблема в индексе IDELETED ?
Нельзя ли поиграться с параметром Deleted при подключении?
leov-001 писал(а) 24. Марта 2009 :: 05:34:
     
     
Код
Выбрать все
СтрокаСодинния = "
	|Provider=VFPOLEDB.1;
	|Deleted=-1;
	|Null = Yes;
	|Exclusive = No;
	|SourceType = DBF;
	|Data Source=" + КаталогИБ() + ";
	|Mode=ReadWrite;
	|Extended Properties="""";
	|User ID="""";
	|Password="""";
	|Mask Password=False;
	|Collating Sequence=MACHINE;
	|DSN="""""; 


У меня ни "Set Deleted=Yes" ни "Deleted=Yes" не катит, выдает ошибку FAILED! IDataInitialize::GetDataSource(): Формат строки инициализации не соответствует спецификации OLE DB.

Пишу так Deleted=0 - Показывает удаленные записи, Deleted=-1 - НЕ показывает удаленные записи


После удаления переподключиться стандартно.

Еще вариант удаления
Код
Выбрать все
 SQLComm.ExecuteStatement ("Exec('USE SC6323 IN 0')");
    SQLComm.ExecuteStatement ("Exec('DELETE FOR 1=1')");
 


вместо SC6323  - свой справочник
  
Наверх
 
IP записан
 
AAA_CHEL
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 46
Зарегистрирован: 19. Апреля 2009
Re: Индексы при вставке записей
Ответ #46 - 24. Апреля 2009 :: 06:01
Печать  
Не работает. Не помогло ничего, кроме удаления и добавления штатными средствами 1С. Все-так индексы строятся по разному, в скульной базе все делает MS SQL, поэтому там и проблем нет. Но одного не пойму, если индексы чуть разные, но как же VFP выборки делает по таким полям, если надо ORDER BY ?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать