Теперь меня заинтересовало вот что.
Вполне логично от пользователя ожидать, что ему при работе с данными (вводе или изменении), захочется видеть, как новые данные влияют на результат.
Ну например, пользователь меняет\вводит данные по кварталам и сразу видит как меняется годовое значение (ну если мы положим, что год у нас четко равен сумме кварталов). В bps, в bsp приложении, на лэйаут навешивалась функция планирования, которая выполнялась при изменении и примерно так, хотя довольно таки медленно, все и работало (или пользователь мог ввести сразу несколько значений и только потом нажать "ентер").
В случае екселя и IP, нужно что-то придумывать. Вот что мне придумалось:
1. Использовать в плановом запросе только те значения, которые надо поменять вручную, расчетные же - отображать рядом с помощью екселевских формул, а при сохранении вызывать плановую последовательность, в которой на фоксе дублировать екселевский алгоритм (если расчетные показатели должны быть записаны в куб) и потом сохранять. Минусы в том, что в какой-то момент екселевский (или фоксовский) расчет может быть изменен без синхронного изменения своего двойника и тогда получим расхождение данных записанных в куб и отображаемых в форме.
2. Перехватывать нажатие ентера и по нему выполнять плановую функцию. Получится такой же механизм как в BSP, но... в BSP мы "знаем" на каком уровне\пакете\формате была вызвана функция (точнее - мы определяем конкртеную функцию для каждого уровня\пакета\формата), а в случае перехвата ентера в екселе надо либо как-то узнавать это (например по позиции курсора), либо писать функцию, которая бы могла быть вызвана при измененении в любом из запросов книги, кроме того - в BSP после отработки функции данные обновлялись сами на тех лэйаутах, где это необходимо (если, скажем, лэйаут был на неактивной вкладке, то он обновлялся только при ее открытии), а
в Ексель, видимо, придется обновлять все, поскольку, насколько я понял, при переходе между страницами данные не актуализируются самостоятельно? Да и обновится ли оно из VB?3. Писать "целое приложение на VBA" - на скрытом листе вызывать плановый запрос, макросом копировать его на специальный открытый лист (или заполнять ячейки с использованием BexGetData, кстати -
BexGetData не будет повторно запрашивать значения переменных и данные с сервера?), где там нарисовать всяких красивостей, расчетов екселевских, защит ячеек, списков выпадающих и т.д. А
по нажатию на кнопку сохранения копировать нужные значения в нужные позиции запроса на скрытой странице и потом вызывать функцию сохранения, сработает так? (еще не пробовал)
4. Может есть какой-то антипод для функции BexGetData - какой-нибудь BExPutData (поискал такую - в хелпе не находит.

)
Прокомментируйте, плиз, варианты и порекомендуйте - какой считается наиболее правильным и безотказным? И если на какие-то вопросы из пунктов ответите - то тоже большое спасибо.
Самому мне кажется, что наиболее надежный - 2-й вариант (наверно еще можно пробовать перехватывать не нажатие ентера, а изменение ячейки?), а наиболее красивый и удобный для пользователя - 3-й.