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

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

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


Форум

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

Страницы: Пред. 1 ... 10 11 12 13 14 15 16 17 18 19 20 ... 24 След.
Нажатие Enter в InitList
 
Цитата

Либо aheads либо SETKEY()
А зачем Вам диалог - аHeads гораздо мощнее на мой взгляд

Мне он как-то изначально показался слишком громоздким. Предусловия, постусловия.... Я даже и не вспомнил про него... Куда свой код "впихнуть" после ввода. Как-то не очень удобно...
Кроме того, кажется, если aheads указан, то пользователь может ввести новую запись (или можно F4 "отключить", сейчас даже и не помню)
Изменено: Саак Шахламджян - 01.11.2008 14:54:34
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
Цитата

Подождите Вы как-то смешиваете все.
Если наряд задания и ПСН это одно.
Если производственные заказы и ПСН это другое.

Для создания ПСН Вам по сути нужен механизм разузлования, по которому Вы собственно и сможете программно создавать свою ПСН.

Я правильно понимаю - Вас интересует функция, которая сделает разузлование ?
В случае наряд-задание - разузлование уже сделано причем пооперационное. И мы берем оттуда.
В случае производственных заказов - просто делается разузлование по заказу и формируется ПСН.

Наверное, именно она интересует. Даже не знаю.
Скорее даже интересует создание_собственного/изменение_существующего механизма разузлования.
Изменено: Саак Шахламджян - 01.11.2008 14:50:55
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
Цитата

Дак все правильно !!!!
Записей и не должно прибавиться - она уже есть !!!!
Программа открыла документ на редактирование.
Обнаружила что запись такая есть.
Никаких изменений нет - делать ничего не надо.
А вот если Вы измените содержимое - посмотрите

А вот и нет!!!
Во-первых. Перед повторным запуском поменяйте содержимое. Результат будет тотже самый!!!

Во-вторых. Даже если и так, почему нет "сообщения" об ошибке в oErr, возвращаемым методом Run? Тем более, что было бы Хорошо "по здравому" смыслу его выдавать! Например, с сообщением, что такой номер уже есть....
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
Есть еще один Вопрос.
2 nordik: Только, пожалуйста не торопитесь отвечать на этот. Я просто много вопросов задал, не хотелось бы, чтобы хоть один пропал зря.
Описание:
При формировании ПСН из наряд-заданий в строках ПСН с изделиями есть поле NZ_ID. Если удалить такой документ, то в НЗ количество сданых изделий уменьшается.
А вот по какому принципу определяется принадлежность ПСН к производственным заказам я не понял. Но если удалить такой документ, то в производственных заказах количество сданой продукции также уменьшиться.
Суть проблемы:
Очень хотчется сделать свою табличку вместо НЗ. Сейчас формирование ПСН своей спецфункцией идет нормально (переписан реестр НЗ) и их удаление тоже. Но вот как быть, если будет введена новая таблица (меню называется "Запущенная продукция"/"продукция к производству")???!!! После удалени ПСН в таблице ведь изменений не буедт!!! Кроме того, будет еще 1но поле, требующее изменений.

Можно было бы выкрутиться, например, закрыв "Оприходование ПФ-ГП" в журнале учета движений. Или просто поставить плагин на "перед удалением". НО!!!
НО это очень не нравиться!!!! Мягко говоря. Хотелось бы более "гарантированное" и изящное решение.
Вариант оставить НЗ (nz.dbf и остальные) не нравиться. Т.к. будет еще поле "статус" у "продукции к производству".

Очень понравилось использовать классы разработчиков. Очень и очень удобно, не хотелось бы придумывать велосипед, может есть что-то что может помочь?
Оптимизация справочника БАНКОВ в БЭСТ-5 3.4 и связка с bnkseek.dbf
 
Цитата
itman пишет:
Итак, по порядку.
Доступ следует ограничить для запуска, в случае использования терминального подключения и расположения библиотеки в общедоступной папке client\bin.

У нас не терминальный режим, но этот Вопрос тоже интересует. (чтобы "лишних" меню не было у др пользователей)
Цитата

По поводу того, что класть утилиту в одну папку на одной станции - в данном случае запуск функций РАЗОВЫЙ, совсем не за чем делать запуск кому-то, кроме администратора, для других случаев следует править код.

У нас просто уже появилась новая менюшка. С ней 3 человека работает. С 3х разных клиентских машин, поэтому для нас это актуально.
Цитата

По поводу поддержания "свежести" библиотек разработчика:
ПРАВИЛО - размещать свои проекты в папке - \BEST5_34\Server\DATA\Pro\userlibs\
В этом случае, при запуске клиента библиотека ляжет в папку Client\Bin\userlibs
В этом случае не надо обновлять клиентов, все будет происходить автоматом, bdll rc файлы автоматом копируются и загружаются в память при запуске клиента Б5.

При использовании такой схемы следует откорректировать путь в userbdll.txt, который размещается в корневой папке базы данных.

По-моему, вообще, проще всего ставить Бэст в ДЕмо-режиме на отдельной машине, а все плагины и длл уже в рабочую базу подбрасывать, как я и делаю.
Оптимизация справочника БАНКОВ в БЭСТ-5 3.4 и связка с bnkseek.dbf
 
Цитата
itman пишет:
Если библиотека будет лежать на сервере, следует предусмотреть функцию, ограничивающую доступ.

Доступ к чему? К dll'ке или нововведенным функциям-менюшкам?
По поводу ограничений для вновь введенных меню разработчики обещали дать возможность ставить ограничения на доступ через менеджера пользователей.
А вот по поводу того, чтобы класть эту длл в папку клиент на сервере не совсем понятно каким образом она к остальным попадет.
Я, кстати собирался об этом спросить. Дело в том, что для того, чтобы написанная dll работала у всех надо на каждой клиентской машине её ставить. Ну, это еще пол беды. Один раз такое сделать можно. А вот что делать если эту дллку обновили? Каждый раз после внесения изменений придется по новой всем таскать эту длл... Это не очень-то удобно, даже в случае полного доступа по сети к папке bin всех клиентских машин.
Изменено: Саак Шахламджян - 31.10.2008 17:06:55
Нажатие Enter в InitList
 
Сделал так:
Код
   bBlock:=setkey(13,)
   nTemp:=Dialog('Необходимо указать количество изделий      ','9999',0,'Готовых изделий',,,'gr+/b*,n/w')
   setkey(13,bBlock)

Вроде бы нареканий не вызывает. Если есть способ лучше, я бы от него не отказался.
Изменено: Саак Шахламджян - 31.10.2008 16:17:32
Нажатие Enter в InitList
 
У меня в initList параметр aHeads (массив описания области ввода) опущен. Setkey на 13 не стоит и не хочется. Каждый раз по нажатию Enter InitList прекращает свою работу.
Может быть можно "повесить" на Enter (13) что-инбудь такое, чтобы работала ф-я ввода (Dialog) и не "вылетал" initlist? Я пытался повесить "пустое" дествие:
SETKEY(13,{||sIdPartner:=sIdPartner,1}) или SETKEY(13,{||.T.,1}) InitList не прекращает работу. Однако пи вызове Dialog, enter естественно "не срабатывает".
Просто постоянно "мыкаться" с SavetSetkey из-за одной клавиши не хочется.
Описание параметров DIALOG(параметры)
 
Цитата
nordk пишет:
На одной из тем форума было подробное описание функции Dialog. Но второй параметр нагляден и по хелпу.

Странно как-то. Хелп смотрел, такой вариант:
DIALOG("Введите скидку:","9999",0) пробовал, он почему-то "не пошёл"(введенные данные были как симв строка), сейчас все работает так как надо...
Изменено: Саак Шахламджян - 31.10.2008 15:33:00
Функция WDoc() не работает при компиляции в Диз приложений.
 
Функция WDoc() не работает в проектах, написанных в дизайнере приложений. Бест при подключении дллки с этой ф-ии выдает ошибку что нет такой.
Использовал её также как и в примере:
oDoc:NumDoc:=MDoc->(WDoc('NumDoc',UPPER(pSclad+pVid+pType+oDoc:CodeDoc))). В плагинах, написанных в XBA редакторе работает.
Может быть нужно длл подгрузить какую-нибудь. Если да, то какую???
Если нет, то хотелось бы узнать есть ли аналог или принцип её работы, чтобы полностью повторить её работу.
И самый главный Вопрос: "обходит" ли данная функция возможность одновременного получения одного и того же номера?
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
Цитата
nordk пишет:
Саак а можно попросить контрольный пример небольшой в котором это не работает ?
Давайте сделаем простенькую функцию,которую я смогу у себя откомпилировать и посмотреть ?. Обещаю детально разобраться и попросить исправить в КБ, если это будет ошибкой , либо прокомментирую: что не так делаете...
Без примера сложновато понимать.
По предыдущим Вашим сообщениям я так понял, что создавать документы в принципе у Вас получилось, не получается какой-то конкретный момент...

Разумеется можно!!!
Контрольный пример для демо-базы (хозрасчетная). Плагин подключается в журнале учета движения. В виде движения Оприходование ПФ-ГП.
Вот код:
Код
OprixodINDEMO()
STATIC PROCEDURE OprixodINDEMO()
LOCAL oDoc,oDocs,oErr
DbPush()
oDocs := ScladDocs():New()
        oDocs:Hidden := 2
        oDocs:Task := "MF"

        oDoc := ScladDoc():New()
        oDoc:CodeOper := "0002"   // Код типовой операции
        oDoc:Vid := "1"           // Направление движения --- приход
        oDoc:Type := "?"          // Код вида движения:
        oDoc:TypeEx := "0602"       // оприходование полуфабрикатов в производстве
        oDoc:Sclad := "Гот.пр"    // Склад
        oDoc:CodeDoc := "001"     // Вид документа
        oDoc:NumDoc:="000195"
        oDoc:AGENTCODE:="100001"

        oDoc:AddRow("00014","0000000000001","Ш.01",,10,/*cEd1*/,/*nR*/,/*cNNOPERM*/,/*aAuto*/,/*aSerNo*/,;
                     "00014","0000000000001","Ш.01")  

        oDocs:AddDoc(oDoc)
        oErr:=oDocs:Run()
altd()
DbPop()
return


После компиляции и подключения
1. Включаем режим отладки, точкой останова будет строка с DbPop(). Запустите плагин и посмотрите что будет в массиве oErr. Документ создается.
2. Потом запустите плагин второй раз и посмотрите содержимое oErr.
документ с номером 000195 второй раз не создался, ОДНАКО oErr ПУСТ!!! Записей в БД не прибавилось!!! Значит была ошибка, которая из описания метода RUN должна быть в oErr.
Изменено: Саак Шахламджян - 31.10.2008 15:00:18
Описание параметров DIALOG(параметры)
 
В справочнике по Б-4 параметров у DIALOG всего лишь 3 штуки, да и те, кажется не описаны.
На старом форуме есть примеры с использованием DIALOG.
Очень бы хотелось DILAOGOM запросить у пользователя целое число (только не в виде текстовой строки - так совсем не интересно), т.е. формат ввода - целое число.

Сейчас при попытках запроса:
Dialog('Необходимо указать количество изделий ','',55,'Готовых изделий',,,'gr+/b*,n/w')

В любом случае можно вводить дробные десятичные. Даже если вместо 55 поставить переменную целую.
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
Цитата
nordk пишет:



Цитата

Саак Шахламджян пишет:
Т.е. при вводе документа с ошибочным номером метод RUN класса ScladDocs не возвращает никаких ошибок.

начните с определения понятия ошибочный номер.
Это равносильно требовать контроль скажем вид движения - вы загнали туда цифру, которой нет в moves.
И что с того ? Может Вам так надо.
Если уж вы занимаетесь программированием, то будьте любезны писать контроль за своими действиями.
Программа позволяет иметь одинаковые номера накладных.
Поскольку уникальность записи по составному индексному ключу.

Похоже, Вы не поняли. Запись как раз и не создается. Раз запись не создается, значит есть какая-то ошибка. Раз есть ошибка она должна выводиться методом RUN в массив, но она не выводиться. ВОПРОС ПОЧЕМУ?
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
При попытке записать документ с уже существующим рег. номером (свойство NumDoc) ничего не происходит. Ни сообщений об ошибке ни создания нового документа, ни даже корректировка уже существующего. Т.е. при вводе документа с ошибочным номером метод RUN класса ScladDocs не возвращает никаких ошибок.
Из описания метода RUN:
"Метод RUN() возвращает массив, каждый элемент которого описывает результат попытки сохранения документа:
{lResult,::NNoper,::Sclad,::Vid,::Type,::TypeEx,::Date,::CodeDoc,::NumDoc, nRecNo}"

Я сделал такую запись:
oErr:=oDocs:Run().
oErr при неверном номере пуст.
При удачной записи документа действительно в oErr попадает информация как сказано в описании. Но вот когда "ничего" не происходит, там пусто.... (У объектов документ и коллекция документов также в соотв полях никаких ошибок нет!!!)

Получается сообщений об ошибках нет, а запись не происходит...
Изменено: Саак Шахламджян - 28.10.2008 11:23:58
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
Посмотрел формат AddRow(). Он такой:
METHOD AddRow(cGrup,cNNum,cMDim,cPartia,nKolOut,cEd1,nR,cNNOPERM,aAuto,aSerNo,; //10
cPrd_Grup, cPrd_NNUM, cPrd_Bom, cDef_Grup, cDef_NNUM, cDef_mDim, cNZ_ID, cCommentM )


Догадка о том, что нужно указать cPrd_Grup, cPrd_NNUM, cPrd_Bom подтвердилась.
Документ оприход новой продукции сформировался УСПЕШНО!!!!!!!! :super:
Вот. Теперь, наверное самое интересное, хотелось бы еще понять что же я делаю...
Волнует свойство oDoc:TypeEx := "0602". За что отвечает свойство TypeEx, где посмотреть каким оно еще бывает?
Я не просто из любоптсва спаршиваю. Дело в том, что у нас полностью измененный план счетов и другие проводки...
Поэтому попутно 2й Вопрос. Верно ли то, что все манипуляции при создании такого документа не затрагивают проводки? (Т.е. они берутся из настроек и плана счетов)
Изменено: Саак Шахламджян - 28.10.2008 10:21:40
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
Если поставить свойство oDoc:TypeEx := "0602", то ошибки с алиас нет. Проблема, как это ни странно возникала из-за этого свойства.... Хотя и при др. обстоят тоже...
Теперь возник др вопрос. Каксающийся метода ScladDoc:AddRow.
Дело в том, что при оприходовании продукции, должна быть указана выпускаемая продукция и продукция прихода. Но если записать так:
oDoc:AddRow("00014","0000000000001","Ш.01",,10)
То получим сообщение об ошибке:
"Не выбрана аналитика"
А в самой программе увидим, что указан только продукт прихода.
Вопрос как методом AddRow() указать продукцию выпуска??? (или как по-другому её указать?)
Изменено: Саак Шахламджян - 28.10.2008 09:57:02
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
Цитата
nordk пишет:
А Вы пробовали только из товаров или из производства ?
А если открыть требуемый алиас ?

Пробовал из производства только(плагин подключал, если Вы об этом).
АЛИАС ОТКРЫТ!!!!!!!!!!!!!!!!!!!!!!!!(таблица с этим алиасом...)
Это-то самое странное. Перед той строкой на которой получаю ошибку АЛИАС ОТКРЫТ!!!!!

P.S. Я готов "с нуля" все это написать!!! Только бы хотя бы "примерно" знать чего откуда и куда записывается. Просто очень очень нужно!!!
До сего момента можно было "интуитивно" понять что происходило в таблицах при той или иной операции. Но здесь, кажется слишком много действий!!!
Изменено: Саак Шахламджян - 28.10.2008 09:15:45
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
Как только задаю свойство oDocs:Task := "MF" получаю эту самую ошибку нет Алиаса MF_RPT....
Т.е. вид движения оприход гот. продукции или полуфабрикатов сделать не получается ВООБЩЕ НИКАК!!!!!!!!!! ОСТАЛЬНОЕ со свойством oDocs:Task := "03" все ровно...
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
Цитата
Александр Титов пишет:
Возьмите пример из хелпа, и вызовите его из реестра накладных например, вечером Константин подключится и поможет.

Пример из хелпа работает нормально!!! Файл ScladObj.prg вообще не нужно подключать, оказывется!!! Буду "тыкаться" с документами движения в "MF"
Главное, во-время понять....
Изменено: Саак Шахламджян - 27.10.2008 15:39:07
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
Цитата
Александр Титов пишет:



Цитата

Саак Шахламджян пишет:
Пытаюсь сделать хотя бы один документ прихода.
Подключаю файл ScladObj.prg.
Предупреждения компилятора при компиляции:
Цитата

Добрый день!
Не надо ничего подключать, все уже подключено.
Откуда Вы вызываете программу?

откуда я её только ни вызывал. Делал отдельную серую форму и новое меню Б-5. И из НЗ. И из журнала документов-учета движения учета производства. Этот самый алиас "MF_RPT" по-началу существует, но вот как раз на этой строке эта ошибка и выдается....
А откуда надо вызывать? К стати, в ходе моих "тыканий пальцем в небо" стал еще писать, что "Справочник операций пуст"+ по-прежнему алиас не существует... все на той же строке.

Может ли кто-нибудь дать исходный код 100% работающего плагина на демо базе с указанием где его подключать!!!??? Очень бы хотелось, чтобы это было либо оприходование ПФ-ГП готовой продукции, либо ПФ-ГП полуфабрикатов!!! (Я так понял они только отличаются свойством ScladDoc:CodeOper).
Изменено: Саак Шахламджян - 27.10.2008 15:30:47
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
Цитата
Алексей Новиков пишет:
'm->' - это допустимое сокращение от 'memvar->'. То есть, 'm->' указывает компилятору, что следующий идентификатор является переменной.

Это Хорошо. Это значит, что проблема не в том, что не существует алиас "m"...
Все равно неясно почему выходит ошибка с несуществующим алиасом... Кто-нибудь может подсказать какую таблицу открыть/создать и с каим алиасом?
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
Интересно, а что это за таблица "m"? Я так понимаю запись вида m->B6_PRO_PATH воспринимается как обращение к полю B6_PRO_PATH таблицы "m"? Такого алиаса конечно же у меня нет.... Или запись "m->" - это "лишний мусор"?
Именно на этой строке сообщение об ошибке и получаю....!!!

RunBlueForm(.T.,cBlock,m->B6_PRO_PATH,m->LBL_GUID ,IF(LISSELFMACHINESRV,'.T.','.F.'), B6_EXE_PATH, ;
m->B6_DBF_PATH, m->B6_TMP_PATH, m->B6_USER_IDENT, '',B6_ROLE_GUID,cIdSubsystemActiveForm, ;
::Task, cIdSubsystemActiveForm, cIDStartNodeActiveForm)

SOS!!!
Изменено: Саак Шахламджян - 27.10.2008 14:02:38
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
Скомпилировать кое-как удалось. #include "ScladObj.prg"
перенес в конец файла. Добавил CREATE при объявлении классов. Добавил <"Имя класса">: перед описанием методов.
Теперь при исполнении получаю следующую ошибку:
Операция MF_RPT
Описание: Алиас не существует.
"Под отладчиком" нашел происходит на:
RunBlueForm(.T.,cBlock,m->B6_PRO_PATH,m->LBL_GUID ,IF(LISSELFMACHINESRV,'.T.','.F.'), B6_EXE_PATH, ;
m->B6_DBF_PATH, m->B6_TMP_PATH, m->B6_USER_IDENT, '',B6_ROLE_GUID,cIdSubsystemActiveForm, ;
::Task, cIdSubsystemActiveForm, cIDStartNodeActiveForm)

В методе Run. А где какой алиас и что еще посмотреть честно говоря не знаю. Смущает одно название ф-ии RunBlueForm...
Запись в таблицы Бэста средствами foxpro
 
Цитата
nordk пишет:
У меня по примеру все работает прекрасно.
Давайте Ваш код и будем смотреть что Вы делаете не так.

Пожалуйста:
Код
#include "ScladObj.prg"
Oprixod()
PROCEDURE Oprixod()
Local oDocs
Local oDoc
        oDocs := ScladDocs():New()
        oDocs:Hidden := 3
        oDocs:Task := "MF"

        oDoc := ScladDoc:New()
        oDoc:CodeOper := "0001"   // Код типовой операции
        oDoc:Vid := "1"           // Направление движения --- приход
        oDoc:Type := "?"          // Код вида движения:
        oDoc:Type := "0602"       // оприходование полуфабрикатов в производстве
        oDoc:Sclad := "Гот.пр"    // Склад
        oDoc:CodeDoc := "001"     // Вид документа
        oDoc:Part_type := '1'     // Тип контрагента --- партнер
        oDoc:Part_CODE := "000002"// Код контрагента

        oDoc:AddRow("00005","0000000001080","Дуб",,10)  // Добавляются строки
        oDoc:AddRow("00005","0000000001081","Дуб",,10)


//     3) Указываем, что по этому объекту нужно создать новый документ

        oDocs:AddDoc(oDoc) // Указываем, что по этому объекту создается новый документ

//     4) Выполняем:

        oDocs:Run()
return


oDoc := ScladDoc:New() можно поправить на oDoc := ScladDoc():New() как я понимаю...
Скомпилировать удалось, я правда все-таки кое-что по-своему написал...

#include "ScladObj.prg" перенес в самый конец кода. и ошибка unreachable код пропала. там где объявления классов добавил CREATE, методам добавил <"имя класса">:...

З. Ы. Предлагаю перейти в другую тему. Я отдельную создал.
Изменено: Саак Шахламджян - 27.10.2008 13:06:34
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
Пытаюсь сделать хотя бы один документ прихода.
Подключаю файл ScladObj.prg.
Предупреждения компилятора при компиляции:
Цитата

W0001: Неоднозначная ссылка: ODOCOBJ ScladObj.prg[795]//много штук...
W0028: Далее код не используется(Unreachable code) //строка №2
W0001: Неоднозначная ссылка: SCLADDOC

Код с нумерацией строк:
Код
1. #include "ScladObj.prg"
2. Oprixod()
3. PROCEDURE Oprixod()
4. Local oDocs
5. Local oDoc
6. oDocs := ScladDocs():New()
7. oDocs:Hidden := 3
8. oDocs:Task := "MF"
9. oDoc := ScladDoc:New()
..........

Если подключить этот файл в дизайнере приложений, думаю ошибок много меньше будет. На первый взгляд неясно почему компилятор так реагирует на классы. Описание объявлений классов, к стати есть и в справочнике. С классами компилятор работает при подключении 2х файлов
"hbclass.ch" и "BO_Const.ch", думаю все дело в них.
В том виде в котором есть ScladObj.prg не работает.

Пытался его изменить по подобию того как "сам объявлял классы" (методом тыка нашел приемлемый для коплятора синтаксис), ожднако тоже по каким-то неясным пока причинам компиляция не пошла....
Страницы: Пред. 1 ... 10 11 12 13 14 15 16 17 18 19 20 ... 24 След.