Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Sergio
Зарегистрирован: 05.01.2009 Сообщения: 18
|
Добавлено: Вт Июл 31, 2012 12:45 pm Заголовок сообщения: Смена типа корреспондента |
|
|
Необходимо пройтись по папке и для всех корреспондентов типа "предприятие" поменять тип на "Физ. лицо".
Когда прохожу в цикле:
Код: | Set Ag = WorkArea.Agent("опр. ID")
Ag.Type = 4
Ag.Save |
Возвращаюсь в меню корреспондентов, вижу что иконки поменялись, но сворачиваю папочку назад и разворачиваю и вижу что опять иконки стали прежними, тип корреспондента так и не поменялся.
Если выполнять это все через запрос:
Код: | UPDATE AGENTS Set AG_TYPE = 4 WHERE AG_TYPE = 1 |
то работает. В чем может быть причина. Стандарт 7. Акцент 7.4 (531). |
|
Вернуться к началу |
|
|
kris
Зарегистрирован: 12.01.2006 Сообщения: 371
|
Добавлено: Чт Авг 02, 2012 10:08 am Заголовок сообщения: |
|
|
А не работает смена типа корреспондента через интерфейс программы. Можете репортить багу (Accent SQL 7.4.535)
P.S. Если меняете тип корреспондента, то не забудьте перенести параметры и факты, т.к. они тоже зависят от типа. |
|
Вернуться к началу |
|
|
kris
Зарегистрирован: 12.01.2006 Сообщения: 371
|
Добавлено: Чт Авг 02, 2012 10:23 am Заголовок сообщения: |
|
|
Краткое исследование ситуации профайлером показало:
1. Есть процедура ap_agent_save, но она не меняет тип
2. Есть процедура ap_agent_settype, но она не запускается при попытке сменить тип или сохранить корреспондента программно, но запускается при смене типа через интерфейс
3. Триггер на IF UPDATE(AG_TYPE) не отрабатывает при попытке смены типа программно, но срабатывает при смене типа через интерфейс (что логично исходя из п.2 )
Очевидная бага. |
|
Вернуться к началу |
|
|
olimp Site Admin
Зарегистрирован: 10.03.2005 Сообщения: 2661
|
Добавлено: Пт Авг 03, 2012 2:01 pm Заголовок сообщения: |
|
|
kris писал(а): | Краткое исследование ситуации профайлером показало:
1. Есть процедура ap_agent_save, но она не меняет тип
2. Есть процедура ap_agent_settype, но она не запускается при попытке сменить тип или сохранить корреспондента программно, но запускается при смене типа через интерфейс
3. Триггер на IF UPDATE(AG_TYPE) не отрабатывает при попытке смены типа программно, но срабатывает при смене типа через интерфейс (что логично исходя из п.2 )
Очевидная бага. |
Не факт. Смена типа - это не просто изменение значения поля. А параметры ? А факты ?. Так что, может, правильнее запретить смену вообще. |
|
Вернуться к началу |
|
|
Sergio
Зарегистрирован: 05.01.2009 Сообщения: 18
|
Добавлено: Пн Авг 06, 2012 8:43 am Заголовок сообщения: |
|
|
Факты и параметры я и переносил вручную... Но вот они то тоже к типу привязаны... Получается что просто создавал словарь и в него закидывал значение параметров, фактов. Потом менял тип коресп. и перезаписывал факты и параметры. Но тип не сохранялся...
Последний раз редактировалось: Sergio (Пн Авг 06, 2012 1:55 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Пн Авг 06, 2012 1:26 pm Заголовок сообщения: |
|
|
Sergio писал(а): | Факты и параметры...
Но тип но сохранялся... |
Если действительно нужно, то можно изменить тип корреспондента запросом, после чего обновить свойства командой ReLoad.
workarea.DaoDataBase.Execute("update AGENTS set AG_TYPE="& tp &" where AG_ID=" & ag.ID)
ag.ReLoad |
|
Вернуться к началу |
|
|
Sergio
Зарегистрирован: 05.01.2009 Сообщения: 18
|
Добавлено: Пн Авг 06, 2012 2:00 pm Заголовок сообщения: |
|
|
Спасибо, помогло. |
|
Вернуться к началу |
|
|
olimp Site Admin
Зарегистрирован: 10.03.2005 Сообщения: 2661
|
Добавлено: Вт Авг 07, 2012 5:09 pm Заголовок сообщения: |
|
|
Sergio писал(а): | Факты и параметры я и переносил вручную... Но вот они то тоже к типу привязаны... Получается что просто создавал словарь и в него закидывал значение параметров, фактов. Потом менял тип коресп. и перезаписывал факты и параметры. Но тип не сохранялся... |
Не только тип обновить, но и удалить параметры и факты, которые стали "мусором". |
|
Вернуться к началу |
|
|
AllexL
Зарегистрирован: 10.03.2005 Сообщения: 434 Откуда: Donetsk
|
Добавлено: Ср Авг 08, 2012 9:04 am Заголовок сообщения: |
|
|
olimp писал(а): |
Не только тип обновить, но и удалить параметры и факты, которые стали "мусором". |
На SQL решается триггером замечательно....к дао - версии нужно отнестись с позиции ДАОсизма |
|
Вернуться к началу |
|
|
kris
Зарегистрирован: 12.01.2006 Сообщения: 371
|
Добавлено: Пт Авг 10, 2012 4:22 pm Заголовок сообщения: |
|
|
olimp писал(а): | Не факт. Смена типа - это не просто изменение значения поля. А параметры ? А факты ?. Так что, может, правильнее запретить смену вообще. |
Если задокументирован функционал - он должен работать. Нигде не написано, что смена корреспондента приводит к обновлению параметров и фактов, но написано, что тип менять можно. Более, того, сказано, что именно для этого надо сделать:
Код: | Свойство Type (тип объекта)
Возвращает или устанавливает тип объекта. Для некоторых объектов свойство только для чтения.
Для объектов, которые хранятся в базе данных (напимер корреспондент Agent) установка свойства не приводит к немедленной записи нового значения в базу данных. Для записи изменений в базу данных необходимо установить все нужные свойства, а затем вызвать метод Save. |
Потому - бага. Явная. Я даже провел краткое исследование, в каком именно месте по моему мнению бага сидит: Цитата: | 1. Есть процедура ap_agent_save, но она не меняет тип. |
Как лично я борюсь со сменой типа корреспондента: триггером. Если ДАО... ну понятно, что надо делать |
|
Вернуться к началу |
|
|
|