04.09.2006, 16:41 | #1 |
Участник
|
Использование метода merge на таблице
Хочу задействовать метод merge на таблице для своих целей, но возникла проблема - кнопка Merge для моей таблицы не появляется. Знаю что она изначально скрыта - я ее открыл, знаю что ей нужен первичной ключ - он есть, но все равно на InventTable кнопка есть, а на моей таблице нет.
Замечено что: \Forms\SysRecordInfo\Methods\init X++: if (formObjectSet) { common = formObjectSet.cursor(); dictTable = new SysDictTable(common.tableId); dictField = new SysDictField(dictTable.id(), dictTable.primaryKeyField()); dictField2 = new DictField(tableNum(userInfo), fieldNum(userInfo, password)); if (!dictField || //... Подскажите, пожалуйста, каким должен быть PrimaryKey, чтобы данный метод работал аналогично таблице InventTable? |
|
04.09.2006, 16:48 | #2 |
Участник
|
А у вас в свойсте таблицы стоит ваш первичный ключ?
|
|
04.09.2006, 16:53 | #3 |
Участник
|
Да, в моей таблице создан уникальный индекс и он указан в свойстве PrimaryIndex таблицы
|
|
04.09.2006, 17:08 | #4 |
Участник
|
У меня все ОК.
Раз у вас появляется она для ном. справочника, значит дело именно в вашей таблице. Смотрите построчно и проверяйте, выполняются ли условия все. К примеру, возможно у вас свойства AllowEdit и AllowEditOnCreate оба установлены в No - а нужно, чтобы rights было >= Edit (то есть, к примеру, AllowEditOnCreate = Yes) |
|
04.09.2006, 17:10 | #5 |
Участник
|
Возможно ваш первичный ключ состоит из больше чем одного поля - это тоже скрывает кнопулю
P.S. ну, и правда на таблицу - Delete уровня должны быть |
|
04.09.2006, 17:18 | #6 |
Участник
|
Быть может ваш индекс был случайно выключен? (Enabled == No)
|
|
04.09.2006, 17:21 | #7 |
Участник
|
Цитата:
Сообщение от kashperuk
Возможно ваш первичный ключ состоит из больше чем одного поля - это тоже скрывает кнопулю
Цитата:
Сообщение от kashperuk
P.S. ну, и правда на таблицу - Delete уровня должны быть
Цитата:
Сообщение от kashperuk
К примеру, возможно у вас свойства AllowEdit и AllowEditOnCreate оба установлены в No - а нужно, чтобы rights было >= Edit (то есть, к примеру, AllowEditOnCreate = Yes)
Права - Delete X++: if (formObjectSet) { common = formObjectSet.cursor(); dictTable = new SysDictTable(common.tableId); dictField = new SysDictField(dictTable.id(), dictTable.primaryKeyField()); dictField2 = new DictField(tableNum(userInfo), fieldNum(userInfo, password)); if (!dictField || //... |
|
04.09.2006, 17:25 | #8 |
Участник
|
а что в класс SysDictField метод new передается?
|
|
04.09.2006, 17:33 | #9 |
Участник
|
Цитата:
Сообщение от kashperuk
а что в класс SysDictField метод new передается?
Что тоже странно т.к. в случае с InventTable второй параметр = 2 (Id поля ItemId), а в моем случае 0, хотя Id моего поля = 50005 |
|
05.09.2006, 10:30 | #10 |
Участник
|
Хотелось бы узнать как работает нижепрведенный Job. Может это глюк только у меня.
X++: DictTable dictTable = new DictTable(TableNum(Table)); ; Info(int2str(dictTable.primaryKeyField())); 1. Какую-нибудь стандартную таблицу у которой есть первичный индекс (например, Unit) 2. Дубль этой таблицы (CopyOfUnit) 3. Какую-нибудь таблицу созданную на usr-слое с первичным индексом У меня выдает: 1 - 1 2 - 0 3 - 0 Результаты экспериментов 2 и 3 выглядят странно, особенно 2. Буду очень благодарен если кто-то проведет данный эксперимент в своей системе и приведет результат здесь. |
|
05.09.2006, 10:34 | #11 |
Axapta
|
1 - 1
2 - 0 3 - 0 |
|
|
За это сообщение автора поблагодарили: Lucky13 (1). |
05.09.2006, 10:41 | #12 |
Участник
|
Спасибо, oip.
Кто-нибудь может объяснить результат п.2. Почему у дубликата таблицы невозможно найти поле первичного индекса, ведь он идентичен основной таблице. |
|
05.09.2006, 11:36 | #13 |
Administrator
|
1 - 1
2 - 0 (логику так и не понял - почему) 3 - 40027 (Таблица создавалась на cus-слое - соотв это ID поля, входящего в Primary Index). Если в Primary Index входит более одного поля - то возвращается ноль.
__________________
Возможно сделать все. Вопрос времени |
|
05.09.2006, 11:43 | #14 |
Участник
|
Да, на var слое у меня 3 - тоже ненулевое.
А вот 2ое странно. Кто прольет свет? |
|
05.09.2006, 11:49 | #15 |
Axapta
|
Для некоторых таблиц на usp слое у меня не 0, для некоторых - 0. Закономерности пока не понял. Сейчас покопаю.
Последний раз редактировалось oip; 05.09.2006 в 11:53. |
|
05.09.2006, 11:58 | #16 |
Участник
|
2ое по прежнему не ясно
2 sukhanchik, kashperuk Поясните по поводу 3. То что поле в индексе должно быть одно - понятно. Каким образом нужно создать таблицу чтобы вернул не 0? У меня в моих таблицах всегда 0 Т.е. создаю таблицу с одним полем. Создаю уникальный индекс по этому полю. Указываю его в св-ве PrimaryIndex таблицы. Что я делаю не так? |
|
05.09.2006, 11:59 | #17 |
Участник
|
Цитата:
Сообщение от oip
Для некоторых таблиц на usp слое у меня не 0, для некоторых - 0. Закономерности пока не понял. Сейчас покопаю.
|
|
05.09.2006, 12:03 | #18 |
Axapta
|
На usr у меня у всех 0. А я именно про usp.
|
|
05.09.2006, 12:09 | #19 |
Участник
|
может вам проще такую конструкцию использовать:
PHP код:
|
|
05.09.2006, 12:13 | #20 |
Axapta
|
В общем, для таблиц, которые были созданы "давно" - возвращает не 0. Для созданных "недавно" - 0. Видимо 0 в "не0" превращается после какой-то операции. Вопрос: какой?
Последний раз редактировалось oip; 05.09.2006 в 12:15. |
|
Теги |
merge, primarykeyfield |
|
|