Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Прямое редактирование DBF, несколько вопросов (число прочтений - 7139 )
Betas
Junior Member
**
Отсутствует



Сообщений: 24
Зарегистрирован: 10. Октября 2008
Пол: Мужской
Прямое редактирование DBF, несколько вопросов
05. Мая 2010 :: 11:09
Печать  
База DBF плюс штатный УРБД, VFPRO OLEDB. Прямые запросы для получения данных использую уже не первый год, проблем не возникало.
Рассматриваю возможность использования драйвера фокса для изменения реквизитов справочников и документов (без добавления новых строк в их таблицы).  

Выигрыш времени в тестовом варианте (база по сети, более одного подключения) составляет  от 3(когда идет добавление строки в  1SUPDTS) до 60 (когда строка уже есть) раз.

Не хотелось бы повторять известные ошибки (особенно на рабочей базе) и изобретать велосипед.

Вопросов много, вот некоторые:
1. есть ли положительный опыт прямой модификации данных, особенно интересен вариант в сочетании с УРБД.
2. если в полях, по которым строятся индексы не использовать кириллицу, будут ли правильно записываться инд. файлы.
3. будут ли правильно делить доступ на запись (как к dbf так и к cdx) фокс и 1с
4. т.к. УРБД. то нужно модифицировать и таблицу справочника/документа и 1SUPDTS, соответственно как обеспечить их совместную запись, т.е. если запись одного не состоялась, то и второй не записывать.
5. м.б. кто-то поделится рабочим куском кода модификации 1SUPDTS

п.с. Прошу прощения, получилось много слов …
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #1 - 05. Мая 2010 :: 14:34
Печать  
Я бы такое даже для sql не рискнул бы делать ( хотя знаю где и
как ставить sql блокировки)
Может ты выигрыш получаешь потому что у 1с есть установка и снятие блокировок а у тебя их нет.
Озвучь исходную задачу тогда может что нибудь большее можно сказать.
  
Наверх
 
IP записан
 
Betas
Junior Member
**
Отсутствует



Сообщений: 24
Зарегистрирован: 10. Октября 2008
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #2 - 05. Мая 2010 :: 17:19
Печать  
А в чем основная сложность? В УРБД?
Если я правильно понял из других источников, фокс провайдер блокирует таблицу на время выполнения команд INSERT/UPDATE/DELETE, только непонятно как к этому отнесется 1С (хотя на "сервере", где лежат файлы базы, 1С может быть вообще не установлена и при этом разные копии 1С имеют доступ одновременно).

А задача на первое время проста. Скорее интересна принципиальная возможность ее реализации, а там, если получится, можно будет двигаться дальше.

Нужно изменить индексируемые поля типа «дата» и «число» уже существующего справочника. При этом сохранить целостность данных и правильность индексов (насколько я понимаю, фокс это умеет).
Кроме того, нужно, чтобы при очередной сессии обмена данными (авто раз в 10 мин) элемент попал в файл обмена.

Реализуется вторая часть путем модификации таблицы 1SUPDTS: добавления элементарной строки (строк применительно к центральной ИБ, если несколько периферийных) или сброса в ‘      0’ поля DWNLDID в существующей строке.

Основная проблема с тем, как выполнить несколько команд в одной конструкции.
Если сначала делать запись в 1SUPDTS, а затем в таб. справочника и между этими событиями состоится выгрузка, произойдет рассинхронизация баз. Аналогично если сначала таб. справочника, а затем сбой записи 1SUPDTS.
« Последняя редакция: 05. Мая 2010 :: 20:54 - Betas »  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #3 - 05. Мая 2010 :: 18:50
Печать  
Сложность, например, в разном порядке сортировки у 1С и Фокса...
  
Наверх
ICQ  
IP записан
 
Betas
Junior Member
**
Отсутствует



Сообщений: 24
Зарегистрирован: 10. Октября 2008
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #4 - 05. Мая 2010 :: 20:42
Печать  
Да, я это понимаю, но разве это замечание не относится к символам кириллицы?
Сейчас не могу найти, где-то уже обсуждалось, что при установке Collating Sequence=MACHINE отличие, насколько я помню, только в положении "ё".

В данном случае речь идет о модификации справочников не использующих в индексах поля содержащие кириллицу.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #5 - 06. Мая 2010 :: 04:35
Печать  
Betas писал(а) 05. Мая 2010 :: 20:42:
Да, я это понимаю, но разве это замечание не относится к символам кириллицы?
Сейчас не могу найти, где-то уже обсуждалось, что при установке Collating Sequence=MACHINE отличие, насколько я помню, только в положении "ё".

В данном случае речь идет о модификации справочников не использующих в индексах поля содержащие кириллицу.


orefkov на мисте показывал что у 1с dbf специфический набор символов.
Не совсем понятно все это ты делаешь на ЦБ или ПБ
Если на ЦБ то вдруг один из ID  ПБ  на русском
или если ПБ то вдруг ID ЦБ на русском.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #6 - 06. Мая 2010 :: 04:40
Печать  
Betas писал(а) 05. Мая 2010 :: 17:19:
А в чем основная сложность? В УРБД?
Если я правильно понял из других источников, фокс провайдер блокирует таблицу на время выполнения команд INSERT/UPDATE/DELETE, только непонятно как к этому отнесется 1С (хотя на "сервере", где лежат файлы базы, 1С может быть вообще не установлена и при этом разные копии 1С имеют доступ одновременно).

А задача на первое время проста. Скорее интересна принципиальная возможность ее реализации, а там, если получится, можно будет двигаться дальше.

Нужно изменить индексируемые поля типа «дата» и «число» уже существующего справочника. При этом сохранить целостность данных и правильность индексов (насколько я понимаю, фокс это умеет).
Кроме того, нужно, чтобы при очередной сессии обмена данными (авто раз в 10 мин) элемент попал в файл обмена.

Реализуется вторая часть путем модификации таблицы 1SUPDTS: добавления элементарной строки (строк применительно к центральной ИБ, если несколько периферийных) или сброса в ‘      0’ поля DWNLDID в существующей строке.

Основная проблема с тем, как выполнить несколько команд в одной конструкции.
Если сначала делать запись в 1SUPDTS, а затем в таб. справочника и между этими событиями состоится выгрузка, произойдет рассинхронизация баз. Аналогично если сначала таб. справочника, а затем сбой записи 1SUPDTS.

Сложность в том что и тебе и 1с для изменения надо блокировать и таблицу справочника и таблицу 1SUPDTS
Возможна ситуация ты блокируешь одну таблицу 1с другую получишь что-то типа "мертвой блокировки sql"
Может получиться что твои блокировки будут игнорироваться 1с и наоборот блокировки 1с будут твоим драйвером игнорироваться
получишь нарушение целостности данных.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #7 - 06. Мая 2010 :: 04:45
Печать  
Если по твоим изменяемым полям Дата стоит отбор  ( или еще хуже
отбор появиться позднее а ты уже об этом забудешь) то надо будет в твоих изменениях учитывать и таблицу ссылок.
  
Наверх
 
IP записан
 
Betas
Junior Member
**
Отсутствует



Сообщений: 24
Зарегистрирован: 10. Октября 2008
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #8 - 06. Мая 2010 :: 05:16
Печать  
Z1 писал(а) 06. Мая 2010 :: 04:45:
Если по твоим изменяемым полям Дата стоит отбор  ( или еще хуже
отбор появиться позднее а ты уже об этом забудешь) то надо будет в твоих изменениях учитывать и таблицу ссылок.


В этом справочнике нет отбора и не будет, мне достаточно для индексов сортировки. Также в нем нет наименования и кода, соответственно не будет "плохих" символов для индексирования.

Что касается понимания чужих блокировок 1С и фоксом (согласен один из ключевых вопросов) надеялся, что кто-то с этим сталкивался. Если нет (хотя странно, проблема ведь возникает и при отсутствии УРБД), попробую как то выяснить это экспериментально.

Если с блокировками все ОК, основная проблема будет - как обеспечить обязательность модификации 1SUPDTS. Хорошо бы транзакцию, но по большому счету достаточно просто гарантировать запись в 1SUPDTS. Допустим, как крайний вариант, отловить ошибку записи и и штатным Записать()...
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #9 - 06. Мая 2010 :: 05:42
Печать  
Да еще вдруг фокс кеширует (использует отложенную запись).
Или не сам фокс а провайдер через который работаешь.
Сколько всего элементов в справочнике ?

И еще есть проблема.
Предположим твой процесс это процесс_1
другой процесс_2 обычный 1с
Процессы могут быть как на одном компьютере так и на разных.
в нем записано следущее
Спр1 = СоздатьОбъект("Справочник.ТвойСправочник");
Спр1.ВыбратьЭлементы();
Пока Спр1.ПолучитьЭлемент() = 1 Цикл
//  Точка 1
  Спр1.ДругойРеквизитСправочника = Значение;
//  Точка 2
  Спр1.Записать();
КонецЦикла;
Процесс 2 считал первый элемент предположим
там ЗнДаты = 05.05.2010
т.е. процесс_2 попал в Точка 1. При этом нет никаких блокировок
на сам справочник.
Процесс_1 получил тот же первый элемент
и успешно записал ЗнДаты = 31.05.2010 и изменил таблицу УРБД
После этого процесс 2 дошел до точка 2 и записал
при этом значение даты вернется на  05.05.2010. ( 1с читает и пишет записи целиком а не измененные поля ).
Оба процесса отработали успешно ( и без блокировок). результат не тот какой ты хотел.

Конечно можешь возразить что такое возможно и когда оба процесса 1с но там это будет возникать гораздо реже потому что обращаемся в одно место одним и тем же способом и с примерно одной скоростью а у тебя будет обращение разными способами и с разными скоростями.


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



Сообщений: 24
Зарегистрирован: 10. Октября 2008
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #10 - 06. Мая 2010 :: 06:12
Печать  
Размер файла dbf примерно 2 Мб, количество записей тысяч 20.

Процесс 1С будет пытаться модифицировать существующий элемент только в сессии обмена (будет стандартная коллизия, а чем она хуже штатной), ну и записывать но новый.

Данные в описанной ситуации конечно будут не те, но синхронизация сохранится. А не те данные в распределенной базе (если не предусмотреть спец. мер, например делить документы на более мелкие документы и справочники) получаются и так не редко.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #11 - 06. Мая 2010 :: 06:25
Печать  
Betas писал(а) 06. Мая 2010 :: 06:12:
Размер файла dbf примерно 2 Мб, количество записей тысяч 20.

Процесс 1С будет пытаться модифицировать существующий элемент только в сессии обмена (будет стандартная коллизия, а чем она хуже штатной), ну и записывать но новый.

Данные в описанной ситуации конечно будут не те, но синхронизация сохранится. А не те данные в распределенной базе (если не предусмотреть спец. мер, например делить документы на более мелкие документы и справочники) получаются и так не редко.

Если это делать только для ускорения обмена УРБД.
Может тебе уже не нужно мое мнение и ты для себя все уже решил ?
О какой стадии обмена идет речь об выгрузке или подгрузке ?
База где хочешь это делать ЦБ или ПБ?
  
Наверх
 
IP записан
 
Betas
Junior Member
**
Отсутствует



Сообщений: 24
Зарегистрирован: 10. Октября 2008
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #12 - 06. Мая 2010 :: 07:14
Печать  
Твое мнение мне очень интересно, спасибо. А для себя я пока решил только разобраться в возможности прямой записи.
Запускать ее в живой базе пока не готов. т.к. веду ее только я и цена одной ошибки может быть больше моей зп.

Запись в таб. справочника возможна только в загрузке обмена.
Вмешиваться в работу штатного механизма обмена пока Подмигивание не планирую.

Речь идет о модификации справочников и документов в сессии пользователя и в ЦБ и в ПБ.
  
Наверх
 
IP записан
 
Betas
Junior Member
**
Отсутствует



Сообщений: 24
Зарегистрирован: 10. Октября 2008
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #13 - 06. Мая 2010 :: 07:33
Печать  
Не хотел писать сразу, дабы не запинали. Интересует даже не справочник, это так для теста.

В базе есть один забавный документ, который изначально проводился и накапливал данные в регистре. В какой-то момент его проведение стало заметно тормозить и сейчас он по-прежнему проводится с точки зрения 1С, но модуль у него пустой, а данные собираются быстрым запросом.
Проведение оставил как единственный индексируемый флаг, который можно менять. Но 1С не дает напрямую менять дату без отмены проведения с последующим проведением.
В общем случае это наверное хорошо, а в данном сильно замедляет работу. Вот и хочу обойти запрет, меняя дату (в пределах ТА) и флаг проведения через фокс.

Понимаю, что лучше вместо этого дока использовать справочник. Но слишком много на него завязано в базе, плюс внешние отчеты (а о многих из них я уже и не помню).
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #14 - 06. Мая 2010 :: 07:59
Печать  
Ну при проведении документа как минимум блокируются три таблицы
1sjourn  ra   rg

При смене даты вне периода должны пересчитаться  rg
c ПрежДаты  до ТA   -ra
c НовойДаты до ТА  +ra

Цитата:
о модуль у него пустой, а данные собираются быстрым запросом.
как то очень загадочно.
Непонятно вы отказались от регистра и пользуетесь вместо него документом.

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



Даже если Ваше ручное изменение и получиться в другие ПБ данные будут поступать через штатный механизм УРБД.

Опять же как же со скоростью если изменения этого регистра придут из другой ПБ.



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