Переключение на Главную Страницу Страницы: 1 [2] 3 4 ... 6 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании. (число прочтений - 31533 )
Wirth
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 01. Марта 2010
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #15 - 20. Июля 2010 :: 10:19
Печать  
На всякий случай повторюсь, я не уверен что все работает, собственно поэтому и прошу помощи в тестировании.
И хотя я провел очень много ночей с отладчиком в обнимку, все равно 1С может подкинуть какую-нибудь неожиданность.

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


1C++ rocks!

Сообщений: 54
Зарегистрирован: 01. Марта 2010
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #16 - 20. Июля 2010 :: 10:46
Печать  
попробовал пример с приращиванием. при одновременном обращении к элементу обработка прерывается с сообщением "Объект заблокирован". И в стандартном случае и при работе с сервером. Думаю для сервера решу эту проблему, внесу некоторое ожидание в случае если объект не доступен. Сейчас попробую.
  
Наверх
www  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #17 - 20. Июля 2010 :: 12:21
Печать  
Попробую в выходные поставить и потестить Улыбка. Интересно что получится. Что да как отпишусь.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #18 - 20. Июля 2010 :: 18:59
Печать  
Прикольно, судя по описанию получается нечто похожее на версионные БД, типа постгри и оракла (и sqlite с 3.7.0)
Работы hogik'а на инфостарте смотрел?
ЗЫ: я так думаю, что 1sqlite без допиливания не заработает...
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #19 - 20. Июля 2010 :: 20:12
Печать  
orefkov писал(а) 20. Июля 2010 :: 18:59:
ЗЫ: я так думаю, что 1sqlite без допиливания не заработает...

Но если будет "движение" в теме, можно рассчитывать на твой отклик в плане развития 1sqlite? Улыбка
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #20 - 21. Июля 2010 :: 06:03
Печать  
Да, хочу тоже на выходных потестировать, а так у меня уже есть на примете место где это можно было-бы применить в боевых условиях.
Но 1SQLite, был-бы здесь не лишним.
  
Наверх
 
IP записан
 
Wirth
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 01. Марта 2010
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #21 - 22. Июля 2010 :: 09:22
Печать  
orefkov: Видел CodeBase, что и натолкнуло на мысль.

---

Хотел победить конкурирующую запись, но видно не получится.

Использую пример - наращивание значения элемента справочника в цикле, причем, элемент в справочнике единственный (чтобы не заморачиваться с одновременным запуском обработки)

1С действует следующим образом:


блокирует таблицу
выбирает элемент
разблокирует таблицу
...работаем с элементом


далее если необходимо записать результат:

вновь выбирает элемент, но без блокировки
сравнивает с начальной выборкой

если они одинаковы:
блокирует элемент
блокирует изменяемые таблицы
вновь выбирает элемент
сравнивает с начальной выборкой

если они одинаковы - записывает
снимает блокировку с элемента и таблиц

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

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

Но очень хочется победить конкурирующую запись не потеряв в скорости доступа на чтение. Буду думать...





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


1C++ rocks!

Сообщений: 54
Зарегистрирован: 01. Марта 2010
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #22 - 27. Июля 2010 :: 06:12
Печать  
Надо сказать, что конечно не было цели делать аналог CodeBase. Просто увидел что базу можно оторвать от 1с, а первоначальная цель была - шифрование dbf. Но в процессе работы как-то шифрование отошло на второй план.
Попробовал кто-нибудь? Работает?
А то я уже сервер почти полностью переделал. Добавил блокировки записей (все лучше чем блокировки таблиц). Пример с записью справочника в цикле с двух клиентов работает на ура, а стандартная 1с с ним не справляется.
Протестирую и наверное к концу недели выложу эту версию.
  
Наверх
www  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #23 - 27. Июля 2010 :: 08:36
Печать  
Попробуй протестировать работу 1sqlite и с Александром если надо решить чтобы она работала, вот тогда будет "молоток".
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Wirth
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 01. Марта 2010
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #24 - 27. Июля 2010 :: 16:20
Печать  
А почему думаешь работать не будет? Вроде работает, по крайней мере пример с поиском контрагента пробовал.
  
Наверх
www  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #25 - 27. Июля 2010 :: 18:19
Печать  
Wirth писал(а) 27. Июля 2010 :: 16:20:
А почему думаешь работать не будет? Вроде работает, по крайней мере пример с поиском контрагента пробовал.

Ну, проблемы были как-раз с разработкой CodeBase.
Дело в том, что в штатном движке 1С с каждой таблицей связан "буфер записи" (запись в смысле record, не write), те при передвижении по таблице данные текущей записи из файла копируются в этот буфер. Для получения значения полей из записи и их изменения в dbeng32.dll существует набор методов Fx_xxx (FX_String, FX_Numeric и тп). Сама 1С работает только через эти методы.
Ну а 1sqlite при работе с 1Сными дбфками не пользуется этими методами, а сразу читает значения полей из этого буфера, напрямую. В разработке CodeBase поменялась внутренняя логика работы с записями, и этот буфер при передвижении по таблице не заполняется. Hogik просто реализовал свои варианты методов FX_xxx, которые возвращают значения полей, но 1sqlite ими не пользуется.
Тут надо либо переделывать 1sqlite на работу с полями через FX_xxx, либо переделывать CodeBase, чтобы заполнялся буфер записи.
Если у тебя работа с буфером записи не изменена, то 1sqlite скорее всего будет работать.
  
Наверх
 
IP записан
 
Wirth
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 01. Марта 2010
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #26 - 27. Июля 2010 :: 20:01
Печать  
Логику работы 1с не нарушал. Мой подход скорее похож на rootkit.
  
Наверх
www  
IP записан
 
Wirth
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 01. Марта 2010
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #27 - 02. Августа 2010 :: 07:40
Печать  
Идеологически зашел в тупик. Нужен совет, а то сам не могу выбрать путь развития разработки.
В общем во-первых. Реализовал два режима работы сервера: - максимальная работа с кешем, соответственно самый быстрый на чтение ; - блокировки записей, нормальная работы с конкурирующей записью (пессимистический режим транзакции).
С одной стороны хочется быстро строить отчеты, с другой стороны хочется чтобы писал без сообщений "объект заблокирован".
Думаю сделать так:
сервер работает в неком среднем режиме, при котором блокировки декларируются, но не используются. И сделать два метода: DirectRead и SafeWrite, к примеру, которые будут временно переводить сервер в режимы быстрого чтения и безопасной записи?
И вторая мысль. Тут начал разбираться с программой Visual FoxPro (как наиболее прямого средства работы с DBF CDX), короче можно интегрировать часть Fox-а  в сервер. Fox поддерживает SQL, но надо думаю, посредством информации в DD переводить наименования объектов в имена таблиц, для удобства. И еще есть поддержка процедур, можно по идее сделать интерфейс исполнения "хранимых процедур" непосредственно на сервере.
Стоит морочиться?
  
Наверх
www  
IP записан
 
Wirth
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 01. Марта 2010
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #28 - 02. Августа 2010 :: 16:32
Печать  
Обновил файл на сайте. Версия  с возможностью переключения режимов транзакций.
  
Наверх
www  
IP записан
 
Wirth
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 01. Марта 2010
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #29 - 02. Августа 2010 :: 20:30
Печать  
По-поводу FoxPro. Все же это велосипед. Пожалуй переписывать "Прямые запросы" смысла нет. Если только действительно разобраться с блокировками и индексами, да так чтобы еще и триггеры работали. но это как-то пока не реально для меня. Времени много займет.
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 ... 6
ОтправитьПечать