AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.12.2012, 15:06   #1  
grif is offline
grif
Участник
Аватар для grif
 
236 / 10 (1) +
Регистрация: 31.08.2006
В таблице Sales Header достигнут предел объёма памяти, занимаемый полями одной записи таблицы, и всё равно необходимо добавить новые текстовые поля. Выбран вариант решения, когда создаётся дополнительная новая таблица связанная по первичному ключу как 1:1 к Sales Header. В таком варианте никаких препятствий для добавления новых текстовых полей нет, но есть проблема с отображением всего этого "добра" на форме 42 Sales Order. Хочется чтобы для пользователя подобные технические решения остались незаметными, не доставляли неудобств:
  • Сохранилась возможность фильтрации по полям заголовка документа
  • Редактирование значений полей ничем не отличалось от редактирование полей Sales Header
Первый пункт выполним, если в таблицу Sales Header добавить FlowField Lookup на каждое поле дополнительной таблицы и с отображением и фильтрацией нет никаких проблем (разве что со скоростью этой фильтрации, но при хранении в другой таблице это в любом случае проблема неизбежная). При попытке редактировать значение такого текстового FlowField возникает сообщение вида "Формула вычисления для поля FlowField ... в таблице Продажа Заголовок должна начинаться с 'Sum(...'.". Пытался перехватить и обработать правку вручную в триггерах OnValidate формы и таблицы, но так и не получилось избавиться от сообщения с ошибкой. Есть ли у кого опыт или идеи как избежать выбрасывание этого сообщения об ошибке?
Спасибо
Старый 19.12.2012, 20:44   #2  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Само собой FlowFields в должны быть в таблице Editable=No, такие поля в НАВ'е не для редактирования !

У нас тоже дошло до предела с полями, сделали:
1. На карточке 42, где вы показываете FlowField, надо заменить в SourceExpression FlowField из Sales Header на глобальную переменную.
3. В OnOpenForm(), OnAfterGetRecord(), OnAfterGetCurrRecord:
- делаете CALCFIELDS на требуемый FlowField и показываете его значение в глоб. переменнной
4. В OnAfterValidate поля (где SourceExpression=глобальную перемення!) запускаете функцию, которая передаёт значение глоб. переменнной (которое user именил) в поле доп. таблицы.

Само собой из-за подмены на карточке в SourceExpression табл. поля на глобальную переменную теряется возможность F7-фильтрации, но остаётся по прежнему возможность CTRL+F7 фильтрации
Старый 20.12.2012, 09:31   #3  
grif is offline
grif
Участник
Аватар для grif
 
236 / 10 (1) +
Регистрация: 31.08.2006
Цитата:
Сообщение от AlexB Посмотреть сообщение
Само собой из-за подмены на карточке в SourceExpression табл. поля на глобальную переменную теряется возможность F7-фильтрации, но остаётся по прежнему возможность CTRL+F7 фильтрации
Вот этого и хотелось избежать путём перехватывания изменения FlowField. Пользователям будет трудно объяснить почему старые поля фильтруются нормально, а с новыми надо работать по другому
Старый 20.12.2012, 10:26   #4  
Milk is offline
Milk
Участник
 
242 / 12 (1) ++
Регистрация: 08.06.2006
Видимо, остается такой вариант - в дополнительной таблице должны быть все поля, которые видны в форме 42. Включая дублирующие из 36-й. Уж суммарная длина видимых на форме полей точно не превысит максимальную для таблицы. Источником в 42 форме должна стать новая таблица. Повесить на новую таблицу триггеры, обновляющие соответствующие поля в 36-й (и наоборот, чтобы избежать вычисляемых полей). Лучше, конечно, сделать новую форму вместо 42-й.
Старый 20.12.2012, 11:04   #5  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Выводите новые поля из доп таблицы на новую закладку и объясните пользователям, что по полям на этой закладке ничего фильтроваться не будет.
Старый 20.12.2012, 12:49   #6  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Регистрация: 20.11.2002
Адрес: Msk
Оставьте отображение полей как есть (только запретите редактирование, разумеется)
Тогда фильтроваться все будет как обычно

Нарисуйте к этим полям, например, ассистедиты, напишите там код, обновляющий значение в связанной таблице, научите юзеров
__________________
"Моей лошадке ядрышком полмордочки снесло..."
А.В.Суворов, письма к дочери
Старый 20.12.2012, 15:24   #7  
grif is offline
grif
Участник
Аватар для grif
 
236 / 10 (1) +
Регистрация: 31.08.2006
Спасибо всем за внимание. Раз нет обходного решения, придётся пользователям "прогнуться"
Старый 20.12.2012, 17:25   #8  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
Никто не предложил вроде бы, но можно еще вьюшку сделать и открывать списочную форму на ней. Кнопки открытия карточек документов придется переделывать.

Как пример делал вьюшку для поставщик оборотной ведомости только по тем поставщикам по которым в организации есть операции. (Справочник поставщиков глобальный и их очень много, при том что в каждой организации используется хоть и небольшая но местами пересекающаяся часть поставщиков).
__________________
Want to believe...
Старый 20.12.2012, 22:33   #9  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от Milk Посмотреть сообщение
Источником в 42 форме должна стать новая таблица. Повесить на новую таблицу триггеры, обновляющие соответствующие поля в 36-й (и наоборот, чтобы избежать вычисляемых полей). Лучше, конечно, сделать новую форму вместо 42-й.
Боже упаси!
Ведь тогда придётся заодно переписать весь код во всех menue-buttons, Info-Pane итд. 42-й формы (или заново сдублировать в новой форме), потом не забыть обыскать все обьекты в базе, в которых используется 42-я форма и там всё поменять итд.
Старый 21.12.2012, 13:36   #10  
Milk is offline
Milk
Участник
 
242 / 12 (1) ++
Регистрация: 08.06.2006
Цитата:
Сообщение от AlexB Посмотреть сообщение
Боже упаси!
Ведь тогда придётся заодно переписать весь код во всех menue-buttons, Info-Pane итд. 42-й формы (или заново сдублировать в новой форме), потом не забыть обыскать все обьекты в базе, в которых используется 42-я форма и там всё поменять итд.
Согласен, что звучит страшновато. Но по сути, в каждом случае, где используется Rec, достаточно написать пару строчек - получить его и подставить. За несколько часов можно управиться, я думаю. Но неизящно, конечно... />
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:53.