Вот образец высокомерного, хамского общения с дилерами.
С отдельными дилерами, которые, на мой взгляд, сами напросились.
Есть несколько поговорок на эту тему, да вы и сами их знаете...
Слепил, может и коряво, но работает.
Ну и славно.
Можно от десятки ожидать возможности выполнения функций десятки из внешних программ?
Связь с сайтом тому пример.
Про слоников, поучительный пример.
Если кто не понял, то я имел в виду, что некоторые дилеры (не будем показывать пальцем) пытаются мной манипулировать по разным поводам и исходят желчью, когда им это не удается.
Так что, слоник в данном случае - это я.
Не-не-не. Здесь речь идет о субъективном восприятии мной обращения ко мне неких лиц. Какое это отношение: дружеское, сдержанное или хамское - это мое оценочное суждение. Оценочное суждение не является клеветой по определению. Клевета - это утверждение заведомо ложных фактов о ком-то, и факты при этом доступны формальной проверке.
Например, заявление "Вася Пупкин - дурак" не является клеветой ни в каком случае, т.к. пусть он попробует получить в поликлинике справку, что не дурак.
А вот заявление, что Вася Пупкин в прошлом году укрыл от налоговых органов доход в размере 10 млн. рублей может быть признано клеветой, если нарушение не будет выявлено инспекцией.
Нет, именно возможностей программы И-Б простейшим образом получать данные из сторонних приложений в РЕАЛЬНОМ ВРЕМЕНИ, пусть это будет Excel, "1С-Торговля и склад", кассовый терминал и т.п..
Опять двадцать пять. По существу. Здесь же говорили о добавлении информации из сторонней программы в базу ИБ. Не надо переводить на другие темы.
Какие-такие возможности программы ИБ, если ее даже запускать не надо для осуществления обсуждаемого здесь процесса.
Так что, ребята, разбирайтесь сами...
Как я понял, это адресовано Евгению и другим заинтересованным пользователям (правда, как-то фамильярно прозвучало).
Разумеется нет. Это было адресовано г-ам Олейнику и Полунину исключительно, которые нарисовались в теме как самые жаждущие (мне в таких случаях всегда почему-то вспоминается анекдот про "папа, пусть слоники побегают").
А уважаемые пользователи и не менее уважаемые дилеры, которым действительно нужно разобраться, разберутся, никаких ракетных технологий там нет.
Если полагаете, что подобное развитие программы - это помощь конкретному Олейнику, Полунинну или ещё кому-то, то делать не стоит, независимо от взаимоотношений с персоналиями
Во первых, я не вижу в чем тут "развитие программы".
Во вторых, сделать минимальный законченный пример - это не час и не два работы. При том, что опыт программирования на VB у меня практически нулевой и надо будет смотреть документацию, как и любому из вас.
В третьих, что предлагалось сделать:
простая табличка типа
"№ документа", "Дата", "Наименование товара", "Кол-во", "ЕИ", "Цена", "Сумма"
по нажатию кнопочки в форме появляется в виде хозяйственной операции.
Здесь всяких мелких деталей масса, которые несущественны для самого процесса взаимодействия.
Надо генерировать операцию, какие-то проводки между какими-то счетами.
В то время как ключевым моментом является только получение нового id и INSERT с этим id и прочими полями.
Схематически:
is2_Init // инициализация клиентской библиотеки
Dim Db As String
Db = ... // путь к БД, например "L:\NetBase"
Dim User As String
User = "Администратор"
Dim CounterName As String
CounterName = "IB" // имя основного счетчика ИБ
Dim Id As Long
Dim NeedCalc As Byte
// получаем новый Id
is2_GetAutoInc(Db, User, CounterName, NeedCalc, Id)
if NeedCalc
// ... еще не вычислялся MAX для счетчика,
// вызываем is2_CalcAutoInc с параметрами как в справке
Dim Sql As String
Sql = "INSERT " + ... // используем Id
is2_ExecSQL(Db, User, Sql) // выполняем запрос
is2_Done // деинициализация клиентской библиотеки
Можно добавить обработку ошибок с помощью функции is2_LastError.
Александр, работающий пример, думаю, окажет сильное впечатление при демонстрации возможностей программы.
Возможностей какой программы, Excel?
Главное выполнить функцию из внешней программы. Для меня сейчас важно это сделать из Excel в варианте стандартной поставки. Как делать это с помощью ibalt.dll Денис показывал ещё 8 лет назад.
Наверное так и делать придётся.
Чего же за 8 лет еще не сделали?
Ждем-с.
Что-то не очень хочется помогать Олейнику и Полунину при их систематически хамском обращении.
Так что, ребята, разбирайтесь сами...
А где можно ознакомиться подробно с функциями infs2cln.dll ?
В документации ИС "Программный доступ...".
Сейчас документация ИС входит в состав справки ИБ 8.
А нельзя функции API ИС как-то "обернуть", сделав доступными из языков "попроще" (VBA, VBS, Open Basic и т.п.).
Например, для прямого формирования проводок ИБ из офисных приложений. Через СОМ или как-то ещё.
Все можно.
На тот момент не было уверенности, что программный доступ вообще кому-то будет нужен.
Поэтому реализация была сделана только в необходимом для ИБ 8 объеме.
Речь была, как я понял, о записи в БД И-Б операций в онлайн-режиме из стороннего приложения.
Как можно синхронизировать этот процесс одновременно и в приложении И-Б, и в сторонней программе (стандартным способом)?
С помощью счетчика Инфо-Сервера получаем id новой записи.
Затем выполняем INSERT с этим id и значениями прочих полей.
Из внутреннего языка это выливается в вызовы ИС_СЧЕТЧИК + ТИП_SQL.ЗАПРОС.
Из стороннего софта можно использовать функции API Инфо-Сервера,
которые реализованы в infs2cln.dll.
Расчет и получение значения автоинкрементального счетчика выполняется функциями is2_CalcAutoInc и is2_GetAutoInc соответственно.
Выполнение запроса - is2_ExecSQL.
Использование API ИС приведет к тому, что для ИС клиент стороннего софта будет неотличим от клиента ИБ.
Новые операции будут появляться в окне ЖХО также, как при добавлении с другого рабочего места ИБ.
В режиме Инфо-Сервера требуемую задачу из внутреннего языка решает функция ИС_СЧЕТЧИК (см. описание и пример в справке).
Инфо-Сервер использует общий счетчик на все таблицы базы данных.
Запросы вида: SELECT MAX(OPER_NUMB) FROM HOZOP
выполняются только при первом обращении к базе.
Счетчик инициализируется максимальным значением из найденных (для операций, проводок, счетов и т.д.).
Далее счетчик "живет" только во внутренней переменной Инфо-Сервера.
Поэтому, для получения следующего значения никаких блокировок таблиц не требуется.
Таблица EVENTNET совсем не используется при работе в режиме Инфо-Сервера.
Вместо переменной что-то другое оказалось.
На то она и "внутренняя ошибка", что такого не должно быть никогда.
Вы бы кусочек кода привели, тогда мне было бы понятнее в чем дело.
Скорее всего какая-то пограничная ситуация: переменная и функция одинаково называются или переменная и тип.
Консенсус в обсуждении пока не был достигнут.
Как не выявилось и особенной заинтересованности других пользователей.
Уточните для начала несколько вопросов:
1. Под планом счетов понимается только выбор счета или оборотка и исходные остатки тоже?
2. Для разных вызовов функции ВЫБОР_СЧЕТА надо иметь возможность сортировки "по выбору пользователя"?
4. При стандартном выборе счета настройка всегда одинаковая (или зависит от графы и т.п., хранить в свойствах графы)?
3. Для разных пользователей в сетевой версии настройка общая или у каждого своя
(хранить в базе или в cfg)?
Высылаю 2 разных файла планов счетов. Достоверно установлено, что предыдущая версия 8719 ничего не портит при проверке. А версия 8720 портит план счетов, который в файле PLSCET-Err, а PLSCET-NoErr не портит. 8719 не портит ничего.
В версии 8.720 действительно был изменен алгоритм проверки наличия субсчетов.
В Вашем случае замена алгоритма повлияла на обработку файла, созданного с неправильной настройкой языкового драйвера.
Если посмотреть содержимое файла PLSCET-NoErr, то вся строковая информация представлена в формате ANSI Windows cp1251
(что соответствует настройке языкового драйвера BDE Pdox ANSI Cyrillic).
Если посмотреть содержимое файла PLSCET-Err, то видно, что русские буквы кодированы не в ANSI Windows cp1251, а в OEM/DOS cp 866
(видимо, для Paradox была сделана настройка dBase RUS cp866).
Рекомендация:
1. Выгрузить базу данных в файл SHP.
2. Исправить языковой драйвер Paradox на Pdox ANSI Cyrillic.
3. Импортировать базу из SHP.
Cо своей стороны, я постараюсь в последующей версии учесть возможность неправильной кодировки таблицы в алгоритме проверки.
SOS! После проверки логической целостности базы (пункт меню Файлы-База данных-Проверить) слетают признаки субсчетов. Т.е. пропадают счета 2-го уровня и ниже.
Все или некоторые?
Было бы идеально получить базу до проверки на burlak@ib.ru
Если базу выслать нет возможности, то опишите подробнее с указанием
конкретных кодов счетов.
... во всех справочниках КЛАДР, Банки сплошная тарабарская азбука. Подскажите как исправить? Как я понимаю, это проблема кодировки.
Если на компьютере установлено BDE, то надо настроить языковой драйвер ODBC для dbf файлов.
В С:\Program Files\Borland\Common Files\BDE запустите bdeadmin.exe.
Поставьте драйвер RUS cp866 как на картинке:
Нашел, что время последнего вызова инициализируется нулем при старте программы.
Значит, когда счетчик GetTickCount ушел в отрицательную область, то все - 25 дней без вызова...
В коде я поправил инициализацию и сравнение с учетом переполнения счетчика.
А сейчас для Вас временный способ решения - перезагрузить сервер.
Если "повезет", то такое поведение может возникнуть если работа с ИБ попадет на период ~25 дней с момента загрузки компьютера.
Связано с переполнением 32 битного таймера (функция GetTickCount).
Т.е. время последнего вызова запоминается как большое положительное число (2147483647),
а это время + 10 сек. получается большим по модулю отрицательным числом (-2147473647).
Все - на следующие 25 дней точно остались без обработки...
Должно устраняться перезапуском ИБ.
Если не устраняется, то точно дело не в этом.
Что функция-обработчик делает и как делается вывод, что она не вызывается?
Если указать в качестве обработчика тривиальную функции, вызывающую СООБЩЕНИЕ, например?
Функция-обработчик указывается в ib.ini [AppFunctions] IdleFunc=...
Файл ib.ini должен лежать в рабочей папке программы.
При использовании терминального сервера, скорее всего, рабочие папки у разных пользователей различаются.
Проверьте содержимое ib.ini в папке, которую показывает Справка->Компьютер как текущую.