Re: Вопрос по UserGModule
Существуют ли ограничения по количеству данных выгружаемых скриптом в UserGModule?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
TechnologiCS → TechnologiCS → Использование TechnologiCS API → Вопрос по UserGModule
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Существуют ли ограничения по количеству данных выгружаемых скриптом в UserGModule?
существуют...а вот какие - попробуйте установить экспериментально
Работа с ПСп, вкладка Номенклатура.
Скриптом формирую данные для расчета потребности в материалах, комплектующих, стандартных покупных, вывожу их в UserGModule. На небольших объемах данных работает без проблем. На больших данных скрипт отрабатывает, но выдает пустое окно с заголовком "ошибки" (текста самих ошибок не выводит), обрабатывает не все данные, выводит в UserGModule ~ 49300 записей, остальные как бы "обрубает". Может ли это быть связано с ограничениями по количеству записей выводимых в UserGModule? Или слишком большое количество записей в Gride и скрипт не может их обработать? Подскажите, пожалуйста, в чем может быть причина.
т.е. открывается грид, в котором только 49300 записей из всех, или грид вообще не открывается?
Grid открывается, в нем ~ 49300 записей (но должно быть больше ).
На меньших объемах данных, когда в UserGModule выгружалось порядка 45000-46000 скрипт отрабатывал без ошибок. В этом месяце план увеличился и появились такие проблемы.
У меня свалилось, показав 68923 строчки.
Выход - снижайте количество строк, выводимых за один раз, или используйте собственные формы.
Изменила скрипт, количество строк (и даже столбцов) выгружаемых в UserGM уменьшила. Скрипт вопреки всякой логики вывел в GRID 28400 строк из ~32000-35000 (хотя раньше выводил порядка 45000-46000 строк). Вышло тоже самое пустое окно с заголовком "ошибки". Вожможно в данном случае причина не связана с ограничениями на объем данных выгружаемых в GRID?
Подскажите в чем дело.
Помоему Вы подходите к решению проблемы не с той стороны. Для чего выводить на экран 35 тысяч строк, которые пользователь даже отфильтровать не сможет?
Для отчета, поскольку если этот отчет делать сразу из TCS то выгружается много данных которые не используются и как следствие, этот отчет будет формироваться с неделю, а скриптом это уже более приемлемое время получается, поскольку он вытаскивает только
то что нужно.
Подробнее о проблеме:
Необходимо рассчитать потребность в материалах, комплектующих, стандартных покупных на план производства.
Сделала отчетами (в режиме Работа с ПСп, вкладка Номенклатура). Скорость выполнения неприемлема.
Пошла по другому пути. В этом же режиме разработала скрипт, который формирует свой набор данных для расчета потребности, и из- под скрипта отчеты, в которых данные сортирую, группирую, суммирую нужным образом. На больших объемах данных скрипт отрабатывает с ошибкой (пустое окно с заголовком "ошибки") и в GRID выводит не все данные.
Чтобы уменьшить количество строк, выводимых в GRID, изменила скрипт. По повторяющимся позициям суммирую прямо в скрипте.
В UserGModule, куда выгружаю данные, ищу нужную позицию используя LocateByPropArray, если нахожу то складываю количество, если не нахожу тогда добавляю новую запись. Таким образом количество записей выгружаемых в GRID уменьшается в два раза.
Если причина ошибки в ограничении по объему данных выгружаемых в GRID, то все должно бы работать.
Но и в этом случае скрипт на тех же выбранных рабочих ПСп отрабатывает с той же ошибкой и не все данные выводит в GRID (вываливается уже на меньшем количестве строк, но обрабатывает приблизительно тоже самое количество изделий).
Следовательно в данном случае причина ошибки не в ограничении по количеству данных выгружаемых в GRID, а в чем-то другом.
Возможно мы пошли не по тому пути, но работа проделана немалая и поэтому хотелось бы разобраться в чем же причина ошибки.
Проблему с ограничениями UserGModule обойти не удастся.
Отчет состоит из Access БД, в которой лежат исходные данные, Excel файла, в котором лежат настройки отчета и библиотеки репортера. Предлагаю скриптом TechnologiCS создать Access бд, выгрузить туда данные, затем рядом положить Exel файл с настроенным отчетом (например выгрузить его из архива, куда он будет предусмотрительно помещен), прописать там путь к Access бд, и запустить репортер из Exel файла.
valentina, скажите пожалуйста, а чем Вам приглянулся именно режим номенклатура? и.. если это не тайна, конечно, структуру набора данных для отчёта, которую Вы создавали в TechnologiCS не опишите ли? или даже лучше скриншот.
Режим, из которого формируется набор данных, не имеет значения, поскольку количество выводимых данных в GRID будет одинаково из любого режима. Просто очень много критериев влияло на выбор этого режима, а потом, как советовали, мы снизили количество строк в UserGModule т.е. в GRID стало меньше записей, тем не менее скрипт пройдя тоже количество записей в TCSActiveModule выдает ошибку. Может быть проблема не в UserGModule ?
Меня вот это очень заинтересовало:
valentina писал(а):
Необходимо рассчитать потребность в материалах, комплектующих, стандартных покупных на план производства.
Сделала отчетами (в режиме Работа с ПСп, вкладка Номенклатура). Скорость выполнения неприемлема.
Про UserGModule я сейчас не говорю, просто хочу понять отчего "Скорость выполнения неприемлема"?
Сколько записей у Вас на вкладке Номенклатура и какую структуру данных Вы создали для отчёта? Просто от этого действительно сильно зависит скорость отчёта.
Возвращаясь к прежнему вопросу.... А как скриптом TechnologiCS выгрузить данные в Access БД ?
Основные приемы такие:
Dim DatConct ' Connection Dim RecSet ' RecordSet Dim FullFileNameMDB ' путь к файлу MDB Set DatConct = CreateObject("ADODB.Connection") DatConct.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&FullFileNameMDB DatConct.Execute("CREATE TABLE TABLE_NAME (NMK_ID INTEGER, NMK_NOTE VARCHAR") Set RecSet = CreateObject("ADODB.RecordSet") Call RecSet.Open("TABLE_NAME",DatConct,1,3) RecSet.AddNew ' Добавляем запись в таблицу RecSet.Fields(0).Value = TCSActiveModule.Properties..... RecSet.Fields(1).Value = TCSActiveModule.Properties..... RecSet_Calc_VMAT.Update
P.S. А Вы всё таки ответьте на
Бобов писал(а):
Меня вот это очень заинтересовало:valentina писал(а):
Необходимо рассчитать потребность в материалах, комплектующих, стандартных покупных на план производства.
Сделала отчетами (в режиме Работа с ПСп, вкладка Номенклатура). Скорость выполнения неприемлема.Про UserGModule я сейчас не говорю, просто хочу понять отчего "Скорость выполнения неприемлема"?
Сколько записей у Вас на вкладке Номенклатура и какую структуру данных Вы создали для отчёта? Просто от этого действительно сильно зависит скорость отчёта.
Можно ли размер окна UserGModule уменьшить? и как?
Как и у всех модулей https://help.technologics.ru/7.9/TCSAPI … owEx_9.htm
Либо положить на свою форму ввода и там можно делать что угодно.
Либо положить на свою форму ввода и там можно делать что угодно.
Подскажите примером кода пожалуйста, если у меня на форме Form1 есть панель Panel1, как на Panel1 добавить UserGModule?
Сейчас лучше всего так
https://help.technologics.ru/7.9/TCSAPI … dule_9.htm
Call Form.AddTCSModule( UserGModule, "MyModule", "Panel1", True, False, Null )
Достать модуль по имени можно так https://help.technologics.ru/7.9/TCSAPI … ame_13.htm, удалить так https://help.technologics.ru/7.9/TCSAPI … dule_9.htm
Как повесить обработчик события на UserModule? Мне нужно автоматически пересчитывать значение 4го столбца после того, как пользователь ввел/изменил значение в 3ем столбце
При регистрации модуля на форме ввода укажите RegEvents в True https://help.technologics.ru/7.9/TCSAPI … dule_9.htm
Затем на форме ввода добавьте такой код
Sub FormEvent_MyModule_OnModuleEvent( Form, ObjName, Module, EventType, EventParams ) 'Form As ITCSForm, ObjName As String, Module As IPModule, EventType As TMEventsTypes, EventParams As IEventParams if EventType=CSDN_Const.etDLAfterApply Then 'Пользователь сохранил данные End If End Sub
либо форму редактирования свою сделать, и при сохранение все записать.
etDLScrolled и etDLBeforeScroll срабатывает, а на изменения данных и применение изменений в каком либо поле никаких событий не появляется
в обработчике написал
MsgBox "ObjName=" + CStr(ObjName) + vbCr + "EventType=" + CStr(EventType=), vbSystemModal
Возможно так и есть :( UserGModule может действительно этого события не выдывать. Тогда только форма редактирования своя.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
TechnologiCS → TechnologiCS → Использование TechnologiCS API → Вопрос по UserGModule