Если подключить этот файл в дизайнере приложений, думаю ошибок много меньше будет. На первый взгляд неясно почему компилятор так реагирует на классы. Описание объявлений классов, к стати есть и в справочнике. С классами компилятор работает при подключении 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->" - это "лишний мусор"?
Именно на этой строке сообщение об ошибке и получаю....!!!
Алексей Новиков пишет:
'm->' - это допустимое сокращение от 'memvar->'. То есть, 'm->' указывает компилятору, что следующий идентификатор является переменной.
Это . Это значит, что проблема не в том, что не существует алиас "m"...
Все равно неясно почему выходит ошибка с несуществующим алиасом... Кто-нибудь может подсказать какую таблицу открыть/создать и с каим алиасом?
Саак Шахламджян пишет:
Пытаюсь сделать хотя бы один документ прихода.
Подключаю файл ScladObj.prg.
Предупреждения компилятора при компиляции:
Цитата
Добрый день!
Не надо ничего подключать, все уже подключено.
Откуда Вы вызываете программу?
откуда я её только ни вызывал. Делал отдельную серую форму и новое меню Б-5. И из НЗ. И из журнала документов-учета движения учета производства. Этот самый алиас "MF_RPT" по-началу существует, но вот как раз на этой строке эта ошибка и выдается....
А откуда надо вызывать? К стати, в ходе моих "тыканий пальцем в небо" стал еще писать, что "Справочник операций пуст"+ по-прежнему алиас не существует... все на той же строке.
Может ли кто-нибудь дать исходный код 100% работающего плагина на демо базе с указанием где его подключать!!!??? Очень бы хотелось, чтобы это было либо оприходование ПФ-ГП готовой продукции, либо ПФ-ГП полуфабрикатов!!! (Я так понял они только отличаются свойством ScladDoc:CodeOper).
Саак Шахламджян пишет:
Цитата Александр Титов пишет:
Цитата
Саак Шахламджян пишет:
Пытаюсь сделать хотя бы один документ прихода.
Подключаю файл ScladObj.prg.
Предупреждения компилятора при компиляции:
Цитата
Добрый день!
Не надо ничего подключать, все уже подключено.
Откуда Вы вызываете программу?
откуда я её только ни вызывал. Делал отдельную серую форму и новое меню Б-5. И из НЗ. И из журнала документов-учета движения учета производства. Этот самый алиас "MF_RPT" по-началу существует, но вот как раз на этой строке эта ошибка и выдается....
А откуда надо вызывать? К стати, в ходе моих "тыканий пальцем в небо" стал еще писать, что "Справочник операций пуст"+ по-прежнему алиас не существует... все на той же строке.
Возьмите пример из хелпа, и вызовите его из реестра накладных например, вечером Константин подключится и поможет.
Александр Титов пишет:
Возьмите пример из хелпа, и вызовите его из реестра накладных например, вечером Константин подключится и поможет.
Пример из хелпа работает нормально!!! Файл ScladObj.prg вообще не нужно подключать, оказывется!!! Буду "тыкаться" с документами движения в "MF"
Главное, во-время понять....
Как только задаю свойство oDocs:Task := "MF" получаю эту самую ошибку нет Алиаса MF_RPT....
Т.е. вид движения оприход гот. продукции или полуфабрикатов сделать не получается ВООБЩЕ НИКАК!!!!!!!!!! ОСТАЛЬНОЕ со свойством oDocs:Task := "03" все ровно...
nordk пишет:
А Вы пробовали только из товаров или из производства ?
А если открыть требуемый алиас ?
Пробовал из производства только(плагин подключал, если Вы об этом).
АЛИАС ОТКРЫТ!!!!!!!!!!!!!!!!!!!!!!!!(таблица с этим алиасом...)
Это-то самое странное. Перед той строкой на которой получаю ошибку АЛИАС ОТКРЫТ!!!!!
P.S. Я готов "с нуля" все это написать!!! Только бы хотя бы "примерно" знать чего откуда и куда записывается. Просто очень очень нужно!!!
До сего момента можно было "интуитивно" понять что происходило в таблицах при той или иной операции. Но здесь, кажется слишком много действий!!!
Если поставить свойство oDoc:TypeEx := "0602", то ошибки с алиас нет. Проблема, как это ни странно возникала из-за этого свойства.... Хотя и при др. обстоят тоже...
Теперь возник др вопрос. Каксающийся метода ScladDoc:AddRow.
Дело в том, что при оприходовании продукции, должна быть указана выпускаемая продукция и продукция прихода. Но если записать так:
oDoc:AddRow("00014","0000000000001","Ш.01",,10)
То получим сообщение об ошибке:
"Не выбрана аналитика"
А в самой программе увидим, что указан только продукт прихода.
Вопрос как методом AddRow() указать продукцию выпуска??? (или как по-другому её указать?)
Догадка о том, что нужно указать cPrd_Grup, cPrd_NNUM, cPrd_Bom подтвердилась.
Документ оприход новой продукции сформировался УСПЕШНО!!!!!!!!
Вот. Теперь, наверное самое интересное, хотелось бы еще понять что же я делаю...
Волнует свойство oDoc:TypeEx := "0602". За что отвечает свойство TypeEx, где посмотреть каким оно еще бывает?
Я не просто из любоптсва спаршиваю. Дело в том, что у нас полностью измененный план счетов и другие проводки...
Поэтому попутно 2й . Верно ли то, что все манипуляции при создании такого документа не затрагивают проводки? (Т.е. они берутся из настроек и плана счетов)
Проводки затрагивают в соответствии с идеологией БЭСТа.
А именно Вы указываете код типовой операции и по этому принципу происходит формирование проводок.
Ничем создание накладной программно от непрограммно не отличается.
При попытке записать документ с уже существующим рег. номером (свойство NumDoc) ничего не происходит. Ни сообщений об ошибке ни создания нового документа, ни даже корректировка уже существующего. Т.е. при вводе документа с ошибочным номером метод RUN класса ScladDocs не возвращает никаких ошибок.
Из описания метода RUN:
"Метод RUN() возвращает массив, каждый элемент которого описывает результат попытки сохранения документа:
{lResult,::NNoper,::Sclad,::Vid,::Type,::TypeEx,::Date,::CodeDoc,::NumDoc, nRecNo}"
Я сделал такую запись:
oErr:=oDocs:Run().
oErr при неверном номере пуст. При удачной записи документа действительно в oErr попадает информация как сказано в описании. Но вот когда "ничего" не происходит, там пусто.... (У объектов документ и коллекция документов также в соотв полях никаких ошибок нет!!!)
Получается сообщений об ошибках нет, а запись не происходит...
Саак Шахламджян пишет:
За что отвечает свойство TypeEx, где посмотреть каким оно еще бывает?
Это не свойство, а поле таблицы или переменная.
Раньше тип движения у нас был один байт. С ростом БЭСТа в рамках БЭСТа стало тесно. Появилось поле расширение поля TYPE и его назвали TYPEEX.
Какие у нас имеются типы движения и какие у них значения этих полей смотрим в таблице MOVES
Саак Шахламджян пишет:
Т.е. при вводе документа с ошибочным номером метод RUN класса ScladDocs не возвращает никаких ошибок.
начните с определения понятия ошибочный номер.
Это равносильно требовать контроль скажем вид движения - вы загнали туда цифру, которой нет в moves.
И что с того ? Может Вам так надо.
Если уж вы занимаетесь программированием, то будьте любезны писать контроль за своими действиями.
Программа позволяет иметь одинаковые номера накладных.
Поскольку уникальность записи по составному индексному ключу.
Саак Шахламджян пишет:
Т.е. при вводе документа с ошибочным номером метод 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.
Есть еще один .
2 nordik: Только, пожалуйста не торопитесь отвечать на этот. Я просто много вопросов задал, не хотелось бы, чтобы хоть один пропал зря.
Описание:
При формировании ПСН из наряд-заданий в строках ПСН с изделиями есть поле NZ_ID. Если удалить такой документ, то в НЗ количество сданых изделий уменьшается.
А вот по какому принципу определяется принадлежность ПСН к производственным заказам я не понял. Но если удалить такой документ, то в производственных заказах количество сданой продукции также уменьшиться.
Суть проблемы:
Очень хотчется сделать свою табличку вместо НЗ. Сейчас формирование ПСН своей спецфункцией идет нормально (переписан реестр НЗ) и их удаление тоже. Но вот как быть, если будет введена новая таблица (меню называется "Запущенная продукция"/"продукция к производству")???!!! После удалени ПСН в таблице ведь изменений не буедт!!! Кроме того, будет еще 1но поле, требующее изменений. Можно было бы выкрутиться, например, закрыв "Оприходование ПФ-ГП" в журнале учета движений. Или просто поставить плагин на "перед удалением". НО!!!
НО это очень не нравиться!!!! Мягко говоря. Хотелось бы более "гарантированное" и изящное решение.
Вариант оставить НЗ (nz.dbf и остальные) не нравиться. Т.к. будет еще поле "статус" у "продукции к производству".
Очень понравилось использовать классы разработчиков. Очень и очень удобно, не хотелось бы придумывать велосипед, может есть что-то что может помочь?
1. Включаем режим отладки, точкой останова будет строка с DbPop(). Запустите плагин и посмотрите что будет в массиве oErr. Документ создается.
2. Потом запустите плагин второй раз и посмотрите содержимое oErr.
документ с номером 000195 второй раз не создался, ОДНАКО oErr ПУСТ!!! Записей в БД не прибавилось!!! Значит была ошибка, которая из описания метода RUN должна быть в oErr.
Дак все правильно !!!!
Записей и не должно прибавиться - она уже есть !!!!
Программа открыла документ на редактирование.
Обнаружила что запись такая есть.
Никаких изменений нет - делать ничего не надо.
А вот если Вы измените содержимое - посмотрите
Подождите Вы как-то смешиваете все.
Если наряд задания и ПСН это одно.
Если производственные заказы и ПСН это другое.
Для создания ПСН Вам по сути нужен механизм разузлования, по которому Вы собственно и сможете программно создавать свою ПСН.
Я правильно понимаю - Вас интересует функция, которая сделает разузлование ?
В случае наряд-задание - разузлование уже сделано причем пооперационное. И мы берем оттуда.
В случае производственных заказов - просто делается разузлование по заказу и формируется ПСН.
Дак все правильно !!!!
Записей и не должно прибавиться - она уже есть !!!!
Программа открыла документ на редактирование.
Обнаружила что запись такая есть.
Никаких изменений нет - делать ничего не надо.
А вот если Вы измените содержимое - посмотрите
А вот и нет!!!
Во-первых. Перед повторным запуском поменяйте содержимое. Результат будет тотже самый!!!
Во-вторых. Даже если и так, почему нет "сообщения" об ошибке в oErr, возвращаемым методом Run? Тем более, что было бы "по здравому" смыслу его выдавать! Например, с сообщением, что такой номер уже есть....