Имя: Пароль:
1C
1С v8
Подстановка имен полей в ДБФ
0 FreeWay
 
11.05.17
12:59
ИмяПоля="ИБ.SUM"+НомерСтолбца;
ИмяПоля=ИмяПоля+Элем.СуммаЛьготыОборот;
ИБ.Записать();

Каким образом можно подставить в значение полей файла ДБФ имя "ИмяПоля".
По факту получается тип строка, что крайне не подходит.
???
1 1dvd
 
11.05.17
13:07
Ничо не понял, а каким еще типом можно сделать имя поля?
2 FreeWay
 
11.05.17
13:08
Нужно подменить тип со строкового на тип имя поля файла ДБФ
3 бомболюк
 
11.05.17
13:08
походу новый тренд: хранить инфу в именах полей, а не в строках и колонках.
4 FreeWay
 
11.05.17
13:12
(1) Результат выполнения ИмяПоля=ИмяПоля+Элем.СуммаЛьготыОборот

равен ИБ.SUM2204.23 -(т.б. ИБ.SUM2 имя поля + 204,23 СуммаЛьгот)
интерпретатор языка 1с воспринимает это как строку ИБ.SUM2204.23, а не ИБ.SUM2=ИБ.SUM2+204.23;
5 catena
 
11.05.17
13:12
<тип имя поля файла ДБФ>

А там отдельный тип?
6 1dvd
 
11.05.17
13:13
Кажется я протелепатировал что ты хочешь.
Поле = ИБ.Поля.Найти(ИмяПоля);
7 catena
 
11.05.17
13:13
(4)Это называется значение... а не имя поля... и не тип...
8 FreeWay
 
11.05.17
13:15
в кратце, цель не писать длинный кусок с ЕслиИначе,
а подставить в имена полей цифровые значения ИБ.SUM1, ИБ.SUM2, ИБ.SUM3 и т.д.
9 FreeWay
 
11.05.17
13:18
(6) Этот вариант близок, но у объекта XBase что то метод найти подобный я не могу ((
10 h-sp
 
11.05.17
13:19
ИБ[ИмяПоля + "2"] = ИБ[ИмяПоля + "2"] + Элем.СуммаЛьготыОборот
11 Garykom
 
гуру
11.05.17
13:19
(9) Плохо искал

КоллекцияПолейXBase (XBaseFieldsCollection)
Найти (Find)
Синтаксис:

Найти(<ИмяПоля>)
Параметры:

<ИмяПоля> (обязательный)

Тип: Строка.
Имя поля XBase.
Возвращаемое значение:

Тип: ПолеXBase; Неопределено.
Если указанного поля нет, то возвращается значение Неопределено.
Описание:

Осуществляет поиск поля по наименованию.

Доступность:

Сервер, толстый клиент, внешнее соединение.
12 FreeWay
 
11.05.17
13:21
XBase (XBase)
Найти (Find)
Синтаксис:

Найти(<Ключ>, <Режим>)
Параметры:

<Ключ> (обязательный)

Тип: Строка.
Значение выражения текущего индекса.
<Режим> (обязательный)

Тип: Строка.
Режим поиска записей:
"=" - ищет запись на точное соответствие ключу;
">=" - ищет запись на точное соответствие с ключом или большую;
">" - ищет запись с большим ключом;
"<=" - ищет запись на точное соответствие с ключом или меньшую;
"<" - ищет запись с меньшим ключом.
Возвращаемое значение:

Тип: Булево.
Истина - запись найдена; Ложь в противном случае.
Описание:

Осуществляет поиск записи, соответствующей указанному значению ключа по текущему индексу и режиму поиска, переданному в качестве параметра. Указатель устанавливается на найденную запись.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.
Примечание:

Следует отметить, что вычисление значения индекса при работе XBase-объекта с таблицей базы данных производится объектом самостоятельно на основании выражения, переданного ему при создании ключа. При вызове данного метода значение Ключ должно быть вычислено средствами встроенного языка, что может представлять определенные трудности, если индекс составной, поля, включенные в выражение индекса, отличны от строковых и т.д. Поэтому применимость данного метода ограничена случаем использования простых строковых выражений индекса. В более сложных случаях следует применять универсальный метод НайтиПоКлючу.
Пример:

// Поиск записи по значению ключа

xB.ТекущийИндекс = xB.Индексы.IDXCODE; // индекс CODE

ЗаписьНайдена = xB.Найти("00001", ">=");


См. также:

XBase, свойство ТекущийИндекс
13 h-sp
 
11.05.17
13:22
(12) это не то. От слова "совсем".
14 Garykom
 
гуру
11.05.17
13:22
76=86?
15 SSSSS_AAAAA
 
11.05.17
13:22
(8) (10)
В именах полей не могут быть одни только цыфры.
16 FreeWay
 
11.05.17
13:27
(10) Поле объекта не обнаружено (ИБ.SUM2)
17 Garykom
 
гуру
11.05.17
13:30
(16) Не может быть Поля в DBF с именем "ИБ.SUM2"

Только к примеру "SUM2" и все, никаких точек и(или) не латинских символов
18 SSSSS_AAAAA
 
11.05.17
13:31
(16) А оно было создано?
19 FreeWay
 
11.05.17
13:35
(18) поле есть в исходном файле (30-ть SUM от 1 до 30)
20 SSSSS_AAAAA
 
11.05.17
13:37
(19) Ну вот и обращайтесь к ним по именам, а не ищите способ почесать правое ухо левой ногой.
21 FreeWay
 
11.05.17
13:38
Поле="SUM"+НомерСтолбца;
                            ИмяПоля=ИБ.Поля.Найти(Поле);
                            ИмяПоля=ИмяПоля+Элем.СуммаЛьготыОборот;

Преобразование значения к типу Число не может быть выполнено                ИмяПоля=ИмяПоля+Элем.СуммаЛьготыОборот;


Надо Тупо записать что бы выполнялось:
ИБ.SUM2=ИБ.SUM2+Элем.СуммаЛьготыОборот;
ИБ.Записать();
23 Garykom
 
гуру
11.05.17
13:40
(21) XBase (XBase)
УстановитьЗначениеПоля (SetFieldValue)
Синтаксис:

УстановитьЗначениеПоля(<ИмяПоля>, <Значение>)
Параметры:

<ИмяПоля> (обязательный)

Тип: Число; Строка.
Имя или индекс поля. Индекс полей начинается с 0.
<Значение> (обязательный)

Тип: Число; Строка; Дата; Булево.
Значение поля.
Описание:

Устанавливает значение поля по его индексу или имени.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.

(22) ))
24 h-sp
 
11.05.17
13:43
(21) у тебя должна быть текущая строка в таблице, куда ты пишешь. Спозиционируйся сначала на какой-то строчке. Что ты пишешь в какие-то поля фантастические?
25 catena
 
11.05.17
13:43
(23)Ну промахнулась, бывает :)
26 SSSSS_AAAAA
 
11.05.17
13:44
(21) Поле="SUM"+НомерСтолбца;

Вы себе как представляете сложение строки с числом? Вы вообще что про типы данных и их совместимость в выражениях знаете?
27 Garykom
 
гуру
11.05.17
13:47
(26) В delphi нету неявного приведения типов ))
28 catena
 
11.05.17
13:47
(26)1С преобразует по типу первого слагаемого.
29 FreeWay
 
11.05.17
13:48
(26) имя поля тип строковый, поэтому SUM+2.
(24) текущая строка имеется.
30 FreeWay
 
11.05.17
13:55
отработал вариант (10) , а именно
ИмяПоля="SUM";
ИБ[ИмяПоля + НомерСтолбца] = ИБ[ИмяПоля + НомерСтолбца] + Элем.СуммаЛьготыОборот;
ИБ.Записать();
31 Garykom
 
гуру
11.05.17
14:04
А мог и такое
ИБ.УстановитьЗначениеПоля("ИмяПоля + НомерСтолбца", ИБ.ПолучитьЗначениеПоля("ИмяПоля + НомерСтолбца")+Элем.СуммаЛьготыОборот);
написать
32 FreeWay
 
11.05.17
14:43
(31) и этот вариант рабочий, проверенно!