Repetition container field

Практические советы по работе с FileMaker, типичные задачи и их решения. У вас вопрос? Пишите сюда.
Ответить
Andrew Gorenkov
Сообщения: 12
Зарегистрирован: 11 сен 2017, 20:34

Repetition container field

Сообщение Andrew Gorenkov » 17 окт 2017, 14:26

Здравствуйте,

Столкнулся с такой проблемой. Есть Calculation Repetition Field (Number), в каждом поле может быть значение 1 или 0. Есть Container Filed - в нём png, и есть ещё одно Calculation Repetition Field (Container).
Хочу в зависимости от значения в поле Calculation Repetition Field (Number), если значение "1", показывать картинку которая хранится в Container Filed в соответствующем поле Calculation Repetition Field (Container).
Формула поля Calculation Repetition Field (Container):

Код: Выделить всё

If ( Let ( [ user = GetRepetition ( userID ; Get ( CalculationRepetitionNumber ) ); today = Get ( CurrentDate ) ] ; ExecuteSQL ( "SELECT \"Action\" FROM \"records\" WHERE \"UserID\" = ? AND \"Date\" = ? " ; ""; "" ; user ; today ) ) = 1 ; GetField ( circleData ) ; "" )
Если вместо GetField ( circleData ) поставить простой текст, то он отображается в нужном repetition, а вот с картинкой никак не получается. :( Как это побороть?

Заранее благодарен.

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Repetition container field

Сообщение andrey volkov » 17 окт 2017, 15:00

а зачем GetField ?
просто ссылка на нужное поле не работает?


2) user = GetRepetition ( userID ; Get ( CalculationRepetitionNumber )
в данном случае идентично user = userID

Andrew Gorenkov
Сообщения: 12
Зарегистрирован: 11 сен 2017, 20:34

Re: Repetition container field

Сообщение Andrew Gorenkov » 17 окт 2017, 15:05

Просто ссылка не работает.

Пробовал засунуть картинку в переменную в Let, - тоже не работает.

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Repetition container field

Сообщение andrey volkov » 17 окт 2017, 15:11

еще раз: картинка содержится в поле с одной репетицией?
тогда ссылка должна быть Table::cont[1]

Andrew Gorenkov
Сообщения: 12
Зарегистрирован: 11 сен 2017, 20:34

Re: Repetition container field

Сообщение Andrew Gorenkov » 17 окт 2017, 15:18

Тёзка, большое спасибо! Как ни странно, но когда указал репетицию [1], тогда всё заработало. Думал что если поле с одной репетицией - его не надо так конкретизировать.

Код: Выделить всё

If ( Let ( [ user = GetRepetition ( userID ; Get ( CalculationRepetitionNumber ) ); today = Get ( CurrentDate ) ] ; ExecuteSQL ( "SELECT \"Action\" FROM \"records\" WHERE \"UserID\" = ? AND \"Date\" = ? " ; ""; "" ; user ; today ) ) = 1 ; circleData[1] ; "" )

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Repetition container field

Сообщение andrey volkov » 17 окт 2017, 15:20

пожалуйста
я еще что-то в пункте 2 написал....

Andrew Gorenkov
Сообщения: 12
Зарегистрирован: 11 сен 2017, 20:34

Re: Repetition container field

Сообщение Andrew Gorenkov » 17 окт 2017, 15:34

:D пункт 2 я тоже прочитал. Спасибо.

Аватара пользователя
Arcady
Администратор
Сообщения: 201
Зарегистрирован: 10 сен 2017, 20:45
Контактная информация:

Re: Repetition container field

Сообщение Arcady » 18 окт 2017, 03:18

Andrew Gorenkov писал(а):
17 окт 2017, 15:18
Как ни странно, но когда указал репетицию [1], тогда всё заработало. Думал что если поле с одной репетицией - его не надо так конкретизировать.
Это как раз ни странно, а FileMaker именно так и работает. Дело в том, что при работе с репетиционными полями, вычисляются значения для каждой репетиции. При вычислении FileMaker для каждой репетиции вычисляемого поля ищет значения у используемых в вычислении полей в соответствующих репетициях. То есть если c= a+b, то, для 5-й, например репетиции, c[5]=a[5]+b[5].
Если же в калькуляции участвует обычное поле, то FileMaker ищет и не находит для нее соответствующих значений, в итоге корректно вычисляется только 1-я репетиция, а остальные вычисляются исходя из пустого значения нерепетиционного поля (значение же не нашлось). Чтобы такой ошибки не случилось, необходимо явно указывать значение какой репетиции брать, то есть писать Название поля[1]
Альтернатива обрамлять такие поля функцией Extend, но калькуляция тогда выглядит более громоздко.
Аркадий Перла.
ТриА. Разработка решений для FileMaker
http://tria.pw

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Repetition container field

Сообщение andrey volkov » 18 окт 2017, 04:10

я не проверял, но, вроде, согласно справке, Extend применимо к выражениям: Extend (price * rate + discount) - repitfield
и тогда запись становится уже менее громоздкой и может использоваться как альтернатива
то есть в зависимости от ситуации можно использовать один или другой вариант

Ответить