Дмитрий Шлыков пишет:
Добрый день!
Нет таких данных в таблицах нет. Они передаются в отчет разработчиком из переменных.
Как это сделать я думаю Вам лучше подскажут на форуме по программированию.
Похоже, на форуме программирования никто этого не знает. Может быть, Вы всё-таки поделитесь секретом?
nordk пишет:
Только редактирования. За изменением количества строк можно проследить и убить документ
Интересно каким образом!????
"шерстить" Таблицу Mdocm.dbf, посчитав сколько строк записалось после сохранения??? Вам это извращением не кажется ли???
ИМХО в 1000 раз проще и правильнее было бы дать параметр прав доступа в классе oDoc (дополнительный параметр), либо, делать распечатку по-другому, что еще более правильнее в данном случае!!!!
(В объекте oDocs:ITEM: ничего не меняется после добвлений строк пользователем!!! Ни в объекте oErr:=Run() нет сведений о колич строк)
nordk пишет:
Я вообще не понимаю о чем нулевом Вы пишете....Если есть остаток - значит отгружаем, если нет значит не отгружаем...Штатные ы..Ничего не понимаю что Вы хотите уточнить
Н-де. Придётся с самого начала, вкратце. Давайте по порядку:
У нас есть таблица. Назовем её Amounts.
При создании сводного заказа создаются и строки в нашей таблице Amounts. С тем, чтобы связать строки заказа с производством.
При оприходовании ГП-Товар изменяется строка в Amounts, которая "помечается" как готовая (неважно как). Тперь же Вы предлагаете к этой строке приписать ROWID партии, которая была оприходована в движении ГП-Товар, верно я Вас понял??? (именно той партии, которая была создана при оприход ГП-товар)
nordk пишет:
Авторизация пользователю позволяет документ редактировать ?
Вопрос авторизации пользователя в данном случае считаю абсолютно неуместным. Речь идет об автоматическом создании документов, куда пользаватель не должен вмешиваться!!!
А мы ему это позволяем для распечатки!!!
Регулированием прав здесь ситуаци не разрешить.
Но специально для Вас я попытался это сделать. Ничего не вйдет,
смотрите почему:
Вопрос 1. Чтобы закрыть вмешательство пользователя (П.) в автоматически созданный документ придется
а) лишить его всех прав: создание, редактир, удаление в определенном виде движения, верно?
Но это противоречит б) и в):
б) Пользователь должен иметь возможность удалять документы. Но в Б-5 право на удаление документа и удаление строки документа - это одно и тоже => мы лишим П. возможности удалять документа!
Дело в том, что пользователь может удалять документы
в) Если у П. нет прав на создание, то он, собственно не сможет сохранить данный документ. Если же это право у него есть, то он сможет добавить лишнюю строку в формируемый нами документ...
(опять же по причине того, что создание строки и создание документа в Б-5 - это одно и тоже)
Надеюсь, по вопросу 1 я Вас убедил?
Как всегда на один вопрос ответите, а остальных как бы и не было... Всегда по 2-3 раза приходиться все вопросы писать.
Вопрос 2 А что с перемынными для Print_FastReport(Category,ReportTemplate,Preview) делать?
Вопрос 3 И Возможно ли вызвать то меню, которое я указал выше?
Что-то совсем как-то тихо в этой теме стало. А данный начал очень тесно переплетается, например, с формированием собственных складских документов...
Единственный предложенный способ для распечатки документов - это сделать oDoc:Hidden := 1 при формировании объекта-документа. Это просто ни в какие ворота( пользователь после oDocs:Run() может его редактировать).
Сейчас в данной теме предложили вызов конкретных форм на печать (отчетов). Но еще даже данный способ не представляется возможным реализовать (так и неизвестно какие параметры требуются)
Но уже очень бы хотелось иметь возможность вызывать это меню:
2 nordk В общем пока что, я буду делать проверку остатка каждый раз при формировании накладной (т.е. по-своему), т.к. так не услышал ответа на свой последний . И либо не понял, что Вы имели ввиду, либо Вы "обсчитались".
Сейчас волнует больше всего даже не то, что придется реализовывать свой реестр документов (хотя, думается, лучше бы и без этого обойтись, т.к. нет метода редактирования документов!!!!!). И даже не , связанный с автоматическим формирование сч. фактуры (которая при опции nAutoShFact_ON= =1 не работает/или я не понимаю как должно работать, но сч. фактура не формируется) - эти впоросы, я очень очень надеюсь, тоже найдут свои ответы позже.
Сейчас больше всего стал волнать , ответ на который я хотел услышать после ответа на моё предыдущее сообщение, но уж очень не терпиться его задать:
При опции oDocs:Hidden := 1 (якобы для того, чтобы дать возможность распечатать) пользователь может редактирвать еще несохраненный документ!!!
И это, мягко говоря пугает!!!!!!! Ведь он может добавить или удалить строки!!! И получается, что моя таблица просто АБСОЛЮТНО бесполезна!!!!! Ведь я даже не буду знать, что документ изменился и "не похож" на то, чем должен быть!!!!
КАК убрать возможность редактирования документа? Так, чтобы его можно было только либо распечатать, либо отменить вообще?
itman пишет:
Для сетевых проектов следует размещать конечный файл в папке \BEST5_34\Server\DATA\Pro\userlibs\. В этом случае клиентские места (каталоги \BEST5_34\Client\Bin\userlibs ) будут автоматически обновляться при запуске БЭСТ-5. Т.е. все файлы c расширениями .bdll .rc, расположенные в каталоге \BEST5_34\Server\DATA\Pro\userlibs\ переносятся в\BEST5_34\Client\Bin\userlibs и загружаются в память.
Евгений! А где Вы это прочли? У меня это во всяком случае не работает!!!
И очень бы хотелось узнать по правам доступа!!!
Когда появиться возможность (и появиться ли вообще) определять доступ к новым меню Б-5?
nordk пишет:Дальше никуда не идем а по данным карточки партии формируем строчку.
А в картотеке по группе+номенклатура+mdim+партия проверяем по картотеке склада
Т.е. проверяя по картотеке склада мы получим нулевой остаток в этом случае, верно?
Может быть наоборот проверяем по картотеке склада, а затем формируем строку? (зачем же формировать "нулевую" строку?)
Т.е. ничего не отгрузиться, я правильно понял Вас?
Нет не вписываем !!!
Мы по нему находим строки и формируем документ отгрузки через объект. А какой там будет ROWID меня не интересует.
У нас контроль на уровне самой карточки партии.
Хорошо, хорошо, тогда так:
1. Оприход ГП-товар. Партия №2(код). ROWID = "ROWID1"
2. Мы записали "ROWID1" к себе в табличку (и код). Так?
3. Когда надо отгрузить данный товар (по которому идёт движение) мы смело находим у себя "ROWID1".
4. Дальше идем в картотеку складского учета, находим там по "ROWID1" нужную партию. Берем эти данные и заносим в документ отгрузки.
Теперь так???
Опять повоторюсь. Что будет, если после п. 2 кто-то другой (не мы) возьмет и спишет нашу партию (в данном случ имеется ввиду партия с ROWID= ="ROWID1")?
nordk пишет:
Цитата Саак Шахламджян пишет:
Да в том-то и проблема, что ROWID у карточки партии меняется!!!
(Точнее сказать сама партия меняется, текущее кол-во. "Перетекает" из одной партии в другую => как бы меняется ROWID)
Вы хотите сказать что Вы создали строку и потом когда с ней работаете меняется ROWID ? Вы проверяли это на практике ?
Я же сказал, как бы меняется... Id записи само собой не меняется...
Вот что предлагаете Вы:
1. Оприход ГП-товар. Партия №2(код). ROWID = "ROWID1"
2. Мы записали "ROWID1" к себе в табличку (и код). Так?
3. Когда надо отгрузить данный товар (по которому идёт движение) мы смело находим у себя "ROWID1" и вписываем этот код и "ROWID1" в документ отгрузки. Так??? Такой алгоритм Вы предлагаете?
Так представьте, что кто-либо после п.2 сделал списание данной продукции. Что будете отгружать в п.3?
itman пишет:
Для сетевых проектов следует размещать конечный файл в папке \BEST5_34\Server\DATA\Pro\userlibs\. В этом случае клиентские места (каталоги \BEST5_34\Client\Bin\userlibs ) будут автоматически обновляться при запуске БЭСТ-5. Т.е. все файлы c расширениями .bdll .rc, расположенные в каталоге \BEST5_34\Server\DATA\Pro\userlibs\ переносятся в\BEST5_34\Client\Bin\userlibs и загружаются в память.
После внесения изменений и компиляции проекта необходимо закрыть клиентский модуль и запустить его вновь, в этом случае обновленные библиотеки будут скопированы на клиентские места.
А с какого СП такое поддерживается? У меня СП 12 стоит и "не покатило".
P.s. К стати там такой папки не было "\BEST5_34\Server\DATA\Pro\userlibs\", я её создал.
Добрый день!
Скажите, пожалуйста что по поводу прав доступа к новым меню в Б-5???
Очень интересует данный !!!
И еще попутно в продолжение а о доступе.
Подключаемые *.bdll файлы необходимо "перетаскивать" на каждую пользовательскую машину. Нельзя ли придумать какой-либо механизм, который бы позволял обновлять клиентской программе, самостоятельно забирать эти *.bdll файлы с сервера?
Скажем такой же механизм как и при обновлении сервиспаками. В файле version.txt (или какой-то др.) содержиться информация о текущем СП сервера. Такой же файл и у клиента. Нельзя ли просто сделать вот так в этом файлике:
Код
//Часть 1. Разработчиков.
Virsion_id= SP12 //Версия СП 12.
//Часть 2. Пользовательская.
Virsion_id= 533_SP12 //Версия *.Dbll файлов № 533 в текущем СП 12.
При запуске клиентского Б-5 сверялись бы обе части. И при несоответсвии Ч2 клиентская машина скачивала бы все подключенные *.bdll файлы.
Тогда я бы смог легко и очень легко обновлять *.bdll файлы, не бегая к каждому и не опасаясь, что кого-либо забыл.
И после своего очередного обновления я бы менял Част2, увеличивая № версии.
А при установке нового СП. № пользовательской версии обнулялся бы. (Да как угодно можно придумать....)
Может быть есть какие-нибудь догадки? Паблик и приват переменных довольно много, сказать приблизительно даже сложновато.
А вот сейчас думаю. Ведь перед вызовом формы идет её выбор? В спец окошке? Может быть оно и отвечает за передачу параметров?
Хоть в каком направлении копать? Пытаться инициализировать теже переменные что и в обычном реестре присутствуют или это вообще пустая трата времени и искать нужно где-то еще?
nordk пишет:
Что касается печати - это мы решаем таким образом.СОздали документ через объект - создание происходит с открытием документа на экран. В нем печать и все что надо работает.После сохранения - печать только в типовом реестре.На просмотр то он открыт.
Я, к стати, по этому поводу в моём сообщении №59 так и спрашивал:
Цитата
...Либо открывается документ на редактирование, и пользователь сам решает сохранять ему док-т или распечатывать и т.п...
Т.е. получается перед непосредственным сохранением он-таки должен показаться пользователю!???
P.S. Вариант с oDocs:Hidden := 1 уже опробовал. Всё просто здорово!!! Очень порадовало!!!
Как всегда одно небольшое "Но":
Рег. номер у меня формируется стд WDOC функ-ей. Единственное, она иногда "даёт сбой". Если такая сит возникнет пользователи меня съедят, знаю точно. Бывает, что рег. номер выдается не самый большой, идущий след по списку, а, скажем № 000010. => После этого будет 11й и т.д. В случае со стд. реестром документов есть возможность посмотреть последний номер и ручками поправить его. В нашем случае такой возможности почти нет.
Нельзя ли в открытый документ повесить событие "перед сохранением" как это можно сделать в стд реестре документов??? Чтобы самому с этим номером "разобраться".
Виктор Балановский пишет:
Не пробывал, но думал.
Здесь два момента:
1) Что начинается вперед: генерация проводок или сохранение полей документа? Конечно, это можно проверить.
2) Но как после проверки заполнения полей, снова перенаправить программу на работу с полями документа, а потом снова выйти на плагин и т.д. (как организовать такой цикл)?
Проверку поставить на "перед записью", а "продолжение" сделать на после записи...
Если проверка вернет .F., то Б-5 сам заставить оператора продолжать редактировать документ до тех пор, пока он не отменит корректировку\ввод или проверка вернёт .Т. .
Если еще требуется передача параметров, то можно сделать чз глоб переменные. Я такое делал из события работа в реестре в другие... Если переменная была объявлена она не уничтожается до тех пор, пока пользователь не вышел из реестра.
Код
//Плагин по событию перед записью
CheckIfCorrect()
Function CheckIfCorrect()
Local something,lResult:=.F.
.........
If (somthing=="OK")
lResult:=.T.
else
SayAndWait ("Mistake!")
endif
return lResult
nordk пишет:
Не понипмаю зачем доступ закрывать ?
Заказ допустим на 10 штук
Мы выпустили продукцию 4 штуки.
Номер заказа разместили внутри карточки партии
Потом выпустили еще 6 штук к заказу.
В новую партию положили еще 6 штук.
Все.
Как и раньше контролируем отгрузку заказа.
Он состоит из 2 партий.
Все движения как были так и будут.
ROWID у карточки партии не меняется
При записи отгрузки контролируем те ли партии отгружаются и закрывается ли весь заказ или частично.
Что тут нового против разговора раньше ?
Да в том-то и проблема, что ROWID у карточки партии меняется!!!
(Точнее сказать сама партия меняется, текущее кол-во. "Перетекает" из одной партии в другую => как бы меняется ROWID)
Цитата
Заказ допустим на 10 штук
Мы выпустили продукцию 4 штуки.
Номер заказа разместили внутри карточки партии
Допустим так. А потом кто-то взял и переместил эту партию на др склад. Или списал... Что тогда будет? Партия пропадет ведь, да? И получается, что ROWID партии, который мы с Вами храним уже не актуален. Т.к. наша продукция висит на др партии с др. RowID или вообще отсутствует (смотря что проиошло).
Или я что-то не так понимаю?
P.S. В общем черно-черно черновой вариант у меня сегодня уже реализовал продукцию со склада. Сделал просто поиск всех партий по гр. и Н\Н в определнном складе. Не могу сказать, что долго работает. (Хотя все на лок машине работае, по сети немного ниже будет скорость.)
nordk пишет:
Думаю Вы меня не поняли
Я к первой таблице предложил добавить детализацию.
1. а) ROWID партии и номер заказа Вы предложили в другую таблицу(допустим, PartInfo.dbf) поместить верно???
б) ROWID партии - идентификатор записи из спр партий или mkart.dbf? Если да:
в) Придется "закрыть" доступ на другие движения, иначе они приведут к тому, что информация в таблице PartInfo.dbf будет недостоверна???
2.Честно говоря больше волнует распечатка накладных. За реализацию отгрузки особо не переживаю. Больше волнует распечатка документов и то, что еще придётся переделывать реестры стандартных документов.
По повду последнего сейчас задумался. Удаление я так понимаю будет реализовано стд методом (Вы его уже дали). А вот создание и редактир есть такие? И как они работают?
Из описания не понял для чего используется поле kol10 таблицы rbookm.
Выяснил, если в сумме kol10 и kol1 равны kol, то позиция заказа считается отгруженной.
kol1 - колич отгруж по строке заказа.
kol10 - колич отгруж в архиве по строке заказа. Как это понять???
Просто хочу использовать данной поле по своему назначению.
nordk пишет:
Если предполагается несколько партий по заказу, то мне личнонапрашивается вторая табличка:заказ и ROWID партии + кол-воИ в каждой партии поле с номером заказа.Тогда по номеру я отслеживаю можно ли эту партию отгружатьконкретному партнеру и если да - то отмечать у себя.Общее кол-во совпало с количеством заказа - закрываем....Может будут мысли лучше - но я бы делал как-то так...
Это будет немного слишком!!!
1. Кроме того не совсем состыковывается со сказанным ранее, а именно:
Если еще и партию каждую отслеживать, тогда придется все-таки закрыть абсолютно все виды движений, а => реализовывать их самому, а мы договаривались закрыть лишь те, которые уменьшают остаток продукта.
2. Делать еще одну таблицу ради такого тоже кажется не целесообразным.
В общем ввел 2 поля : колич изготовленных и колич отгруж.
А отгружать думаю, все-таки кавыряя картотеку. Заодно сверяя и остаток.
Функции wait() я так понял не дождусь ни от кого. Разработчики её похоже спрятали от глаз простых смертных. Я пошёл другим путем.
Написал VBS скриптик такого содержания:
Код
Wscript.Sleep(10)
А в коде плагина дописал строку-задержку, запускающую скрипт:
Код
__run("c:\1.vbs")
В общем-то тоже маразм, должен сказать, но всё же лучше чем ничего.
осталось закинуть файл на сервер, поменять путь запуска...
P.S. Как ни странно более чем 100кратное копирование файла заменилось 10 миллисекундной задержкой и всё прекрасно работает...
P.P.S А вообще сейчас до меня дошло... Если написать так:
Код
__run("net time \\Server-New >> "+sFPAth)
То никаких задержек ставить не надо, потому как вариант, предложенный itman'ом
Цитата
itman пишет:
Код __run("start /b net time \\192.168.0.1 >> s:\servertime.txt")
На самом деле делает следующее:
Сначала запускает командную строку, которая в свою очередь запускает команду net, которая исполняется уже во вне запущенной командной строки. Командная строка завершается, не дожидаясь результатов net(записи в файл)=> не дожидается этого и __run(), оттого у меня и были проблемы....
.....
Local cBuffer:=Space(100)
Local sFPAth:=B6_TMP_PATH +"st"+StepPlus(),nHandle
__run("start /b net time \\Server-New >> "+sFPAth)
COPY FILE (sFpath) to (sFpath+"1") //копируем получившийся файл, дописывая "1" в имя файла
COPY FILE (sFpath) to (sFpath+"2")//еще раз копируем получившийся файл, дописывая "2" в имя файла
sFpath:=sFpath+"1"
nHandle:=FOpen(sFpath)
if !(nHandle==-1)
fseek(nHandle,0,0)
FRead(nHandle, @cBuffer, 100)
.....
Представьте себе файл 1 и файл 2 оказываются пустыми!!!!!
Тогда я немного подумал и решил, раз нет функции wait(), то было бы глупо всякими while'ами "забивать" процессор ради ожидания, и я пошел таким путем:
Код
.......
Local cBuffer:=Space(100)
Local sFPAth:=B6_TMP_PATH +"1\"+"st"+StepPlus(),nHandle,nI
__run("start /b net time \\Server-New >> "+sFPAth)
For nI= 1 to 500
COPY FILE (sFpath) to (sFpath+Var2Char(nI))
NEXT
И, "О, ЧУДО!!!" Начиная с файла № 101 (101й копии)[или № 167 или еще какого-нибудь, всегда по-разному] файл наконец-то оказывался непустым!!!!!
"Меня терзают смутные сомненья..." либо __run() не дожидается полного окончания исполнения внешнего приложения. Либо команда net time \\Server-New >> "+sFPAth запускает еще что-то, что уже исполняется во вне команды net...
Путь решения с 500 кратным копированием файла кажется маразматичным. Очень бы хотелось команду WAIT()...
__run("start /b net time \\Server-New >> "+sFPAth)
nHandle:=FOpen(sFpath)
if !(nHandle==-1)
if (FRead(nHandle, @cBuffer, 100)>0)
У меня строка не читается... Читается нуль байт!
Если же "остановить" программу(поставить точку останова, подождать и снова запустить) или идти под отладчиком, то всё отлично!!!!
Я не знаю с чем это связано!
Предполагаю лишь, что данные в файл еще не успели записать, а Б-5 уже бежит дальше, или еще что-нибудь.
Вот почему я и говорил, что лучше бы средствами Б-5 определять дату на сервере!!!
Как быть теперь?
Нет ли функции Wait(nMiliseconds) в Б-5??? Которая, к стати во многих местах могла бы быть полезна!!!!
Евгений Плешивцев пишет:
Если по партии не было расхода, то выдается расширенный диалог. Если по партии был расход, то программа не дает штатно править учетную цену.
Причина: учетная цена партии, в том числе, сохраняется в строчке расходной накладной. Исправляя цену в приходной накладной пришлось бы менять цены и в расходных.
Спасибо за ответы!
Похоже, так и есть!!! Уже теплее!!!
А выход есть из этой ситуации?
Как нам быть? Очень хотят исправить учетную цену!
Т.е. Исправить учетную цену в прих накл. и чтобы автоматом (или доп пересчетом) исправить цены в расх накл. Что-нибудь вроде этого возможно!!!?