itman пишет:
Самый лучший способ научиться, проанализировать исходники рабочих примеров.
Т.к. initlist перекочевала из БЭСТ-4, все что есть по БЭСТ-4 - применимо и в Б5.
В инструментарии к Б4 приведены рабочие примеры, вот один из них:
....
Там же есть примеры и более функциональных процедур.
Сам пакет можно скачать здесь.
У меня по RestSetKey(). Я так понял, что если я её вызываю без параметров, то все горячие клавиши сбрасываются?
Большое спасибо за пример!!! Согласен пример - одна из самых лучших вещей для разбора. Но пример в виде чужой программы не всегда удобно, иногда более чем достаточно описания+кратенького примера. И это во многих случаях удобнее.
Вы в который раз задаете ы, которые рассматривались и в уроках на старом форуме и обсуждались. Т.е. пытаетесь писать как говорится "с наскока".
Мой Вам совет.
В описаниях функций самого БЭСТа (по описанию БЭСТ-4) ознакомьтесь с перечнем всех функций: какая - зачем и бегло пробегите темы-уроки до конца....
У меня по RestSetKey(). Я так понял, что если я её вызываю без параметров, то все горячие клавиши сбрасываются?
Просто SaveSetKey() прекрасно обнуляет все клавиши - для того и создавалась.
Насколько помню исходники функций БЭСТа можете на старом форуме посмотреть
nordk пишет:
Вы в который раз задаете ы, которые рассматривались и в уроках на старом форуме и обсуждались. Т.е. пытаетесь писать как говорится "с наскока".
Мой Вам совет.
В описаниях функций самого БЭСТа (по описанию БЭСТ-4) ознакомьтесь с перечнем всех функций: какая - зачем и бегло пробегите темы-уроки до конца....
Да вот в том то и дело, что бегло я как раз и просмотрел. И там довольно много примеров, уроков и пр. по поиску InitList, систематизации нет:(
А вот в опсаниях функциях БЭСТ'а(если речь идет о "Программирование в Б-4"), я там такого, увы не нашел... Нет там упоминания об этих функциях.
nordk пишет:
С удовольствием выслушаю предложения и советы по систематизации. Думаю над тем как опыт старого форума оформить тут.
Заранее спасибо
1. Я даже не представляю всего того перчня функций (именно БЭСТА) которые существуют. Вот сколько их всего, так на вскидку Вы можете сказать?
2. Еще интересен дизайнер приложений. Там как я понимаю есть свои функции, которые не работают при написании спец-й и наоборот. Плюс еще там есть классы, созданные разработчиками, что, пожалуй, тоже очень очень важно, не меньше чем остальное. а)Как тут быть!?? б)Вопрос эмм... насколько сильно отличается дизайнер от редактора XBA(функции БЭСТА) или одно и тоже? в) Приписывать ли разработки создателей БЭСТА к функциям БЭСТ (что туда включать какие классы и ф-ии, сколько их)
3. Нужны ли в описании "неБЭСТ'овские" функции? (Такие как Append BLANK, которая как я понимаю "неБЭСТовская" )
Зная хотя бы ответы на эти вопросы я бы хоть имел представление о том насколько это трудно систематизировать (объем работы).
P.S. Когда-то давно при написании еще в С++ Билдере, где вся справка была на английском (а еще раньше в Borland C 3.1) иногда было трудно понять описание на этом самом англ (или просто мало написано). Когда возникала такая ситуация, то если мне не изменяет память, можно было посмотреть заголовочные чати функций в Include файлах, по которым можно было понять какие данные на вход, а какие на выход и сколько их. Зная это можно было методом "тыка" понять, что это за функция. Тут же, извините, даже перечня ф-й нет. Там же еще было удобно, что они были разбиты в include файлах по группам. Здесь же, как я понимаю, только скомпилированные dll(причем интересующие ф-ии лежат в dll не PE-32 формата), по которым максимум что можно сделать это с "виндовым" отладчиком смотреть эти самые функции (само собой идиотизм).
На старом форуме, как упомянул Константин - уже все самое необходимое рассматривалось.
Основные и необходимые функции приведены в отдельной теме.
Дело в том, что при написании пользовательских программ "БЭСТовские" функции нужны в строго определенные моменты. Если вы только не собираетесь писать новый модуль по всем внутренним правилам БЭСТа. Описание по XBA не отражает полно, но близко соответствует программированию в Б5.
initlist - основная функция для работы с реестрами. Составить картину по работе с ней легко, материала достаточно. В инструментарии функции разработчика по Б4 приведены в исходных кодах.
По классам - тема интересная, пока малопонятная. Со временем разберемся, я думаю.
Сегодняшний БЭСТ-5 система молодая, хотя бренд старый.
1. Минимум нужны все параметры основных функций (в частности для InitList, QInput, MakeRefer, QBrowse и т.д.) в актуальном состоянии.
Скажем мне помогло сообщение Константина с параметрами QInput (сообщение #74 из темы
QInput для отчета). Этот минимум хотелось бы иметь для всех основных функций. Хотя возможно он уже есть в различных уголках двух форумов и не только ...
Видимо перечень параметров функций лучше их разделить для БЭСТ4 и для БЭСТ5, т.к. есть ощущение, что они уже отличаются.
2. Если будет описание всех этих параметров, то будет совсем замечательно
3. Нужны минимальные примеры на каждую функцию.
На подобии, как в Уроке 1 по InitList. Скажем мне такие примеры по InitList, QInput, MakeRefer не нужны, а другим могут помочь. А мне бы такой пример помог бы с QBROWSE...
Так, у меня опять "шкурный" .
Реализую реестр создания заказа, в очень упрощенном варианте.
Пользователь выбирает изделия(кнопкой добавить, с этим проблем нет), они как раз и должны попадать в реестр формирующегося заказа.
3 Варианта его организации.
1. Сам реестр текущего заказа хочу хранить в памяти и отображать initlist'ом. Как "запихать" массив в InitList?
2.Вариант делать временный файл-таблицу невариант, очень уж не хочется!!! (Долго работает и т.п.)
3.Сразу и писать в таблицу, где храняться строки заказа (rbookm). Тоже не очень при отмене придется все удалять.
Мне нравиться вариант 1, но там . Если есть еще предложения буду рад.
Цитата
Денис пишет:
1. Минимум нужны все параметры основных функций (в частности для InitList, QInput, MakeRefer, QBrowse и т.д.) в актуальном состоянии.
Скажем мне помогло сообщение Константина с параметрами QInput (сообщение #74 из темы
QInput для отчета). Этот минимум хотелось бы иметь для всех основных функций. Хотя возможно он уже есть в различных уголках двух форумов и не только ...
Видимо перечень параметров функций лучше их разделить для БЭСТ4 и для БЭСТ5, т.к. есть ощущение, что они уже отличаются.
2. Если будет описание всех этих параметров, то будет совсем замечательно
3. Нужны минимальные примеры на каждую функцию.
На подобии, как в Уроке 1 по InitList. Скажем мне такие примеры по InitList, QInput, MakeRefer не нужны, а другим могут помочь. А мне бы такой пример помог бы с QBROWSE...
Да меня, собственно интересовало количество, количество того, что требует описания.
Цитата
itman пишет:
На старом форуме, как упомянул Константин - уже все самое необходимое рассматривалось.
Основные и необходимые функции приведены в отдельной теме.
Дело в том, что при написании пользовательских программ "БЭСТовские" функции нужны в строго определенные моменты. Если вы только не собираетесь писать новый модуль по всем внутренним правилам БЭСТа. Описание по XBA не отражает полно, но близко соответствует программированию в Б5.
initlist - основная функция для работы с реестрами. Составить картину по работе с ней легко, материала достаточно. В инструментарии функции разработчика по Б4 приведены в исходных кодах.
По классам - тема интересная, пока малопонятная. Со временем разберемся, я думаю.
Сегодняшний БЭСТ-5 система молодая, хотя бренд старый.
Пока могу предложить черновой вариант справочника пользователя.
На начальном этапе информация способна помочь.
, конечно, что все есть в наличии, но было бы здорово собрать все воедино. Информацию, иногда просто приходиться по крупицам собирать, вычитывать, выпрашивать... А охватить ВСЁ и сразу - невозможно или трудно. Поэтому речь и повёл о систематизации. Справочник по Б-5 меня очень устраивает. Все четко и грамотно. Есть мелочи, которые не устраивают, но это из-за личных вкусов. Ну, м\б некоторые примеры не всю суть раскрывают. Но, зато есть возможность "все потрогать", попробовать. И если меня интересует работа со строками, то ч иду в нужный раздел, с таблицами - также ищу в нужном разделе. А если не до конца понимаю, то есть XBA редактор, отладчик, dbf Viewer...
По поводу классов. Все! Без классов уже никуда!!! Причем довльно давно. Все никак не заставлю их использовать в спец-ях, было бы добнее, наверное. А вот в дизайнере приложений, поковыряв исх. код разработчиков все довольно неплохо получилось (на уровне человека который делает это впервые). Там ы теже самые - "Чего? Куда? и Как?". Компоненты, увы, неописаны. Работать работает, осталось еще понять, "что же я делаю" (По примеру сделать можно, а вот понять как работает - совсем дургой )
Сразу , чем не устраивают штатные средства ведения заказов?
Тем более если используется системный файл. Если использовать свои таблицы - дело другое, и с удалением решается несложно.
Лично я стараюсь придерживаться принципа - создавать запись в системную таблицу только в том случае, когда прекрасно понимаю смысл значений всех полей. Иначе потом можно наступить на серьезные грабли.
itman пишет:
Сразу , чем не устраивают штатные средства ведения заказов?
Тем более если используется системный файл. Если использовать свои таблицы - дело другое, и с удалением решается несложно.
Лично я стараюсь придерживаться принципа - создавать запись в системную таблицу только в том случае, когда прекрасно понимаю смысл значений всех полей. Иначе потом можно наступить на серьезные грабли.
А мне просто деваться некуда. Не устраивает по одной простой причине. В стандартном нет возможности подключать свои спецфункции :(
На стадии формирования заказа изделия еще не существует. Пользователь задает размеры и только потом на него создаются единицы в номенклатрн справочниках и спецификация, материалы в которой также расчитываются по формулам, которые храняться в отдельной таблице + еще и цена расчитывется по формуле(тоже отд таблица) в зависимости от размеров изделия.
В стандартном заказе есть возможность использования спецфункций.
А почему бы в вашем случае не использовать заказ на услуги, работы, допускающий ввод номенклатуры.
Скажем, услугу по изготовлению такого то изделия.
Потом уже после технол. обработки создавать на основании этого заказа и номенклатур заказ продажи или производственный заказ.
itman пишет:
В стандартном заказе есть возможность использования спецфункций.
Поделитесь секретом, где? (Еслы Вы о самом реестре заказов, то само собой там есть. А вот Вы начните создание нового заказа (F4) и в открывшемся окошке попробуйте что-нибудь подключить..)
Цитата
itman пишет:
Потом уже после технол. обработки создавать на основании этого заказа и номенклатур заказ продажи или производственный заказ.
1. Дело в том, что у нас сейчас даже проще. Пользователю достаточно вызвать спецфункцию и изделие само создается, после ввода размеров. После этого ему нужно лишь "включить его в заказ" (завести партию в картотеке скл учета, включить в прайс и набить заказ.)
2. А в таком случае Вы, например могли бы распечатать, скажем счет, с ценами на изделие?
3. После создания такой заявки на изготовление какие дальнейшие действия пользователя??? Снова вручную набить заказ или как? Поподробнее пожалуйста, не пойму какая связь между продажей изделия и услугой на его изготовление?
Мне сложно представить все ваши БП, это просто как рекомендация к просмотру всех доступных вариантов.
Если делать свой реестр заказов, на базе системного, затем еще и притягивать печать.
Представляете объем работы?
Услуга на изготовление, новая услуга = старт бизнес процесса по подготовке пр-ва заказанного изделия. Далее (я на ходу уже проигрываю), скажем по сохранению плагин обрабатывает заказ, если создана новая номенклатура запускается ваш плагин для создания номенклатуры, проводятся все необходимые действия, в режиме диалога, и формируется заказ (обычный или производственный). оператору останется зайти и распечатать.
В итоге используем системные реестры, и свою математику.
itman пишет:
Мне сложно представить все ваши БП, это просто как рекомендация к просмотру всех доступных вариантов.
Если делать свой реестр заказов, на базе системного, затем еще и притягивать печать.
Представляете объем работы?
Да Вы не поняли!!!
Не сам реестр заказов, а только при вводе нового!!!
Само собой сами заказы и будут храниться в самом обычном реестре заказов!!!
Мне нужна своя кнопочка F4!!! Нестандартный "ввод" заказов! А после ввода, он будет храниться в обычном реестре заказов. Я только веду речь о том, что мне нужно "свое" формирование заказов!!! Меню ввода, как угодно... Т.е. из реестра заказов (СТАНДАРТНЫХ) пользователь вызывает спец-ю "Сделать новый заказ", а вот после этого нужна визуализация ввода. Реестр партнеров, изделий, кнопки с этим уже проблем нет, осталось организовать "ввод нового".
Вот: "новый заказ"->Выбор партнера "Реестр партнёров" (с этим все в порядке)->Выбор изделия по нажатию кнопки добавить изделие "Реестр изделий"(тоже номально)->"создание изделия" тоже все норм->Возврат в исходную позицию, там где кнопка добавить изделие
А при каждом добавении в окошке висит то, что уже пользователем выбрано. Вот именно с этим списком и проблема, не знаю как реализовать.
ОК.
а что мешает "(завести партию в картотеке скл учета, включить в прайс и набить заказ.)" в программном режиме?
Если содержимое заказа формируется индивидуально по определенной таблице соответствия, т.е. если с этой задачей можно справится программно.
Как я понял для изделия, которое будет в заказе, базовыми данными являются геом. размеры.
Если такая цепочка осуществима, не проще ли реализовать ее?
1. поступление данных от клиента (заказ на услугу изг.)
2. Обработка данных -> новая номенклатура (по событию - сохр.заказа)
3. Инициализация нового объекта ТМЦ в системе (партии, картотека скл. прайс) (плагин)
4. Генерация нового заказа (плагин)
5. Вывод сообщения с номером заказа
6. Оператор входит в заказ и печатает документы.
Если нет, то
1. Поступление данных от клиента оператору
2. Обработка данных оператором с помощью плагина
3. Инициализация оператором (номенклатура, и т.д.)
4. В реестре заказов по горяч. клавише оператором вызывается процедура создания заказа
5. открывается свой инитлист (при этом надо заполнить шапку)
6. Оператор набивает заказ, включая в него подготовленную номенклатуру
7. Выходим в реестр, заходим вновь чтобы распечатать заказ.
Вот: "новый заказ"->Выбор партнера "Реестр партнёров" (с этим все в порядке)->Выбор изделия по нажатию кнопки добавить изделие "Реестр изделий"(тоже номально)->"создание изделия" тоже все норм->Возврат в исходную позицию, там где кнопка добавить изделие
А при каждом добавении в окошке висит то, что уже пользователем выбрано. Вот именно с этим списком и проблема, не знаю как реализовать
Сделать реестр, запись либо во временный файл либо непосредственно в заказы.
С временным файлом тормозов быть не должно
а что мешает "(завести партию в картотеке скл учета, включить в прайс и набить заказ.)" в программном режиме?
Если содержимое заказа формируется индивидуально по определенной таблице соответствия, т.е. если с этой задачей можно справится программно.
Именно этим и занимаюсь - делаю это программно. Остался только один момент. Сделать редактирование заказа. +кое-где по мелочи доделать+потом проверить это все целиком.
Код
поступление данных от клиента (заказ на услугу изг.)
Обработка данных -> новая номенклатура (по событию - сохр.заказа)
Даже не стал такой вариант рассматривать. При заполнении заказа нужно проверить правильность геом размеров+найти место "куда эти данные впихнуть"(т.е при стандартном приеме заказа пользователь должен будет их куда-то еще и ввести, по-моему там некуда).
Цитата
itman пишет:
Сделать реестр, запись либо во временный файл либо непосредственно в заказы.
С временным файлом тормозов быть не должно
Таким путем, к сожалению сейчас и пошёл, времени на то, чтобы делать "свои" InitList для массива нету(Да и функцией MessageBox особо не разрисуешься!!!! Линии нарисовать - проблема). К стати, у разработчиков не во временном файле, кажется, храниться, во всяком случае я его не нашёл.
Саак я до понедельника в командировку.
Хочу сказать что вообще-то на F4 свой заказ такое событие есть при создании заказа еще с БЭСТ-4.
МОжет опять осветить возможности ?
И даже на старому форуме есть оргинал исходника к БЭСТ-4 по подобному решению в одной из тем.
Но прошу прощения только после выходных.
nordk пишет:
Саак я до понедельника в командировку.
Хочу сказать что вообще-то на F4 свой заказ такое событие есть при создании заказа еще с БЭСТ-4.
МОжет опять осветить возможности ?
И даже на старому форуме есть оргинал исходника к БЭСТ-4 по подобному решению в одной из тем.
Но прошу прощения только после выходных.
Да суть а не в этом F4, а в том, что дальше происходит. В том как лучше решить задачу: "Функция создания заказа". Где хранить переменные, как их рисовать. К стати от информации как навесить на F4 свою функции я тоже не откажусь:)
Саак посмотрите событие вход в прасй-лист.
В БЭСТ-4 оно называется где прайс-лист где картотека товаров. На старом форуме эту возможность описывали и на этом не помню - вроде тоже.
Суть.
Внутри заказа при нажатии F4 запускается Ваш плагин в который передается массив строк заказа если они были
и Вы делаете свой собственный экран создания строк заказа (набора этих строк). В конце Ваш плагин должен вернуть этот же массив со строками заказа.
Если главная функция Вашего плагина вернет .T. , то запустится после выполнения плагина штатный набор в заказ, если .F., то запускаться не будет.
Полный подробный пример в исх. для БЭСТ-4 я публиковал.
В БЭСТ-5 появились аналитики а в остальном я думаю все тоже самое. По краней мере можно разобрать принцип работы. Если у Вас будет совершенно свой способ наполнения заказа - этот пример Вам не актуален.
nordk пишет:
Саак посмотрите событие вход в прасй-лист.
В БЭСТ-4 оно называется где прайс-лист где картотека товаров. На старом форуме эту возможность описывали и на этом не помню - вроде тоже.
Суть.
Внутри заказа при нажатии F4 запускается Ваш плагин в который передается массив строк заказа если они были
и Вы делаете свой собственный экран создания строк заказа (набора этих строк). В конце Ваш плагин должен вернуть этот же массив со строками заказа.
Если главная функция Вашего плагина вернет .T. , то запустится после выполнения плагина штатный набор в заказ, если .F., то запускаться не будет.
Полный подробный пример в исх. для БЭСТ-4 я публиковал.
В БЭСТ-5 появились аналитики а в остальном я думаю все тоже самое. По краней мере можно разобрать принцип работы. Если у Вас будет совершенно свой способ наполнения заказа - этот пример Вам не актуален.
Последнее, что мы обсуждали - принцип создания нового заказа. Было предложено 3 варианта:
Цитата
Саак Шахламджян пишет:
1. Сам реестр текущего заказа хочу хранить в памяти и отображать initlist'ом. Как "запихать" массив в InitList?
2.Вариант делать временный файл-таблицу невариант, очень уж не хочется!!! (Долго работает и т.п.)
3.Сразу и писать в таблицу, где храняться строки заказа (rbookm). Тоже не очень при отмене придется все удалять.
Был выбран второй вариант - текущ заказ хранить во временном файле.
Уже все доделал. Единственное пришлось, все-таки емного "поизвращаться", причины:
1. SAVESCREEN() не запоминает экран. Она запоминает лишь буковки, которые выведены в этот момент на экран. Ни цветов, ни строк InitList'a, ничего, кроме символов экрана. Это естественно не устраивает при переключении между разными InitList.
2. При вызове 2го InitList все кнопки, "нарисованные на первом" исчезают. Это пожалуй, самая веская причина для "изврата" (Пришлось Do while'ом рисовать первый initlist).
А так, все прекрасно работает, сохраняется, просто здорово.
Похоже разобрался с тем, чтобы сделать нормально. Функция SAVESCREEN() работает неправильно\не работает\не так как надо. В общем, именно она является лишней.
При использовании QinitPush() и QinitPush(.T.) все прекрасно работает, не нужны никакие Do while'ы для прорисовки "первого" InitList (у меня двойное вложение так что последний InitList 3й по счету вложенности).
Надо все переделать...
Перед вызовом второго InitList QinitPush() и QinitPush(.T.), по окнчанию соответственно два QInitPop+"сохранение клавиш" (RestSetKey, SaveSetkey).
Так что придется переделать.
Саак Шахламджян пишет:
Похоже разобрался с тем, чтобы сделать нормально. Функция SAVESCREEN() работает неправильно\не работает\не так как надо. В общем, именно она является лишней.
При использовании QinitPush() и QinitPush(.T.) все прекрасно работает, не нужны никакие Do while'ы для прорисовки "первого" InitList (у меня двойное вложение так что последний InitList 3й по счету вложенности).
Надо все переделать...
Перед вызовом второго InitList QinitPush() и QinitPush(.T.), по окнчанию соответственно два QInitPop+"сохранение клавиш" (RestSetKey, SaveSetkey).
Так что придется переделать.
Срабатывало "как-то через раз". Просто, как я понял, иногда при выходе из моих "Операций" "экран обновлялся",а иногда нет. Добавил еще и QIni(20,2) по выходу из своих операций (у меня 20ть строк), теперь более-менее прилично стало. Единственное, конечно, немного неудобно, приходиться запоминать сколько строк и где именно вызывать QIni(20,2).