# Проброшенные функции и объекты Manager в TMS Источник: `H:\Standart-N\base\ZTRADE.FDB`, таблица `groups`, `grouptable = 'TMS'`. Проверены все выгруженные TMS-архивы из текущей базы. В список включены вызовы, которые выглядят как функции/объекты окружения Manager или подключенных модулей, а не как обычный синтаксис TMS Script, VCL/Delphi или стандартные методы компонентов. Описание местами является выводом по использованию в коде, а не официальной сигнатурой. ## `frmManagerXP2.LogIt(text)` Пишет сообщение в журнал/лог Manager. Используется для отладки, протоколирования SQL, бизнес-операций и ошибок. Регистр имени в скриптах разный: `frmmanagerxp2.LogIt`, `frmManagerXP2.logit`, `FrmManagerXP2.LogIt`. ```pascal frmManagerXP2.LogIt('*** Начитаем операцию назначения скидки ***'); frmManagerXP2.LogIt(qWork.SQL.Text); frmManagerXP2.LogIt('*** Выполнено ***'); ``` ## `frmManagerXP2.RunTms(id, sender)` Запускает другой TMS-скрипт по `groups.id`, передавая контекст, чаще `application` или `gsender`. Используется как диспетчер/обертка для переиспользования сценариев. ```pascal frmManagerXp2.RunTms(1029, application); frmManagerXp2.RunTms(1035, application); frmManagerXP2.RunTms(1002, gsender); ``` ## `frmManagerXP2.FindComponent(name)` Ищет компонент главной формы Manager по имени. Через него получают фреймы, гриды, панели, memo логов и другие уже созданные элементы интерфейса. ```pascal fw := frmManagerxp2.FindComponent('FrameWarebase1'); m := frmManagerXP2.FindComponent('mmLog'); FrameDocContainer := frmManagerXP2.FindComponent('FrameDocContainer1'); ``` ## `frmManagerXP2.GetWDict(dictSid, var id, var caption, params)` Открывает выбор из справочника и возвращает выбранный `id`/`caption`. По коду применяется для товаров, агентов, льгот/рецептов и других словарей. ```pascal if frmManagerXP2.GetWDict('NAME_WARE', id, caption, qParams.Params) then frmManagerXP2.LogIt('Выбран товар: ' + caption); frmmanagerxp2.GetWDict('AGENTS', id, caption, nil); ``` ## `frmManagerXP2.ShowWDict(dictSid, params)` Открывает форму/фрейм справочника с параметрами, без явного возврата выбранного значения. Используется для показа детализации или готового списка. ```pascal frmmanagerxp2.ShowWDict('INV_DETAIL', qParams.Params); frmmanagerxp2.ShowWDict('ZAKAZ_KRITK', nil); frmManagerXP2.ShowWDict(DOC_DETAIL_DICT_SID, qp.Params); ``` ## `frmManagerXP2.GetValue(field, rect, var value, default, params, caption, hint)` Показывает ввод значения рядом с ячейкой/полем и возвращает `False`, если пользователь отменил ввод. В базе замечено при ручном вводе фактического количества. ```pascal if frmManagerXP2.GetValue(gsender.qList.FieldByName('REALQUANT'), DictPosRect, sv, '1', nil, q_work.FieldByName('caption').AsString, '') = False then exit; ``` ## `frmManagerXP2.ShowBaloonHint(text, mode, ...)` Показывает всплывающую подсказку/уведомление в интерфейсе Manager. Иногда вызывается с дополнительными параметрами выравнивания и родительского контрола. ```pascal frmManagerXP2.ShowBaloonHint( TMenuItem(Sender).Caption + ' - не реализовано!', 1); ``` ## `frmManagerXP2.DocArchive.LocateDoc(docId, ..., mode, ...)` Позиционирует журнал документов на нужном документе. Используется, когда TMS создал/нашел документ и нужно показать его оператору. ```pascal frmManagerXP2.DocArchive.LocateDoc(doc_id, nil, 1, nil); ``` ## `dm.TempQuery(owner)` Создает временный `TIBQuery`, уже привязанный к рабочему подключению/окружению Manager. Это самый частый безопасный способ выполнить SQL из TMS. ```pascal qWork := dm.TempQuery(nil); qWork.Active := False; qWork.SQL.Text := 'select * from params'; qWork.Active := True; ``` ## `dm.FindComponent(name)` Ищет компонент в data module `dm`. Чаще всего так достают основную базу `db`, стили панелей или другие общие компоненты. ```pascal db := dm.FindComponent('db'); q_work.Database := db; trn.DefaultDatabase := db; ``` ## `dm.LogIt(text)` Логирование через data module. По смыслу близко к `frmManagerXP2.LogIt`, встречается в производственных/технологических скриптах. ```pascal dm.LogIt('Заполняем детализацию приходного документа'); dm.logit(qWork.SQL.Text); ``` ## `dm.bLocate(dataset, fieldName, value)` Позиционирует dataset на записи по полю и значению. Встречается после создания/оплаты документов, чтобы обновить текущую позицию в списке. ```pascal new_id := FrameMoney.NewDoc(doc_type, sagent_id); dm.bLocate(qDocs, 'id', new_id); ``` ## `dm.Display(text)` Показывает пользователю сообщение через механизм Manager. По использованию похоже на предупреждение/информационный вывод, встроенный в приложение. ```pascal dm.Display('Запрос подсчета количества может привести к зависанию программы.'); ``` ## `dm.GetGoodNameID(name)` Ищет/возвращает идентификатор наименования товара по строковому имени. Используется при сопоставлении исходного названия товара с базовым справочником. ```pascal GoodNameID := Trim(dm.GetGoodNameID( Trim(q_insert.FieldByName('orig_name').AsString))); ``` ## `dmDocs.NewDoc(docType, agentId, ..., docNum, date)` Создает новый документ заданного типа. В отличие от ручного SQL, вероятно выполняет внутреннюю инициализацию документа Manager. ```pascal doc_id := dmDocs.NewDoc(36, agent_id, 0, IntToStr(docnum), Now); ``` ## `dmDocs.ShowDoc(docId)` Открывает/показывает документ по идентификатору. ```pascal doc_id := dmDocs.NewDoc(36, agent_id, 0, IntToStr(docnum), Now); dmDocs.ShowDoc(doc_id); ``` ## `dmReports.ShowFRReport(reportId, params, ...)` Запускает FastReport-печатную форму по id отчета и строке параметров. Встречаются варианты с 2-5 аргументами и указанием таблицы отчетов. ```pascal dmReports.ShowFRReport(report_id, 'sqltext=' + sqltext, nil, False); dmreports.ShowFRReport(50, str, nil, False, 'SP$FRREPORTS'); ``` ## `Application.FindComponent(name)` Ищет глобально зарегистрированный компонент приложения. В TMS применяется, когда нужный фрейм не лежит напрямую на `frmManagerXP2`. ```pascal FrameMoney := Application.FindComponent('FrameMoney'); p := Application.FindComponent('TMSfrmDocDetail_' + n); ``` ## `Application.MessageBox(text, caption, flags)` Показывает системный message box через объект приложения. Возвращаемое значение используется для подтверждений. ```pascal case Application.MessageBox('Оприходовать все заказы?', 'Оприходование', $00000004 + $00000020) of 6: DoImport; end; ``` ## `gsender.FindComponent(name)` Ищет компонент внутри объекта, из которого запущен TMS. Это основной способ добраться до контролов текущего фрейма/формы. ```pascal c := gsender.FindComponent('ApmList'); pn := gsender.FindComponent('pnTop'); edcf := TcfSelectEdit(gsender.FindComponent('ed')); ``` ## `gsender.GetFocusedValue(grid, fieldName)` Возвращает значение поля из текущей строки грида. Используется в сценариях заказов/оплат, где действие применяется к выделенной записи. ```pascal make_id := gsender.GetFocusedValue(gridMakeList, 'id'); doc_id := gsender.GetFocusedValue(gridDocs, 'id'); ``` ## `gsender.ImmediateSelect()` Похоже, принудительно выполняет/подтверждает быстрый выбор в текущем фрейме. В коде есть пометка: "если в менеджере поддерживается". ```pascal gsender.ImmediateSelect(); ``` ## `gsender.miChildClick(menuItem)` Программно вызывает обработчик клика дочернего меню/пункта. Используется для открытия детализации документа через существующую логику фрейма. ```pascal dDetail := TMenuItem.Create(nil); dDetail.Tag := DOC_DETAIL_DICT_ID; gsender.miChildClick(dDetail); ``` ## `FrameAgents.GetId(var id, var caption, mode)` Открывает выбор контрагента/агента и возвращает id и название. Используется перед созданием документов на выбранного агента. ```pascal FrameAgents := Application.FindComponent('FrameAgents'); if not FrameAgents.GetId(agent_id, sagent_caption, 0) then exit; ``` ## `FrameMoney.NewDoc(docType, agentId)` Создает денежный/оплатный документ из фрейма оплат. После создания скрипты обычно позиционируют `qDocs` на новом документе. ```pascal FrameMoney := Application.FindComponent('FrameMoney'); new_id := FrameMoney.NewDoc(doc_type, sagent_id); dm.bLocate(qDocs, 'id', new_id); ``` ## `FrameMake.GetFocusedValue(grid, fieldName)` Возвращает значение из выбранной строки производственного/заказного грида. Похоже на специализированный аналог `gsender.GetFocusedValue`. ```pascal make_id := FrameMake.GetFocusedValue(gridMakeList, 'id'); doc_id := FrameMake.GetFocusedValue(gridDocs, 'id'); ``` ## `FrameMake.GetFocusedString(grid, fieldName)` Возвращает строковое значение из текущей строки грида. В коде часто сразу приводится к `Integer`. ```pascal make_id := StrToInt(FrameMake.GetFocusedString(gridMakeList, 'id')); name_id := StrToInt(FrameMake.GetFocusedString(gridDetail, 'name_id')); ``` ## `FrameMake.SetStatus(makeId)` Обновляет статус производственного/заказного объекта после изменений. ```pascal FrameMake.SetStatus(make_id); FrameMake.CalcSum(make_id); ``` ## `FrameMake.CalcSum(makeId)` Пересчитывает сумму/итоги для производственного/заказного объекта. ```pascal FrameMake.SetStatus(make_id); FrameMake.CalcSum(make_id); ``` ## `FrameMake.DocIds(text)` По использованию обновляет/передает набор связанных документов для фрейма заказов/производства. Встречается после массового оприходования. ```pascal FrameMake.DocIds(' '); ``` ## `FrameMake.DetailIds(text)` По использованию обновляет/передает набор связанных строк детализации для фрейма заказов/производства. ```pascal FrameMake.DetailIds(' '); ``` ## `FrameDocContainer.ShowPageByDoc_id(docId)` Открывает страницу/вкладку документа по id внутри контейнера документов. ```pascal FrameDocContainer := frmManagerXP2.FindComponent('FrameDocContainer1'); FrameDocContainer.ShowPageByDoc_id(doc_id); ``` ## `frame.dictmacro(sqlMask)` Разворачивает макросы текущего словаря/фрейма внутри SQL-маски. Используется после ручного добавления условия в `SQLMask`. ```pascal ed.SQLMask := inserttowhere(ed.SQLMask, 'CASH_DOC_PAYED < summa'); ed.SQLMask := frame.dictmacro(ed.SQLMask); ``` ## `frmNotify.ShowNotify(text)` Показывает уведомление пользователю, вероятно всплывающее и менее блокирующее, чем `MessageBox`. ```pascal frmNotify.ShowNotify('Внимание, новые отложенные документы.' + #13#10 + 'Откройте отложенные документы из журнала документов.'); ``` ## `frmSpacePro.LogIt(text)` Логирование внутри модуля/формы `frmSpacePro`. Встречается в аналитическом TMS с построением отчетов, сеток и графиков. ```pascal frmSpacePro.LogIt('Ошибка при построении печатных форм: ' + GLEM); frmSpacePro.LogIt(q.SQL.Text); ``` ## `frmSpacePro.ShowFRReport(reportId, params)` Запускает FastReport из контекста `frmSpacePro`. ```pascal frmSpacePro.ShowFRReport(REPORT_ID, memo1.Lines.Text); ``` ## `frmSpacePro.CreateFRReportFrames(list, reportId, params)` Создает фреймы/страницы печатных форм для набора отчетов. По коду используется перед отображением нескольких отчетных представлений. ```pascal Reports := frmSpacePro.CreateFRReportFrames( List, REPORT_ID, memo1.Lines.Text); ``` ## `CreateFrame(dictSid, owner)` Создает фрейм справочника по SID. Используется для программного создания словаря, например правил наценки или профилей. ```pascal Wdict := CreateFrame('NAC_RULES', nil); Wdict.Init(Wdict.Id); ``` ## `GetCustomParams(stringList, caption)` Показывает диалог ввода параметров отчета/формы и заполняет `TStringList`. Возвращает `True`, если пользователь подтвердил ввод. ```pascal sl.Values['REPORT_ID'] := IntToStr(report_id); if GetCustomParams(sl, 'заполните значения') then dmReports.ShowFRReport(report_id, 'sqltext=' + sqltext, nil, False); ``` ## `cfShellExecute(fileName, params, workDir, operation, showMode)` Обертка над запуском внешней команды/программы. Возвращает успех/ошибку, в отличие от обычного `ShellExecute`. ```pascal if not cfShellExecute('"' + BROWSER_PATH + '"', '"' + url + '"', s, 'open', 5) then Application.MessageBox('Не удается открыть браузер', 'Ошибка', MB_ICONSTOP); ``` ## `cfUtils.StrToMStream(text, stream)` Записывает строку в memory stream. Используется вместе с кодированием/декодированием данных. ```pascal ms := TMemoryStream.Create; cfUtils.StrToMStream(s, ms); cfUtils.codestreambykey(ms, key); ``` ## `cfUtils.codestreambykey(stream, key)` Кодирует или декодирует поток по ключу. По цепочке вызовов используется для преобразования строки через `TMemoryStream`. ```pascal cfUtils.StrToMStream(s, ms); cfUtils.codestreambykey(ms, key); result := cfUtils.MStreamToStr(ms); ``` ## `cfUtils.MStreamToStr(stream)` Преобразует memory stream обратно в строку. ```pascal cfUtils.codestreambykey(ms, key); result := cfUtils.MStreamToStr(ms); ``` ## `inserttowhere(sqlMask, condition)` Добавляет условие в `where` SQL-маски. Используется при переключении фильтров документов оплаты. ```pascal ed.SQLMask := inserttowhere(ed.SQLMask, 'abs(CASH_DOC_PAYED - abs(iif(doc_base_type = 1, summa_o, summa)))>=1'); ``` ## `StartTransaction(transaction)` Безопасно запускает транзакцию, вероятно с проверкой текущего состояния. Встречается вместо прямого `Transaction.StartTransaction`. ```pascal StartTransaction(qWork.Transaction); qWork.ExecSQL; qWork.Transaction.Commit; ``` ## `VarToFloat(value)` Преобразует variant-значение в число с плавающей точкой. Полезно для значений из грида/диалога, где тип может быть нестрогим. ```pascal if VarToFloat(sv) > q_work.FieldByName('REALQUANT').AsFloat then exit; ``` ## `vartobool(value)` Преобразует variant-значение грида/дерева в Boolean. Часто используется для чекбоксов в `TdxTreeList`. ```pascal if vartobool(tlProfiles.Items[i].Values[0]) then sl.Add(IntToStr(tlProfiles.Items[i].Values[1])); ``` ## `isInt(text)` Проверяет, является ли строка целым числом. Встречено при обработке нажатий/ключей в гриде. ```pascal if isInt(key) = False then exit; ``` ## `EncodeURLElement(text)` URL-кодирует строку для подстановки в query-параметр. Используется в TMS сводных web-остатков. ```pascal url := baseUrl + '?date=' + GetEncodedDate + '&query=' + EncodeURLElement(s); ``` ## `split(text, delimiter, list)` Разбивает строку в `TStringList` по разделителю. Встречено в обработке поискового запроса. ```pascal slAtoms := TStringList.Create; split(result, ' ', slAtoms); ``` ## `unsplit(list, delimiter)` Собирает `TStringList` обратно в строку с разделителем. ```pascal slAtoms.Strings[i] := RemoveBadSymbols(slAtoms.Strings[i]); result := unsplit(slAtoms, ' '); ``` ## `RemoveBadSymbols(text)` Очищает строку от нежелательных символов. Используется перед сборкой поискового запроса для web-остатков. ```pascal slAtoms.Strings[i] := RemoveBadSymbols(slAtoms.Strings[i]); ```