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

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

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


Главная  / Поддержка  / Форум  / Публичные форумы  / Программирование приложений  / Создание документов прихода/расхода.

Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1 2 3 След.
RSS
Создание документов прихода/расхода., Практическое применение классов разработчиков.
 
Пытаюсь сделать хотя бы один документ прихода.
Подключаю файл 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 не работает.

Пытался его изменить по подобию того как "сам объявлял классы" (методом тыка нашел приемлемый для коплятора синтаксис), ожднако тоже по каким-то неясным пока причинам компиляция не пошла....
 
Скомпилировать кое-как удалось. #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...
 
Интересно, а что это за таблица "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
 
'm->' - это допустимое сокращение от 'memvar->'. То есть, 'm->' указывает компилятору, что следующий идентификатор является переменной.
С уважением, Новиков Алексей.
 
Цитата
Алексей Новиков пишет:
'm->' - это допустимое сокращение от 'memvar->'. То есть, 'm->' указывает компилятору, что следующий идентификатор является переменной.

Это Хорошо. Это значит, что проблема не в том, что не существует алиас "m"...
Все равно неясно почему выходит ошибка с несуществующим алиасом... Кто-нибудь может подсказать какую таблицу открыть/создать и с каим алиасом?
 
Цитата
Саак Шахламджян пишет:
Пытаюсь сделать хотя бы один документ прихода.
Подключаю файл ScladObj.prg.
Предупреждения компилятора при компиляции:
Цитата

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



Цитата

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

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

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

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




Цитата



Саак Шахламджян пишет:

Пытаюсь сделать хотя бы один документ прихода.

Подключаю файл ScladObj.prg.

Предупреждения компилятора при компиляции:

Цитата



Добрый день!

Не надо ничего подключать, все уже подключено.

Откуда Вы вызываете программу?

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

А откуда надо вызывать? К стати, в ходе моих "тыканий пальцем в небо" стал еще писать, что "Справочник операций пуст"+ по-прежнему алиас не существует... все на той же строке.

Возьмите пример из хелпа, и вызовите его из реестра накладных например, вечером Константин подключится и поможет.
 
Цитата
Александр Титов пишет:
Возьмите пример из хелпа, и вызовите его из реестра накладных например, вечером Константин подключится и поможет.

Пример из хелпа работает нормально!!! Файл ScladObj.prg вообще не нужно подключать, оказывется!!! Буду "тыкаться" с документами движения в "MF"
Главное, во-время понять....
Изменено: Саак Шахламджян - 27.10.2008 15:39:07
 
Как только задаю свойство oDocs:Task := "MF" получаю эту самую ошибку нет Алиаса MF_RPT....
Т.е. вид движения оприход гот. продукции или полуфабрикатов сделать не получается ВООБЩЕ НИКАК!!!!!!!!!! ОСТАЛЬНОЕ со свойством oDocs:Task := "03" все ровно...
 
А Вы пробовали только из товаров или из производства ?
А если открыть требуемый алиас ?
 
Цитата
nordk пишет:
А Вы пробовали только из товаров или из производства ?
А если открыть требуемый алиас ?

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

P.S. Я готов "с нуля" все это написать!!! Только бы хотя бы "примерно" знать чего откуда и куда записывается. Просто очень очень нужно!!!
До сего момента можно было "интуитивно" понять что происходило в таблицах при той или иной операции. Но здесь, кажется слишком много действий!!!
Изменено: Саак Шахламджян - 28.10.2008 09:15:45
 
Если поставить свойство oDoc:TypeEx := "0602", то ошибки с алиас нет. Проблема, как это ни странно возникала из-за этого свойства.... Хотя и при др. обстоят тоже...
Теперь возник др вопрос. Каксающийся метода ScladDoc:AddRow.
Дело в том, что при оприходовании продукции, должна быть указана выпускаемая продукция и продукция прихода. Но если записать так:
oDoc:AddRow("00014","0000000000001","Ш.01",,10)
То получим сообщение об ошибке:
"Не выбрана аналитика"
А в самой программе увидим, что указан только продукт прихода.
Вопрос как методом AddRow() указать продукцию выпуска??? (или как по-другому её указать?)
Изменено: Саак Шахламджян - 28.10.2008 09:57:02
 
Посмотрел формат 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
 
Проводки затрагивают в соответствии с идеологией БЭСТа.
А именно Вы указываете код типовой операции и по этому принципу происходит формирование проводок.
Ничем создание накладной программно от непрограммно не отличается.
Изменено: nordk - 28.10.2008 10:25:04
 
При попытке записать документ с уже существующим рег. номером (свойство 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
 
Цитата
Саак Шахламджян пишет:
За что отвечает свойство TypeEx, где посмотреть каким оно еще бывает?

Это не свойство, а поле таблицы или переменная.
Раньше тип движения у нас был один байт. С ростом БЭСТа в рамках БЭСТа стало тесно. Появилось поле расширение поля TYPE и его назвали TYPEEX.
Какие у нас имеются типы движения и какие у них значения этих полей смотрим в таблице MOVES
Изменено: nordk - 28.10.2008 13:20:29
 
Цитата
Саак Шахламджян пишет:
Т.е. при вводе документа с ошибочным номером метод RUN класса ScladDocs не возвращает никаких ошибок.

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



Цитата

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

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

Похоже, Вы не поняли. Запись как раз и не создается. Раз запись не создается, значит есть какая-то ошибка. Раз есть ошибка она должна выводиться методом RUN в массив, но она не выводиться. ВОПРОС ПОЧЕМУ?
 
Саак а можно попросить контрольный пример небольшой в котором это не работает ?
Давайте сделаем простенькую функцию,которую я смогу у себя откомпилировать и посмотреть ?. Обещаю детально разобраться и попросить исправить в КБ, если это будет ошибкой , либо прокомментирую: что не так делаете...
Без примера сложновато понимать.
По предыдущим Вашим сообщениям я так понял, что создавать документы в принципе у Вас получилось, не получается какой-то конкретный момент...
 
Цитата
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
 
Есть еще один Вопрос.
2 nordik: Только, пожалуйста не торопитесь отвечать на этот. Я просто много вопросов задал, не хотелось бы, чтобы хоть один пропал зря.
Описание:
При формировании ПСН из наряд-заданий в строках ПСН с изделиями есть поле NZ_ID. Если удалить такой документ, то в НЗ количество сданых изделий уменьшается.
А вот по какому принципу определяется принадлежность ПСН к производственным заказам я не понял. Но если удалить такой документ, то в производственных заказах количество сданой продукции также уменьшиться.
Суть проблемы:
Очень хотчется сделать свою табличку вместо НЗ. Сейчас формирование ПСН своей спецфункцией идет нормально (переписан реестр НЗ) и их удаление тоже. Но вот как быть, если будет введена новая таблица (меню называется "Запущенная продукция"/"продукция к производству")???!!! После удалени ПСН в таблице ведь изменений не буедт!!! Кроме того, будет еще 1но поле, требующее изменений.

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

Очень понравилось использовать классы разработчиков. Очень и очень удобно, не хотелось бы придумывать велосипед, может есть что-то что может помочь?
 
Цитата
1. Включаем режим отладки, точкой останова будет строка с DbPop(). Запустите плагин и посмотрите что будет в массиве oErr. Документ создается.
2. Потом запустите плагин второй раз и посмотрите содержимое oErr.
документ с номером 000195 второй раз не создался, ОДНАКО oErr ПУСТ!!! Записей в БД не прибавилось!!! Значит была ошибка, которая из описания метода RUN должна быть в oErr.

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

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

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

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

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

Во-вторых. Даже если и так, почему нет "сообщения" об ошибке в oErr, возвращаемым методом Run? Тем более, что было бы Хорошо "по здравому" смыслу его выдавать! Например, с сообщением, что такой номер уже есть....
Страницы: 1 2 3 След.
Читают тему (гостей: 1)