Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) Прямое редактирование DBF, несколько вопросов (число прочтений - 7348 )
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 записан
 
Betas
Junior Member
**
Отсутствует



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

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #16 - 06. Мая 2010 :: 08:26
Печать  
Betas писал(а) 06. Мая 2010 :: 08:12:
А нет никакого регистра.
Этот документ сейчас вообще не влияет на регистры.

Проведение нужно только как индексируемый флаг при отборе в интервале дат прямым запросом. Этот документ хранит ссылки на реальные документы (другого вида), содержащие данные. необходимые для отчетов.

Так зачем вам использовать вообще проведение. сделайте этот документ не имеет движений
ДатаДок это дата создания документа
РеквизитШапки  СвояДата - дата "РеальногоДвижения"
Если СвояДата - не задана то документ "Не проведен"
Выигаете у штатного механизма время на проведение перепроведение документа. Да но тогда придеться менять все отчеты.

Только используя вместо настоящих регистров нечто другое у Вас не будет итогов в разрезе периодов и измерений  Вы их просто каждый раз вычисляете.
  
Наверх
 
IP записан
 
Betas
Junior Member
**
Отсутствует



Сообщений: 24
Зарегистрирован: 10. Октября 2008
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #17 - 06. Мая 2010 :: 08:31
Печать  
Провел тест по сети.

Заблокировал (цикл на запись в транзакции) таблицы процессом 1С.
Попробовал сделать запись фоксом.

Если блокировки нет (цикл не запущен) команда добавляющая строки в  1SUPDTS _Запрос.Выполнить(ТекстЗапроса)  возвращает 4 (что правильно для 5 баз).

Если таблицы заблокированы фокс выдает исключение Record is not locked.

Все корректно, и мы знаем состоялась ли запись. Теперь нужно    создать обратную ситуацию.
  
Наверх
 
IP записан
 
Betas
Junior Member
**
Отсутствует



Сообщений: 24
Зарегистрирован: 10. Октября 2008
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #18 - 06. Мая 2010 :: 08:37
Печать  
На 16. Все бы хорошо, но "реквизитШапки  СвояДата" не будет иметь индекса, а это очень замедлит выборку. Можно конечно руками дописать 1Cv7.DD, но это нужно делать каждый раз и во всех базах.

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #19 - 06. Мая 2010 :: 08:44
Печать  
Betas писал(а) 06. Мая 2010 :: 08:37:
На 16. Все бы хорошо, но "реквизитШапки  СвояДата" не будет иметь индекса, а это очень замедлит выборку. Можно конечно руками дописать 1Cv7.DD, но это нужно делать каждый раз и во всех базах.

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

Так поставь на реквизит документа СвояДата - отбор
и будет у тебя "штатный" индекс.
  
Наверх
 
IP записан
 
Betas
Junior Member
**
Отсутствует



Сообщений: 24
Зарегистрирован: 10. Октября 2008
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #20 - 06. Мая 2010 :: 09:21
Печать  
Спасибо, но как это сделать?
Дополнительные индексы в 1sjourn строятся только по общим реквизитам вида "справочник", или я ошибаюсь?

Если добавляю графу отбора в 1sjourn вообще не появляется нового индекса.
Почти совсем перестал пользоваться штатными журналами, может вообще сказал глупость.

Кстати, я неправ и CLOSED вообще не участвует в индексах, использую IDDOCDEF,DATE,TIME,IDDOC.
Получается выход такой: документ вообще не проводить, соответственно не нужно будет перепроводить при смене ДатаДок, выбору по прежнему делать по ДатаДок, а в качестве флага использовать реквизит шапки.

Таким образом, локальная задача (с документом) решена, и все сведется к замене одной строки в условии запроса.

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #21 - 06. Мая 2010 :: 09:59
Печать  
Если добавить графу отбора то индекс будет в таблице 1scrdoc.
смотри ее структуру

Если ДатуТвоегоПроведенияСчитать = ДатаДокумента и док неПроводить тогда :
Ты можешь для своего вида документа завести отдельный журнал
Одинжурнал = твой вид документа тогда у тебя будет штатный индекс по 1sjourn
journal (IDJOURNAL,DATE,TIME,IDDOC)
также вполне подходит и индекс по типу документа
DOCTYPE   (IDDOCDEF,DATE,TIME,IDDOC)




« Последняя редакция: 06. Мая 2010 :: 12:25 - Z1 »  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #22 - 06. Мая 2010 :: 10:13
Печать  
Betas писал(а) 06. Мая 2010 :: 09:21:
Очень жаль, что так и нет ясности в вопросе возможности использования прямого редактирования. В первую очередь было интересно именно это. 

Оно тебе надо ...
Вроде все и так решается
сам же сказал
Цитата:
цена одной ошибки может быть больше моей зп.


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



Сообщений: 24
Зарегистрирован: 10. Октября 2008
Пол: Мужской
Re: Прямое редактирование DBF, несколько вопросов
Ответ #23 - 06. Мая 2010 :: 10:30
Печать  
Да скучно просто все решать штатными методами.
Кто-то прыгает с парашютом, кто-то экспериментируют на рабочей базе ...

Большое спасибо за ответы!
« Последняя редакция: 06. Мая 2010 :: 13:01 - Betas »  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать