Сегодня начал использовать initList. Довльно веселая вещь - просто и более-менее удобно.
Возникло 3 а:
1. При использовании своего InitList есть также возможность и в нем подключать спецфункции. Список совсем другой, отличный от места откуда был вызван свой InitList. Непонятно соблюдается ли уникальность списка?
(Иными словами, если написать 2 спец-ии с InitList возможно ли сделать для них разные списки спецфункций?)
Стало инетресно где храниться этот список.
2. Как я понял нет возможность "отловить" создание новой записи?
(Решил только вставив блок кода в "16. ._bPost – постблок, выполняющийся после записи (REPLACE) данных в базу.", который проверяет на пустоту определенные поля)
3. Уникальные поля. Возможно ли где-либо прописать правила создания новой записи? Т.е. при нажатии пользователем F4 "автоматически правильно" формировалось, например поле ID записи?
(Сейчас решил это во 2м пункте проверкой поля ID на пустоту и если оно пустое - StepPlus())
Нужен диалог:
"Вы уверены, что хотите удалить. Да.нет". 2 кнопки, все как обычно.
Alert() не работает. Про него сразу забыть или он должен работать?
Я использовал вместо него MessageBox('Удалить запись?', 'БЭСТ-5', 33) - как ни странно работает!!! (В исх коде у разработчиков отковырял)
Но очень бы хотелось еще и диалог с n колич выбора... Подскажите, пожалуйста такой диалог!!!
Eval() позволяет исполнить пользовательский код, записанный в одну строку, лежащий в блоке кода.
FileEval позволяет запустить пользовательский код, хранящийся в файле.
HFileEval также как и FileEval+ запуск откомпилированных .hrb.
А нет ли возможности запускать пользовательский код, записанный в несколько строк(строка+символ-конец строки+строка....), которая могла бы к примеру храниться в DBF файле в виде memo, или просто в виде строки?
Пытался в блок кода "впихнуть" несколько строк:
Вчера вышла новость о выходе СП10 с описанием новых возможностей.
( Производственные заказы были и до этого, вроде...)
Очень интересно, что выстроена такая схема:
Покупатель->Заказ->Произ-й заказ->....
Когда заказ один и большой, то это, конечно неплохо. А если их много?
Производство ведь по взмаху волшебной палочки не может "каждые 5ть минут станки перенастраивать". Упускается как бы момент планирования работы самого цеха...
(Наряд-задания и план-график выпуска что-то подобное в себе и несли).
Я, конечно, "не доктор", но, кажется, что этот момент немаловажен для позаказного производства.
А что если:
Заказчики->Заказы->Формирование производственного заказа (Есть реестр потребности продукции - все строки заказов, что-то, вроде потребности на заказ в ОКПП. Там помечаем, то, что запускается в производство в цеха непосредственно, а затем могут формироваться Н-З или каким-либо еще способом передается информация о запуске изделий в цеха)
В Windows есть папки для хранения временных файлов. "Переменные среды", как они названы в Windows. Там есть 2 типа: Системные и для Интеренет. Разработчики используют для Интернет:
Например, TEMP, лежащая по пути %USERPROFILE%\Local Settings\Temp (Обычно это "c:\Documents and settings\"+(sWindowsUserName)+"\Local Settings\Temp")
Есть ли команда, позволяющая определить данный путь?
Нет возможности создать предварительный(черновой) Сводный заказ. (Их убрали начиная, кажется с СП7)
Очень нужен "Черновой" заказ. Полез в описание полей real\rbook о полях STATUS, STATUS1, STATUS2 толком ничего не написано.
Нам надо реализовать:
Создается черновой заказ (в нем естесственно даты изготовления изделий указаны быть не должны). Полсе того как заказ прошел фин контроль, пользователь может его перевести в статус нормальный, или к запуску.
1. Возможно ли в rbook сделать строки, не попадающие в ОКПП?
(Имеется ввиду хранить информацию о черновом варианте заказа в той же таблице, что и все без "последствий")
2. Возможно ли в rbookm (тут строки заказов храняться) сделать строки без дат изготовления? (Будет ли Б-5 на это ругаться?)
(Если ответ утвердительный можно бы тогда написаить спецфункцию, формирующую заказ прямо из прайс-листа)
Поэтому полями STATUS и интересуюсь.
В Mlabel торговли (\SCLAD) есть индекс TAG_RAZMER , UPPER(STATUS+RAZMER).
Поиском по нему не находится.
Например ищу строку:
" "+"100x100x100". Не находит.
Даже не работает такое:
Код
Goto 250//В отладчике поля 250й записи видны
stemp:=MLaBEL->STATUS+MLABEL->RAZMER
//Присвоилось " 100x100 "-26 символов.
DbPush("MLABEL","TAG_RAZMER","",{"UPPER(STATUS+RAZMER)",stemp,stemp})
После того как ставлю скоб - пусто. Устал биться. В чем проблема, подскажите, пожалуйста.
На своём предприятии столкнулся с такой проблемой:
Заказчик : - Надо написать программу.
Сис админ: - Какую, для чего?
З: - Чтобы производство учитывалось.
С: - А что нужно учитывать?
З: - Ну, чтобы всё работало!!!
Наверняка, с таким сталкиваются повсеместно. Выход - написание документов, в которых указано, что должно быть реализовано, в т.ч. и ТЗ. Честно говоря уже давно таким не занимался. Кто и как документально согласовывает с заказчиком, то, что ему нужно, чтобы потом не быть "крайним". Конкретно при работе с внедрением БЕСТ в производство.
Уверен, что целиком ТЗ детального как такового нет, не существует, но все же как-то подтверждает З чего он хочет. Как поступать, чем руководствоваться при написании таких документов, м\б, что-нибудь почитать?
Есть файл EXEL. В нем есть 5(n) ячеек от которых зависят значения остальных (Т.е. меняем в какой-либо из этих 5ти ячеек значения в остальных происходят изменения).
Стоит такая задача:
1. Пользователь вводит 5ть(n) параметров.
2. Копируем Exel файл, называем по-новому.
3. Вносим в те 5ть (n) ячеек данные пользователя.
4. Необходимо, чтобы изменения проризошли и в остальных ячейках, зависящих от "главных".
5. По необходимости пользователь из бест открывает файл EXEL в программе Exel для печати.
Подскажите, пожалуйста, каким образом реализовать 3,4 и 5 с условием, что даже если и вызывается EXEL, то пользователь никаких действий, кроме печати не совершает?
(Возможно ли такое?)
Например,
1. ячейки в файле изменяют значения (как я понимаю это произойти должно без привлечения самой программы EXEL)
2. Затем файл открывается в EXEL, запускается макрос, который "заставит" изменить, затем файл сохраняется.
У нас при работе с модулем производство возникла небольшая проблема. Сейчсас опишу, когда она возникает.
1. Открываем номенклатурный справочник производства
(Учет Произ-ва->Работа с картототекой->Номенклатурный справочник
2. Нажимаем F4. Выбираем группу в которой есть продукция. Оставляем окно редактирования.
3. Открываем еще одно окно. Реестр спецификаций. Нажимаем F4. Задаем код, выбираем туже группу, что и в ном справочнике. Присваиваем статус действ. TAB "Сохранить?" - Да. Теперь мы на вкаладке Маршрут. Нажимаем ESC (Выход из редактирования) БЭСТ долго "думает".
4. Читаем:
"DELPHI: BADI.DLL: ....
DExecuteSP: Ошибка, при выполнении хранимой процедуры на сервере № 109
1Record is in usy by another user."
Такое, в принципе всегда происходит при создании (именно при создании новой, когда висит окошко редактирования) новой номенклатуры и когда другой пользователь просто выходит из редактирования спецификации.
БЕСТ-5, СП9
Заинтересовала следующая ситуация.
Есть 2 пользователя ПользовательА и ПользовательБ.
Есть таблица с полями Поле1, Поле2, Поле3.
Представим такую ситуацию:
Действия пользователя Юз1:
1а. Открыл таблицу в режиме Shared.
2а. Переместился на ячейку №15 таблицы.
3а. Считать в Пер1:=Поле1 (Считать в пер-ю1 значение ячейки №15 поля П1)
4а. Считать в Пер2:=Поле2
5а. Считать в Пер3:=Поле3
6а. Закрыл таблицу
Действия пользователя ЮзБ:
1б. Открыл таблицу в режиме Shared.
2б. Переместился на ячейку №15 таблицы.
3б. Заблокировал содержимое ячейки №15 и если успешно->продолжил
4б. Поле2:=Пер13
5б. Поле3:=Пер18
6б. Закрыл таблицу.
Что произойдет, если действие 3б (или 4б, 5б) произойдет одновременно с действием 4а или 5а?
Смысл делать проверку на заблокированность записи №15 пользователю А нет.
Насколько я понимаю для пользователя А такая ситуация грозит искажением получаемых данных?
БЭСТ-5 СП 9
Проведем небольшой тест. Для теста создадим Таблицу и пару записей в ней, спец-я UCREATETETABLE:
Код
UCreateAdditionalBase()
#define cAmounts LoadPath()+"REAL\UTest.dbf"
#define cIndex LoadPath()+"REAL\UTest.cdx"
PROCEDURE UCreateAdditionalBase()
Local nExist:=3
Local aAmounts:= {{"ID", "C", 22, 0}, ;
{"Grup", "C", 5,0},;
{"NNUM", "C", 13,0},;
{"BOM", "C", 30,0},;
{"DATE", "D", 8,0}}
nExist:=CheckIfBasesAlreadyExist()
DO CASE
CASE (nExist==1)
SayAndWait("Какая-либо из таблиц (или все) уже существует. Создание невозможно!!!")
CASE (nExist==0)
//Ветка создания баз данных
dbPush()
DbCreate (cAmounts,aAmounts)
Use (cAmounts) NEW
INDEX ON UPPER(AllTrim(Grup)+AllTrim(NNUM)+AllTrim(BOM))+ID TAG BOM TO (cIndex)
INDEX ON UPPER(AllTrim(Grup)+AllTrim(NNUM)+AllTrim(BOM))+Dtos(Date) TAG Date TO (cIndex)
Append Blank
UTEST->ID:=StepPlus()
UTEST->Grup:="00004"
UTEST->NNUM:="0000000000001"
UTEST->BOM:="0000000102"
UTEST->Date:=STod("20080810")
Append Blank
UTEST->ID:=StepPlus()
UTEST->Grup:="00004"
UTEST->NNUM:="0000000000001"
UTEST->BOM:="0000000102"
UTEST->Date:=STod("20080811")
DBCLOSEAREA()
DbPop()
//Проверка ошибок
CASE (nExist==3)
SayAndWait("Неопознанная ошибка")
ENDCASE
return
Function CheckIfBasesAlreadyExist()
Local nAlreadyExist:=3
//Local cFormuls:=LoadPath()+sPathToFormuls
If (File(cAmounts))
nAlreadyExist:=1
else
nAlreadyExist:=0
endif
//f:=2
return nAlreadyExist
Теперь создаем тестовую ситуацию, в которой используется таблица в режиме Shared, по нажатию ОК тестовая ситуация окончиться, спец-я UCreateTestSituation:
Код
CreateTest()
#define cAmounts LoadPath()+"REAL\UTest.dbf"
Procedure CreateTest()
DbPush()
USE (cAmounts) NEW Shared
SayAndWait("Нажмите ОК после теста")
DbCloseArea()
DbPop()
return
Далее собственно тест, где и будем использовать функцию NetErr(), которая описана в Хелпе. Ниже приведенный код будем запускать из другой копии программы, но той же самой БД, сп-я USTARTTEST:
Код
StartNettr()
#define cAmounts LoadPath()+"REAL\UTest.dbf"
Procedure StartNettr()
DBPUSH()
USE (cAmounts) Exclusive NEW
If NetErr()
SayAndWait("Ошибка сети")
else
DbCloseArea()
endif
DbPop()
return
Итак, в одном окне у нас запущена Спец-я №2, там висит сообщение "Нажмите ОК по окнончанию теста" мы естественно пока не нажимаем, а переходим ко 2му окну с БЕСТ-5.
Теперь здесь запускаем последнюю спецфункцию. По описанию, приведенному в хелпе по функции NetErr() при неудачной попытке исполнить
"USE (cAmounts) Exclusive NEW"
Функция должна возвратить .T. и тогда на экране мы увидим сообщение:
"Ошибка сети".
Запускаем. Видим ошибку БЕСТ-5:
"Ошибка открытия", как раз на строке "USE (cAmounts) Exclusive NEW"...
Подскажите, пожалуйста описание и пример, приведенные в справочном руководстве ошибочны??? Или я что-то неверно делаю?
1. Заходим в Производство->Учет производства->Работа с картотекой->Номенклатурный справочник. Создаем новую номенклатурную единицу-ПРОДУКЦИЮ.
2. Заходим в Производство->Учет производства->Работа с картотекой->Спецификация продукции. Создаем стандартную спецификацию, на вновь созданную продукцию (см. п. 1). Присваиваем ей статус Основная.
3. Открываем только что созданную спецификацию. Присваиваем ей статус Черновик, сохраняем (Кстати, тут по нажатию F10 нельзя сохранить, приходиться нажимать Tab, сохранять, закрывать)
4. Открываем Производство->Учет производства->Работа с картотекой->Номенклатурный справочник. УДАЛЯЕМ номенклатурную единицу, созданную в п. 1.
5. Теперь открываем Производство->Учет производства->Работа с картотекой->Спецификация продукции и пытаемся удалить Черновую спецификацую из п.3 (Нажимаем на ней F8, да)
6. ЧИТАЕМ:
"DELPHI: BADI.DLL
.....
....
Приложение: BASE
Код: 1081
Операция:+
Описание: Неверный аргумент"
Очень интересно. Вопрос: как удалить спецификацию???!!
Создать номенклатурную единицу вновь??!!
(Я удалил чз DBF Viewer)
Таких глюков просто полно...
На нашем предприятии один из сотрудников при работе с номенклатурным справочником производства ("Производство"->"Учет производства"->"Работа с картотекой"->"Номенклатурный справочник")
пользуется только одной из групп этого справочника. Другие группы его совершенно не интересуют. Приходиться постоянно ставить фильтр при открытии справочника.
Подскажите, как сделать этот фильтр для этого сотрудника фильтром по умолчанию?
Чтобы ему каждый раз не приходилось его ставить.
(Для сотрудника или роли прав доступа. Спецфункциями или настройками, как угодно, но как?)
Подскажите, пожалуйста, для чего используется поле Status таблицы zapas\mlabel.dbf? Что оно означает?
В технологическом описании этой таблицы об этом поле ничего не сказано (о том, какие значения принимает).
БЭСТ-5, 3.4, СП9
1. Запускаем XBA редактор.
2. В редакторе, в инспекторе, в папке PLN создаем файл U111.
3. Набираем код программы:
Код
MakeNZ()
Procedure MakeNZ()
Local bIsLocked:=.F.
select MRP
SayAndWait("We started")
bIsLocked:=DbLocked()
If bIsLocked
SayAndWait("Table is Blocked")
endif
return
4. Компилируем.
5. Заходим в производстве в планирование производства, план-график выпуска, нажимаем TAB, подключаем скомпилированный файл U111.hrb
6. Перезаходим в "План-график выпуска". Нажимаем TAB, запускаем новую спецфункцию.
7. На сообщение "We started" нажимаем ОК.
8. Читаем:
"Неисправная ошибка 253: Нет функции DbLocked() Вызов из функ: MAKENZ стр: 6"
"бла бла балабалал...."
9. Нажимаем ОК. Читаем 2:
"TfrmMainConsole.ApplicationExeprionMessage: Нарушение доступа по адресу 10031608 в модуле 'xwins.dll'. Чтение по адресу 00000004"
Я что-то неправильно сделал? Подскажите, пожалуйста. Из описания функции:
Цитата
Синтаксис
DbLocked() --> lIsFileLocked
Возвращаемое значение функции
Функция DbLocked() возвращает .T. (истина), если установлена блокировка для текущей рабочей области. Иначе возвращается .F. (ложь).
Описание
Функция DbLocked() используется для проверки того, что таблица или хранимая блокировка, установленная функцией FLock(), активна. Это не отражается на состоянии записи, установленной с функциями RLock() или DbRLock().
Критическая ошибка:
1. Запускаем БЕСТ
2. Меню Сервис->Запустить редактор XBA
3. Открываем папку MNF
4. Создать новый файл. Задаем имя, нажимаем СОЗДАТЬ.
( Попутно еще глюк: тут программа выдает запрос: "Файл с таким именем существует.Заменить на новый?" Хотя такого файла и в помине нет!!!!)
5. Нажимаем да. (на запрос)
6. Открывается файл. Наводим курсор на 1ю строку (мышью).
7. Нажимаем клавишу END.....
Все... бест рухнул... и редактор XBA и окно беста с открытой базой. Крит:
"Исключение неизвестное программное исключение (0х0eedfade) в приложении по адресу 0x7c81eb33".
Такое часто выходит, однако этот случай могу описать и такое всегда происходит.
1. Создаем ОКПП на 04й месяц.
2. Делаем "Потребность на склад" 10 шт продукции. Срок изготовления 31.04. Утверждаем.
3. Формируем НЗ, ЛЗК, выдаем по ним материалы.
4. Наступает первое мая. Начинаем делать НЗ. Ставим срок исполнения операции по НЗ 01.05, получаем сообщение: "Дата выполнения операции не соответствует дате наряд-задания."
И что же делать нашему бедному цеху? Довольно странная ситуация. Неужели на производстве не может быть случая задержки исполнения НЗ (выпуска продукции)?
1. Формируем ОКПП на 04 месяц. Создаем "Потребность на склад" 10 единиц
продукции.
2. Полный расчет.
3. Закрыли, "походили, покурили" и т.п.
4. Снова открыли ОКПП за 4й мес.
5. Вкладка "Потребность на склад". Создаем запись - 15 ед. продукции (другой).
6. Закрываем, утверждаем (Забыв при этом сделать повторный расчет ОКПП)....
Те 15ть ед продукции не попали в план.... (Хотя после утверждения можно их увидеть все на той же вкладке "Потребность на склад")
Во время пункта 3 мог еще и сформироваться сводный заказ (или наоборот УДАЛЕН, тогда к выпуску будет больше продукции, чем по дркументам), который так же не попал бы в ОКПП.
Однако, если полного расчета не делать ОКПП нельзя утвердить...
1. Формируем ОКПП на 04 месяц. Создаем "Потребность на склад" 10 единиц
продукции к выпуску на 15 число 4го месяца. Утверждаем.
2. Формируем ЛЗК
3. Формируем НЗ
4. Делаем отпуск материалов по ЛЗК, от 02.04.08.
5.Формируем отчет производства за период 01.04-07.04. Полный расчет.(Там все
пусто)
6. Списываем материалы (иначе его нельзя закрыть).
7. Закрываем отчет.
8. Исполняем НЗ 14м числом. 14м же числом приходуем продукцию на склад ГП.
9. Делаем отчет производства 08.04-15.04
10. Полный расчет. Получаем предупреждение о том, что
"Есть документы, не вошедшие в пр. отчет"
Все сотрудники совершили верные действия. Материалы выдали 02 числа, а продукцию выпустили 14го. Верно ее оприходовали, все действия совершили верно (Все остатки после списаний сходятся). Однако, теперь данное предупреждение будет выдаваться по всем последующим производственным отчетам!!!!
И получается, если будет допущена ошибка (например, моя тема на форуме с оприходованием НЗ задним числом) или все будет сделано верно пользователь будет получать данное предупреждение!