b_period это public переменная блок кода для ввода даты
При запуске или при работе плагина из главного меню при использовании b_period программа вываливается на функциях BHelpPush(), BHelpPop(), NewPeriod(). Их как-то можно подгрузить из salary.bdll?
P.S. не срочный.
Да, в этом случае, поскольку salary.bdll не загружена, следует написать
LoadLibrary("salary.bdll")
Денис пишет:
И последний пока . Я в плагине который, который запускал из реестра лицевых счетов использую переменные БЭСТ-а B_Period и cAPeriod, которые не смогу использовать при запуске из главного меню. С cAPeriod проблем нет. Эти данные возьму из salary\setting.dbf->S_Period.
А как задана в БЭСТ-е в зарплате B_Period?
b_period это public переменная блок кода для ввода даты
Денис пишет:
К сожалению мне ни кто не может подсказать, как надо изменить второй пример из сообщения #44, чтобы он заработал из главного меню. Пока я слоняюсь к тому, что проблема в БЭСТ-е. Думаю, что ее можно как-то обойти. Пока я не видел ни одного работоспособного из главного меню примера, где bScrInit возвращает NIL
P.S. К сожалению меня начинает поджимать время. В понедельник надо показывать...
Добрый день!
Поставьте перед вызовом Qinput
ShowParent()
Если проблемы останутся, выложите или пришлите мне на titov@bestnet.ru код и описание проблемы. А то тут столько написано, что концов не найдешь...
В этом случае обычно выставляется семафор, который не позволяет второму пользователю писать в эту запись, пока первый не выполнит задачу полностью. При этом семафор не блокирует запись, а просто извещает второго пользователя, что с записью работают.
А не проще ли вместо семафорофа будет в данном случае применить блокировку записи??? И не нужен никакой семафор. (Интересно даже каким должен быть тут семафор? Еще интереснее где его инициализировать?)
И как в Б-5 работать с семафорами, потоками?
Конечно, в простых случаях применяются простые блокировки.
Нужно только иметь ввиду, что блокировка не должна выставляться на длительное время, чтобы не ограничивать в работе других клиентов. Это время определяется количеством попыток блокировки с других станций. А серверные семафоры используются для длительных процессов, когда, например, документ вызван на редактирование, и надо сообщить об этом другим пользователям, чтобы они его не могли в это время редактировать. На остальные ы готов ответить, если Вы практически подойдете к необходимости их решения.
Саак Шахламджян пишет:
Цитата Александр Титов пишет:
Добрый день!Если я правильно понял пример, то не надо делать промежуточной разблокировки записи, пока не закончится выполнение задачи полностью. Мы обычно в таких случаях решаем задачу в оперативной памяти, и, как только все данные для записи будут готовы, блокируем ее, изменяем и разблокируем.
Здравствуйте! Посмотрите, пожалуйста внимательнее пример. Там 2 пользователя. Действия второго с добовлением буквы б. И он не производит промежуточой разблокировки (Речь о ДВУХ пользователях). Один записывает, другой читает.
Само собой, если первый сразу все прочитает - проблем не будет. Я просто придумал такой пример, когда чтение идет дольше записи.
В этом случае обычно выставляется семафор, который не позволяет второму пользователю писать в эту запись, пока первый не выполнит задачу полностью. При этом семафор не блокирует запись, а просто извещает второго пользователя, что с записью работают.
3. Прочесть Поле2: Переменная2:=Поле2 (Поле2 заметьте уже совсем другое, по замыслу Поле2 интересовало нас при Поле1 равном 5.14)
4. КонецЕсли
Причем дейсвие 1 (Присвоение Переменной значения поля может быть и в функции Хитроумные математические действия(). Просто тогда остальные действия 2го пользователя должны быть передвинуты соответственно.
Добрый день!
Если я правильно понял пример, то не надо делать промежуточной разблокировки записи, пока не закончится выполнение задачи полностью. Мы обычно в таких случаях решаем задачу в оперативной памяти, и, как только все данные для записи будут готовы, блокируем ее, изменяем и разблокируем.
Саак Шахламджян пишет:
Так Вы "не заметите" как она изменилась. Вы как бы часть данных прочли со старой записи, "зависли" а потом прочли с новой. Например так:
1. Прочесть Поле1 (5.14)
1б. Запись изменилась. Поле1 стало равным 1.
2.Если (хитроумные математические действия(Поле1)==3.14)
// Хотя на самом деле уже истинно
//(Хитроумные математические действия(Поле1)==18.14)
3. Прочесть Поле2
4. КонецЕсли
Добрый день!
Не совсем так.
Обычно перед записью осуществляется ее блокировка. На время блокировки записи, другие пользователи видят ее прежнее содержимое, пока она не будет разблокирована. Активный юзер (который заблокировал запись) начинает изменять запись (пишет в поля), но другие пользователи пока это не видят. Как только запись будет разблокирована, другие пользователи увидят сразу все обновленные поля записи.
Для более сложных случаев (для каскадных изменений например) в БЭСТе (3.4) применяется система семафоров и транзакций.
Саак Шахламджян пишет:
1. Бест-5 -> Настройка -> Базы данных -> Технологические операции -> Описание структуры БД -> Продажи.Клиенты.
2. Нажимаем F3. Выбираем Сортировать по: русскому наименованию. Enter.
3. Читаем:
Вызов из (...) стр: функция _ORDSETFOCUS
В [C:\Program files\BEST\BEST5_34\Server\DATA\PRO\dic\b5tables.cdx] нет teg-a [DALIAS]
Саак Шахламджян пишет:
Знаете, если честно устал писать в редакторе XBA. Не хотелось жаловаться, не приводя конкретных глюков, как например один из которых описан выше, но, правда, ощущение такое, что просто наплевательски отнеслись к пользователям.
1. При отладке программы, написанной в редакторе, один и тот же файл открывается по 2-3 раза, т.е. в меню "Окна" один и тот же файл указан в 2х 3х или даже более экземплярах. Когда это происходит я не знаю, но при постоянное работе с отладкой такое происходит.
2. Неужели было сделать трудно сделать такой запрос:
"Файл был измененен, сохранить изменения?" - "Да.Нет. Отмена".
(Из-за 1го постоянно происходит следущее:
Сохраняю одну из копий файла, а в других копиях изменения не сохранились...)
3. CTR-Z (отмена последнего действия) и CTR-Y(повтор действия). ХОТЯ бы на одно последнее ДЕЙСТВИЕ, даже в БЛОКНОТЕ есть такое!!!!
(стоит только перепутать crl+x с Ctrl+v потом сиди ломай голову...)
Ну, правда, знаете сколько нервных клеток уже убил Ваш XBA редактор...
Добрый день!
Спасибо за замечания, мы работаем над их устранением.
Саак Шахламджян пишет:
Критическая ошибка:
1. Запускаем БЕСТ
2. Меню Сервис->Запустить редактор XBA
3. Открываем папку MNF
4. Создать новый файл. Задаем имя, нажимаем СОЗДАТЬ.
( Попутно еще глюк: тут программа выдает запрос: "Файл с таким именем существует.Заменить на новый?" Хотя такого файла и в помине нет!!!!)
5. Нажимаем да. (на запрос)
6. Открывается файл. Наводим курсор на 1ю строку (мышью).
7. Нажимаем клавишу END.....
Все... бест рухнул... и редактор XBA и окно беста с открытой базой. Крит:
"Исключение неизвестное программное исключение (0х0eedfade) в приложении по адресу 0x7c81eb33".
Такое часто выходит, однако этот случай могу описать и такое всегда происходит.
Денис пишет:
Цитата Александр Титов пишет:
Ситуацию повторили. Исправим в SP10.
Спасибо! А как сейчас исправить, чтобы из спецфункции можно было WinReport запускать?
СП10 в августе будет?
Если по простому:
- заменить строки
FUNCTION WRPTest()
Local aTable, cFile, cName, cFileStruc, cNameStruc, cPriv
на
PRIVATE aTable, cFile, cName, cFileStruc, cNameStruc, cPriv
- привязать по Ctrl-F5 без компиляции programm.prg
и все.
Второй вариант - откомпилить в hrb и привязать .hrb.
Третий вариант - через userlibpro.bdll и вызывать функцию.
SP10 будет в августе.
Станислав Кубиковский пишет:
Цитата Александр Титов пишет:
1. По изменению цены. Проверили: изменяли цену разными способами (через документы, номенклатурный справочник, прайс, расчет себестоимости). После каждого изменения делали выдачу изменений документов в филиал. В филиале цена менялась.
Можно попросить описать конкретную ситуацию, при которой делались изменения цены у номенклатуры, каким способом, а потом при передаче данных цена оставалась прежней в филиале ?
Проверил сегодня утром цену меняем через "Продажи.Клиенты.- Ведение прайс-листов - Основной Прайс-лист" изменили две цены на две номенклатуры. В филиале после приема данных цена не изменилась.
Прикрепил файлик с данными
Денис пишет:
Можно ли вызвать плагин (цель которого сформировать отчет с помощью WinReport) (с предварительными запросами данных (к примеру с помощью QInput) и без таких запросов) из меню БЭСТ5 3.4 СП9 с помощью файла userbdll.txt?
Да, конечно. Если какие проблемы возникнут - решим.
Настройка-Базы данных-Технологические операции-Описание структуры БД по Ctrl-Enter
Посмотрел этот пункт и создалось впечатление, что центральный комплекс может обмениваться с удаленным филиалами данными из файлов (и целых приложений) добавленных самостоятельно "пользователем". Я правильно понял?
Станислав Кубиковский пишет:
Проверено лично при выдаче данных с изменением одной цены на одной номенклатуре не проходило в филиале. С настройками проходило.
И еще задвоилась в торговом зале типовая операция Возврат Товара в филиале, в центре нормально (одна).
1. По изменению цены. Проверили: изменяли цену разными способами (через документы, номенклатурный справочник, прайс, расчет себестоимости). После каждого изменения делали выдачу изменений документов в филиал. В филиале цена менялась.
Можно попросить описать конкретную ситуацию, при которой делались изменения цены у номенклатуры, каким способом, а потом при передаче данных цена оставалась прежней в филиале ?
2. Про задвоение типовой операции.
Не смогли выйти на ситуацию.
При первом приеме настроек в филиале справочник типовых операций очищается, и все типовые операции принимаются с теми же RowId (уникальный номер строки), как и в центральном комплексе. Поэтому задвоение исключено.
При последующих приемах уникальные номера строк уже будут совпадать. Такая ситуация могла бы получиться, когда у одной и той же операции был разный RowId в центре и в филиале, например после ручного копирования строки, но программно выйти на ситуацию не удалось.
Станислав Кубиковский пишет:
Цитата Александр Титов пишет:
Номенклатурный справочник с ценами передается и при выдаче настроек и при выдаче документов, тем более, что там и там есть режим выдачи по изменениям. Поэтому все время гонять настройки не надо.
Проверено лично при выдаче данных с изменением одной цены на одной номенклатуре не проходило в филиале. С настройками проходило.
И еще задвоилась в торговом зале типовая операция Возврат Товара в филиале, в центре нормально (одна).
Станислав Кубиковский пишет:
1. Что входит в настройки а что в данные при передаче? Сейчас приходиться передавать одну изменившуюся цену на номенклатуру вместе со всеми настройками. Выгонять там и здесь пользователей.
Передаваемые таблицы и поля можно посмотреть в режиме
Настройка-Базы данных-Технологические операции-Описание структуры БД по Ctrl-Enter. Номенклатурный справочник с ценами передается и при выдаче настроек и при выдаче документов, тем более, что там и там есть режим выдачи по изменениям. Поэтому все время гонять настройки не надо.
Цитата
Станислав Кубиковский пишет:
2. Настройки на кассы в торговом зале в филиалах происходит с ошибкой (смотрите скрин), при попытке завести настройку на кассу в первом поле "КОД МАГАЗИНА" недоступен справочник, заполняем ручками, не дает спуститься вниз, выходим. Предлагает сохраниться, говорим да, пишет что не заполнено все остальное и перескакивает на третье поле, далее все штатно заполняем. Так должно быть?
Это поправим в SP10.
Цитата
Станислав Кубиковский пишет:
3. Про монопольный режим вообще грустно писать. Чтобы принять данные с филиалов (11 шт) нужно потратить уйму времени (минут 40-60), чтобы выдать им изменения (цены, партии, номенклатуру) еще столько же. Мы могли бы пойти на это если бы не МОНОПОЛЬНЫЙ РЕЖИМ в действующей реализации. Представляете центральный офис из 15 человек (менеджеры, бухгалтерия, экономисты, шефы, кадровики) и сказать им чтобы они примерно на 2 часа рабочего времени не входили в базу (не разносили выписки, не формировали отчеты, не оприходовали ГТД)?
Использование монопольного режима позволило увеличить скорость выполнения операций выдачи и приема данных примерно в 200 раз (проверяли на больших объемах).
Тем не менее, в SP10 мы проведем доработки, которые позволят отказаться от монопольного режима при выдаче данных, не теряя сильно в скорости, а при приеме постараемся увеличить скорость обработки.
Александр Таранов пишет:
с DOS в Excel переходит быстрее, чем просто в ексель.
А как быть просто с екселем? Не всем удобно альт-ф2 нажимать.
Может как то можно ускорить процесс с екселем?
бы на конкретной базе посмотреть. Можете выложить базу?
Игорь Борисов пишет:
Я по этому примеру и делаю.
Но в нем нет как взять значение ячейки, а только присвоить.
И что означает строчка в примере
oSheet:getCellByPosition(6,38):setString("Ячейка G39")
Присвоить ячейки G39 значение Ячейка G39.
Пишу oSheet:getCellByPosition(6,38):value не работает.
Помогите.
Для чтения данных из ячейки сначало необходимо узнать какой тип данных в ней находится. Для этого можно воспользоваться методом getType. Возвращаемые значения:
0 - пустая ячейка;
1 - число;
2 - текст;
3 - формула.
В зависимости от полученного результата используются методы getString, getValue, getFormula.