powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Запрос через COMConnector - длина поля
11 сообщений из 11, страница 1 из 1
Запрос через COMConnector - длина поля
    #37725487
_Cepera_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соединяюсь в Delphi с 1С через COM, выполняю запросы. Получаю РезультатЗапроса.Колонки у которых есть свойства Ширина, но в ней число меньше настоящего размера поля - подозреваю, что это отображаемая длина, как получить полную?

Код Delphi:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
function TdmlC.DataSetBy1CQuery(AText: string; Params: Variant): TClientDataSet;
var
  lCQuery, lCQueryResult, lCColumns, lCColumn :Variant;
  lCResultSelection :Variant;
  lCColTypes, lCDataType :Variant;
  StrDataType :string;
  i :Integer;
  FieldIsLink: array of Boolean;
begin
  Result := nil;

  if VarIsEmpty(lCDb) then // = Unassigned
    ConnectTo1C;

  lCQuery := lCDb.NewObject('Запрос');
  try
    lCQuery.Текст := AText;

    if (not VarIsNull(Params)) then
    begin
      for i := VarArrayLowBound(Params, 1) to VarArrayHighBound(Params, 1) do
      begin
        lCQuery.УстановитьПараметр(
          Params[i][0],
          lCDb.ЗначениеИзСтрокиВнутр(Params[i][1])
        );
      end;
    end;

    lCQueryResult := lCQuery.Выполнить();

    Result := TClientDataSet.Create(self);
    Result.FieldDefs.Clear;

    lCColumns := lCQueryResult.Колонки;
    if lCColumns.Количество > 0 then
    begin
      i := lCColumns.Количество;
      SetLength(FieldIsLink, i);

      for i := 0 to lCColumns.Количество - 1 do
      begin
        lCColumn := lCColumns.Получить(i);
        with Result.FieldDefs.AddFieldDef do
        begin

          Name := lCColumn.Имя;

          FieldIsLink[i] := False;

          lCColTypes := lCColumn.ТипЗначения.Типы();
          if lCColTypes.Count() <> 0 then
          begin
              lCDataType := lCColTypes.Get(0);
              if not VarIsNull(lCDataType) then
              begin
                strDataType := lCDb.String(lCDataType);

                if strDataType = 'Булево' then
                  DataType := ftBoolean
                else if strDataType = 'Дата' then
                  DataType := ftDateTime
                else if strDataType = 'Число' then
                  DataType := ftFloat
                else if strDataType = 'Строка' then
                begin
                  DataType := ftString;
                  Size := 256; //Size := Column.Ширина; ????
                end
                else
                begin
                  DataType := ftString;
                  FieldIsLink[i] := True;
                  Size := 256; //ссылка
                end;

              end;
          end;

        end; //adddef

      end; //for

    end; //if count > 0

    Result.CreateDataSet;
    lCResultSelection := lCQueryResult.Выбрать();
    while lCResultSelection.Next do
    begin
      Result.Append;
      for i := 0 to Result.FieldCount - 1 do
        if FieldIsLink[i] then
          Result.Fields[i].Value :=
            lCDb.ЗначениеВСтрокуВнутр(lCResultSelection.Получить(i))
        else
          Result.Fields[i].Value := lCResultSelection.Получить(i);
      Result.Post;
    end;

    Result.First;

  finally
    lCQuery := Unassigned;
    lCQueryResult := Unassigned;
    lCColumns := Unassigned;
    lCColumn := Unassigned;
    lCColTypes := Unassigned;
    lCDataType := Unassigned;
    lCResultSelection := Unassigned;
  end;

end;
...
Рейтинг: 0 / 0
Запрос через COMConnector - длина поля
    #37725647
Zerro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Cepera_,

а какой тип элемента "Ширина" и если страка какой длины он в конфе стоит.
...
Рейтинг: 0 / 0
Запрос через COMConnector - длина поля
    #37725794
_Cepera_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zerro,
Ширина - это "Число", в запросе равно 32-м

В конфигурации стоит:
Тип = Строка
Длина = 0
Допустимая длина = переменная
...
Рейтинг: 0 / 0
Запрос через COMConnector - длина поля
    #37726675
Zerro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Cepera_Zerro,
Ширина - это "Число", в запросе равно 32-м

В конфигурации стоит:
Тип = Строка
Длина = 0
Допустимая длина = переменная
обрезай пробелы..переводи в число.
...
Рейтинг: 0 / 0
Запрос через COMConnector - длина поля
    #37726771
_Cepera_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zerroобрезай пробелы..переводи в число.
Ты не понял. Я выполняю запрос и не могу понять какой длины столбец, т.е. на 1С код будет что-то вроде этого
Код: javascript
1.
2.
РезультатЗапроса = Запрос.Выполнить();
ДлинаПоля = РезультатЗапроса.Колонки[0].Ширина; //равно 30-ти, а должно быть больше
...
Рейтинг: 0 / 0
Запрос через COMConnector - длина поля
    #37726797
pail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Cepera_,
В текстовом поле неограниченной длины может быть все что угодно - от "пустая строка" до огромного текста.
Так что заранее максимальную длину оценить можно только в частном случае - если заранее знать, что именно хранится в таком поле конкретной таблицы.
...
Рейтинг: 0 / 0
Запрос через COMConnector - длина поля
    #37726811
_Cepera_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pail, а как то можно узнать что данная колонка запроса с переменной длиной?
...
Рейтинг: 0 / 0
Запрос через COMConnector - длина поля
    #37726837
The Dim!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не колонка с результатом запроса с переменной длинной, а реквизит объекта, который выбирается запросом имеет переменную длину. Узнать это можно через метаданные.
...
Рейтинг: 0 / 0
Запрос через COMConnector - длина поля
    #37726839
pail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Cepera_,
у запроса - никак. А у объекта-источника данных спросить можно, через Метаданные().
...
Рейтинг: 0 / 0
Запрос через COMConnector - длина поля
    #37726849
The Dim!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В запросе можно только базовый тип значения узнать - "Строк", "Число"... - но не длину/точность. Вообще конечно странно, что 1С не включило в набор функций элементарные "СтрДлина" ...
...
Рейтинг: 0 / 0
Запрос через COMConnector - длина поля
    #37726861
_Cepera_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ясно, спасибо всем
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Запрос через COMConnector - длина поля
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]