BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 14 15 16 17 18 19 20 21 22 23 24 След.
Диалоговое окно запроса.
 
Нужен диалог:
"Вы уверены, что хотите удалить. Да.нет". 2 кнопки, все как обычно.
Alert() не работает. Про него сразу забыть или он должен работать?
Я использовал вместо него MessageBox('Удалить запись?', 'БЭСТ-5', 33) - как ни странно работает!!! (В исх коде у разработчиков отковырял)
Но очень бы хотелось еще и диалог с n колич выбора... Подскажите, пожалуйста такой диалог!!!

Для спецфункции в редакторе XBA, Б-5.
Компиляция "на лету" нескольких строк.
 
Цитата
nordk пишет:
И еще Вы в Eval пытаетесь передавать список аргументов - а они уже определены...а то Вы показываете опять только кусок кода....


Код
FUNCTION CheckAndMakeString(UString)
Local bBlock, bCorrect:=.T.,x,y,z,q,s
Local temp:=1
LOCAL oErr
x:=1
y:=1
z:=1
q:=1
S:=1
UString:= "{|x,y,z,q,s|"+UString+"}"
TRY
bBlock:=&UString
temp:=Eval(bBlock,x,y,z,q,s)
Catch  oErr
bCorrect:=.F.
end
return bCorrect

Это функция проверки на правильность введенной формулы. При её вводе пользователем. У него (пользователя) ограничение - 5ть переменых, которые я и определяю, только, чтобы проверить.
(Недостаток - не учтено деление на ноль. К стати сейчас, думаю, можно убрать строки с Eval и инициализацией переменных. Ф-я должна только проверку на синтаксис делать)
С формулой, которую можно записать в одну строку всё отлично работает, а вот 2 строки. Если, например нужно не просто формулу вставить, а что-нибудь эдакое:
Код
if((x<=500).AND.(z>=100))
//вычисления
elseif ((y<=500).AND.(z>=500))
//вычисления
else 
//err
endif

Рещили обойтись IIF, т.к. циклов не будет и можно его использовать. Единственное не так удобно...
Изменено: Саак Шахламджян - 05.09.2008 11:08:54
Новое в СП10.
 
Цитата
Николай Иванов пишет:
Цитата Саак Шахламджян пишет:
Я, конечно, "не доктор"
Пока. Будете докторскую защищать, присылайте автореферат на отзыв...

Я просто подчеркнул, что это мое мнение - человека не претендующего на звание "А я знаю как правильно".
Просто, когда люди на производстве удивляются как им работать с программой, выражая совершенно обоснованные претензии, не стесняясь в выражениях, волей не волей будешь спрашивать все досканально...
А Вопросы у меня возникли только по одной причине.
Заказ1
1. Стол 01/01 - 2 шт
2. Стул 02/01 - 3 шт
3 Тумба 03/01 - 4 шт

Заказ2
1. Стол 01/01 - 1 шт
2. Стул 02/01 - 2 шт
3 Тумба 03/01 - 3 шт
И получается я должен сначала, получив такие заказы сделать заказ1, а затем заказ2!???
Или я должен сначала на листочек из каждого заказа выписать все позиции, а потом сидеть и думать, что и когда буду выпускать?
Изменено: Саак Шахламджян - 04.09.2008 19:19:20
Компиляция "на лету" нескольких строк.
 
Eval() позволяет исполнить пользовательский код, записанный в одну строку, лежащий в блоке кода.
FileEval позволяет запустить пользовательский код, хранящийся в файле.
HFileEval также как и FileEval+ запуск откомпилированных .hrb.

А нет ли возможности запускать пользовательский код, записанный в несколько строк(строка+символ-конец строки+строка....), которая могла бы к примеру храниться в DBF файле в виде memo, или просто в виде строки?
Пытался в блок кода "впихнуть" несколько строк:
Код
UString:= "If (x>0)"+I2Bin(2573)+"endif"
UString:= "{|x,y,z,q,s|"+UString+"}"
TRY
bBlock:=&UString
temp:=Eval(bBlock,x,y,z,q,s)
Catch  oErr
end

Работать отказывается. (Использование IIF не подходит.)
Изменено: Саак Шахламджян - 04.09.2008 17:28:17
Новое в СП10.
 
Цитата
nordk пишет:
В данной задаче на сегодня не стоит планирование цеха.
Задача рассчитана на тех, кому функционал производства велик и им надо по заказу списать материалы и выпустить изделие.
Если нужны наряд задания и план-график - это все есть и тогда Ваш вариант не позаказное производство.

Ясно. А предполагаются ли хотя бы какие-либо отчеты, сводящие воедино информацию из заказов производства? Чтобы посмотреть общую картину.
Новое в СП10.
 
Вчера вышла новость о выходе СП10 с описанием новых возможностей.
( Производственные заказы были и до этого, вроде...)
Очень интересно, что выстроена такая схема:
Покупатель->Заказ->Произ-й заказ->....

Когда заказ один и большой, то это, конечно неплохо. А если их много?
Производство ведь по взмаху волшебной палочки не может "каждые 5ть минут станки перенастраивать". Упускается как бы момент планирования работы самого цеха...
(Наряд-задания и план-график выпуска что-то подобное в себе и несли).
Я, конечно, "не доктор", но, кажется, что этот момент немаловажен для позаказного производства.
А что если:
Заказчики->Заказы->Формирование производственного заказа (Есть реестр потребности продукции - все строки заказов, что-то, вроде потребности на заказ в ОКПП. Там помечаем, то, что запускается в производство в цеха непосредственно, а затем могут формироваться Н-З или каким-либо еще способом передается информация о запуске изделий в цеха)
Компонент TBestDataset дизайнера приложений., Никак не могу понять, как указать таблицу в компоненте.
 
Цитата
Денис пишет:

Хотелось бы ...

Тогда, наврное, надо куда-то сохранять эти значения, я полагаю. Эдакий файл конфигурации. .ini файл (просто текст), возможно.
Ограничение доступа к определенным складам
 
Цитата
Дмитрий Рогачев пишет:
Здравствуйте уважаемые разработчки - каким образом можно организовать ограничение доступа пользователей к определенным складам?

Как я понимаю менеджером пользователей на данном этапе этого не решить. Возможно ли сделать это другим способом?

Стоит задача групе пользователей разрешить доступ только к определенным складам.

В Менеджере пользователей, например, для Сырье.Материалы кликом правой кнопкой мыши выбрав меню "определение правил доступа" можно определить правила для конкретного склада. И если убрать галочку со склада для конкретной роли, то доступа к нему не будет. У нас работает.
Компонент TBestDataset дизайнера приложений., Никак не могу понять, как указать таблицу в компоненте.
 
Вообще вчера пытался поставить фильтр\скоб, хоть что-нибудь сделать с табличкой. Безрезультатно. У компонента TBestDataset есть свойство Filter, Filtered, ScopeBegin, ScopeEnd,Scoped. Теоритически можно предположить, что они как-то связаны с установкой фильтра или скоба на базу, но все безрезультатно.
В отладчике видно активный индексный тег, который задается свойством IndexName, таблица получается отсортированной согласно ему. Но вот фильтр или скоб не ставиться...
Кто-нибудь может подсказать как это сделать?
Еще, к стати, на удивление работает RecNo(), которая показывает номер текущей записи, на которой установлен курсор в элементе xbGrid.
Изменено: Саак Шахламджян - 29.08.2008 08:31:34
Компонент TBestDataset дизайнера приложений., Никак не могу понять, как указать таблицу в компоненте.
 
Цитата
Денис пишет:



Цитата

Саак Шахламджян пишет:
НАКОНЕЦ-ТО ширину колонок можно менять!!!!

А это изменение сохраняется на следующий сеанс?





Цитата

Саак Шахламджян пишет:
Нет, dll, все же должна лежать в папке bin...

dll или bdll?
bdll сама должна попадать в client\bin после компиляции

bdll, конечно. Я же написал, должна в bin лежать.
Нет, не сохраняются, а что должны?
Как и при выходе из Б-5 так и при перезапуске вновь появившегося меню.
Компонент TBestDataset дизайнера приложений., Никак не могу понять, как указать таблицу в компоненте.
 
Нет, dll, все же должна лежать в папке bin...
Сейчас, прочтя Ваши уроки 3 и 4, скрестив их с примером их хелпа пример у меня получился (по ур. 4 так и не увидел табл.). Думается, без Вашего описания, вообще неясно как работать с дизайнером. Очень жаль. Поля таблицы прекрасно вижу, кнопочки нажимаются (открыть\закрыть базу работает, а вот закрыть форму пока нет). Правда есть одна проблема... Путь к открываемой таблице я прописал абсолютный, в свойстве компонента TBestDataset. Как определить "текущий путь" (как в XBA редакторе LoadPath()) не понимаю.

P.S. НАКОНЕЦ-ТО ширину колонок можно менять!!!!
Изменено: Саак Шахламджян - 28.08.2008 10:19:02
Компонент TBestDataset дизайнера приложений., Никак не могу понять, как указать таблицу в компоненте.
 
Цитата
nordk пишет:
Когда сделаете все до конца то на экране увидите интерфейс таблицы. На этом пока все...

Хех, очень, очень жаль, что вы в 4м уроке не сказали, что скомпилированный файл нужно подложить в БД. Только с утра догадался...
Еще смущало, что при запуске нового меню, выходной файл по сообщению компилятора был занят. Сегодня такого не было.
Однако, записей содержащихся в таблице увидеть не получилось.
Изменено: Саак Шахламджян - 28.08.2008 09:06:58
УРОК 3 Создание таблиц,индексов.пунктов меню, БЭСТ-5 поддержка пользовательких решений
 
Цитата
nordk пишет:
БЭСТ построен на ядре Visual FoxPro и особенностями этого является наличие контейнера в который собраны
все таблицы. Пройдите урок от начала до конца и Вы увидите что и куда мы добавляем.

Это файл BEST5.DBC - контенер? По-моему это файл базы данных. Хотя, какая разница.
Ну, что же с интересом буду ждать описания создания индексов. Мне очень интересно. В этой утилите есть много-много интересного, о чем очень хотелось бы знать.
УРОК 3 Создание таблиц,индексов.пунктов меню, БЭСТ-5 поддержка пользовательких решений
 
Цитата
nordk пишет:
Еще раз прошу не бежать вперели паровоза. Вы не знаете
задумок и не надо навязывать свое.
Что касается создания статических таблиц - создавайте их чем хотите. Хотите пишите программы для их создания я лично предпочитаю пользоваться инструментом и объясняю другим как это делается. Как ее включить в контейнер БЭСТа, где ее хранить и т.д. и т.п.
Это действие разовое.

ДЕМАГОГИЮ продолжать не буду

Хорошо, давайте, ворос по существу.
Что значит включить таблицу в контейнер БЕСТа?
Изменено: Саак Шахламджян - 27.08.2008 16:52:20
УРОК 3 Создание таблиц,индексов.пунктов меню, БЭСТ-5 поддержка пользовательких решений
 
Цитата
nordk пишет:
Вы делайте как хотите а мне оставьте изложение так как я вижу более правильным. Оно далеко еще не звершено и по этому пути пока спешить делать решения не рекомендую

Вот поэтому я и спросил, в чем же причина создания таблиц именно таким образом? Было интересно в чем разница.
Цитата
nordk пишет:
Мой путь решения будет строиться исключительно на бизнес-объектах БЭСТа и средствах поддержки решения БЭСТом в дальнейшем при апгрейдах и установках пакетов.

Кроме того действительно Вы опустили описание создание индексов для таблицы средством БЕСТ'а - "Утилита работы с базами данных БЭСТ-5". Там есть отдельная вкладка для них.
Компонент TBestDataset дизайнера приложений., Никак не могу понять, как указать таблицу в компоненте.
 
Цитата
nordk пишет:
По этим урокам люди делали пример и у них все ПОЛУЧИЛОСЬ. Читайте внимательно - там все есть.

Я не говорил, что у меня не получилось то, что описано в уроках 1-3. Вы просто саказали, что перед тем как читать урок 4 надо пройти курс уроков 1-3. Вот я и спросил вся ли эта информация по урокам 1-3? (Просто УРОК 4, кажется в нескольких темах)
УРОК 3 Создание таблиц,индексов.пунктов меню, БЭСТ-5 поддержка пользовательких решений
 
Цитата
nordk пишет:
В нашем примере индексы и таблица должны быть постоянными а не временными и мы их предполагаем делать
средствами БЭСТа. Временные таблицы и индексы годятся для построения отчетов и прочих временных интерфейсов.

А я что предлагаю Вам постоянно их менять??? Код, приведенный выше, как раз и есть средствами БЕСТ!!!
И у Вас я создания индексов не видел. А в коде создается один индекс.
Компонент TBestDataset дизайнера приложений., Никак не могу понять, как указать таблицу в компоненте.
 
Цитата
nordk пишет:
А начните с 1 урока

Уже дошел до урока 3 включительно. Возможно, я что-то упускаю?
Урок 1 - две темы (одна не Ваша.)
Разобран коротенький код:
Код
  Local x 
   ALTD() 
   x:="OK" 
   SayAndWait(x) 
   RETURN NIL

Урок 2 - Одна тема. Описание папок, отображенных в инспекторе.
Урок 3 - Создание новой таблицы приложением VFOXPRO.
УРОК 3 Создание таблиц,индексов.пунктов меню, БЭСТ-5 поддержка пользовательких решений
 
Цитата
nordk пишет:
1.Создание своих таблиц

На примере темы расположенной здесь
рассмотрим создание таблицы.

1)Запускаем client\bin\foxbro
2)Файл - создать таблицу
3)Находим нужную базу данных
4)Открываем папку user
5)Поскольку нам надо для задачи доверенностей создадим папку dover
6)Откроем папку,напишем имя таблицы dover.dbf и жмем сохранить
7)Вводим поля следующего формата:

ID_DOV Сharacter 10 0 – уникальный идентификатор в нашем примере сделаем
его символьным
CODEDOC Character 3 0
NUMDOC Character 6 0
DATE_IN Date 8 0 - дата выписки довереннсти
DATE_OUT Date 8 0 - дата какую довереннсть дествительна
TNUM Character 6 0 - табельный номер из БЭСТ
FIO Character 80 0 – ФИО, должность
PASPORT Character 80 0 – паспортные данные
AGENTNAME Character 60 0
AGENTCODE Character 6 0 Код партнера из БЭСТ
DOC Character 1 0 – ТМЦ получены по (варианты – накладной, счету, договору ) Применим массив и одного символа нам хватит
YEAR Integer 4 0 – год к которому относится доверенность (использовал отдельно для более быстрого отбора записей) Нужно ли
год иметь поле символьным ? Вероятно нет.
STATUS Character 1 0 – статус доверенности (0-выдана, 1 – возвращена, 2- закрыта т.е. ТМЦ получены)
TTN - Character 60 0 – № накладной, дата и т.д. по которой получены ТМЦ
PRIM Character 37 0

8)После ввода всех полей жмем ОК
9) На запрос INPUT DATA RECORDS отвечаем No

Таблица создана

У меня 2 Вопроса. А индексов у таблицы не будет?
И чем Вам не нравиться такой код:

Код
CreateBasesForSpecificationConstruct()

#define cDov LoadPath()+"dover\dover.dbf"
#define cIDov LoadPath()+"dover\dover.CDX"


Procedure CreateBasesForSpecificationConstruct()
Local nExist:=3
Local aDOV:= {       {"ID_DOV", "C", 22, 0}, ;
                     {"CODEDOC", "C", 3, 0}, ;
                     {"NUMDOC", "C", 6,0},;
                     {"DATE_IN", "D", 8,0},;
                     {"DATE_OUT", "D", 8,0},;
                     {"TNUM", "C", 6,0},;
                     {"FIO", "C", 80,0},;
                     {"PASPORT", "C", 80,0},;
                     {"AGENTNAME", "C", 60,0},;
                     {"AGENTCODE", "C", 6,0},;
                     {"DOC", "C", 1,0},;
                     {"YEAR", "N", 4,0},;
                     {"STATUS", "C", 1,0},;
                     {"TTN", "C", 60,0},;
                     {"STATUS", "C", 1,0},;
                     {"PRIM", "C", 37,0}}


dBpUSH()
nExist:=CheckIfBasesAlreadyExist()
DO CASE 
  CASE (nExist==1)
      SayAndWait("Какая-либо из таблиц (или все) уже существует. Создание невозможно!!!")
  CASE (nExist==0)
    //Ветка создания баз данных
    DbCreate (cDov,aDOV)

    Use (cDov) NEW
    INDEX ON UPPER(NUMDOC) TAG NUMDOC TO (cIDov)
    REINDEX
    DbCloseArea()

    //Проверка ошибок
  CASE (nExist==3)
        SayAndWait("Неопознанная ошибка")
  ENDCASE
DbPop()
return

Function CheckIfBasesAlreadyExist()
Local nAlreadyExist:=3
If (File(cDov))
  nAlreadyExist:=1
else
  nAlreadyExist:=0
endif
return nAlreadyExist
Компонент TBestDataset дизайнера приложений., Никак не могу понять, как указать таблицу в компоненте.
 
Цитата
nordk пишет:
Ниже есть уроки - попробуйте по ним пройти.
Заниматься ненужными изысканиями по открытию таблиц у меня нет возможности на сегодня.

Я как раз перед этим и начал с Урока 4. Он не получился. Новое меню в Б-5 появляется, однако формы новой нет:(.
Решил, что стоит покопаться самому. И что пример, описанный в хелпе проще (по идее там проще), вот и начал с него.
Компонент TBestDataset дизайнера приложений., Никак не могу понять, как указать таблицу в компоненте.
 
В справочнике есть описанный пример создания простейшего приложния. Он почему-то не получается. Зато я нашел где же указывается таблица. Свойство tableName и указывает на таблицу. Однако, неясно почему при попытке включить свойство active (прямо в дизайнере) получаю ошибку. (Обычно в других дизайнерах так делать можно). Возможно так делать нельзя, но скомпилировать проект вообще не получается.
Исходный код из примера:
Код
METHOD Form_Create(Sender, Param)
::BestDataset1:Active := .NOT. ::BestDataset1:Active
IF ::BestDataset1:Active
::lblCnn:Caption := 'Соединение установленно'
ELSE
::lblCnn:Caption := 'Соединение прервано'
ENDIF
RETURN .T.


METHOD btnConnect_Click(Sender)
::BestDataset1:Active := .NOT. ::BestDataset1:Active
IF ::BestDataset1:Active
::lblCnn:Caption := 'Соединение установленно'
ELSE
::lblCnn:Caption := 'Соединение прервано'
ENDIF
RETURN .T.

METHOD btnClose_Click(Sender)
::Destroy()
RETURN .T.


Надо полагать, что этот код должен появиться в элементе проекта Программы (проект)?
Он там не появляется, его м\б вручную надо ввести куда-либо?
Компонент TBestDataset дизайнера приложений., Никак не могу понять, как указать таблицу в компоненте.
 
Как я понимаю компонент TBestDataset "получает" данные из таблиц, никак не могу понять каким образом в данном компоненте указывать нужную таблицу.
Изменено: Саак Шахламджян - 27.08.2008 13:26:13
Вопрос по блокировке записей.
 
Цитата
nordk пишет:
Если Вам нравится делать так - делайте так.
Понятие "правильно" весьма субъективно.
Свою точку зрения навязывать не буду.
Моя задача консультировать о возможностях...

Второй вариант - неправильно!!! Во втором варианте должно быть Входвсемафор()
Выход(). Этого там нет. То, что я привел вместо этого - даже не знаю как назвать...
На крайний случай (я в WinApi не так уж и силен), создать объ-ект событие, общий по сети для всех (это м\б файл), и сделать у него метод, вроде WaitForSingleObject, который и будет пытаться открыть такой файл, а если он занят, то замораживать процесс, ожидая освобождения (насколько я знаю в Windows такие объекты заранее определены, не знаю, возможно ли такой построить самому). Если бы так можно было сделать, останется Вопрос о синхронизации данного действия.
Вопрос по блокировке записей.
 
Цитата
nordk пишет:
А здесь Вы наворотили столько проверок вместо простого кода... (ИМХО)

Интересно о какой проверке идет речь? (Или имелось ввиду разделение куска кода во времени?) Я такой ерунды, разумеется, не писал в программе и писать не собираюсь. "Ежу" понятно почему так делать нельзя.
Было желание сделать правильно, и самое главное научиться это делать, только и всего.
Вопрос по блокировке записей.
 
Цитата
nordk пишет:
А теперь первый вариант предложите сделать
одновременно 10 операторам и получить ошибку

Первый вариант "делали" 2 оператора.
Если Вы имели ввиду создание одной единицы, то да-добиться такого результата весьма сложно, т.к. это программа исполняется быстро. Но суть не в этом, меня даже не это интересует. Интересует правильное написание программы.
Конечно, я мог бы спорить дальше и для Вас рассчитать вероятность такого "плохого" исхода для 10ти операторов, взяв реальное время исполнение+создание трех единиц (у нас именно так), но смысла в этом, думается нет.
Страницы: Пред. 1 ... 14 15 16 17 18 19 20 21 22 23 24 След.