|
13.01.2014, 16:51 | #1 |
Участник
|
Коллеги, пол дня промучался не понимая причины неполадки. Потребовалось в одной из таблиц изменять поле существующей записи - из интерфейса (ролевой, классик) все меняется легко, все валидейты отрабатывают чудесно. Но! при попытке забить данные при помощи кода - т.е. автоматизировать процесс - никаких ошибок не выдавая поле не изменяется, конкретно как была пустота в нем, так и остается(причем после попытки изменения, до перехода на другую запись тест поля выдает что в нем есть то значение что я пишу!!! т.е. как я понял не отрабатывает модификация...). Обратил внимание что поле входит в состав первичного ключа, если создавая запись ввести значение поля - делал на временной таблице - все записывается, при попытке изменить с теми же данными - изменения не вносятся... Как решить проблему не изменяя структуры таблицы? удалять записи и создавать их заново?
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
13.01.2014, 16:57 | #2 |
Участник
|
Вообще для изменения значения поля, входящего в первичный ключ, используется оператор RENAME. Второй возможный вариант это копирование записи с помощью TRANSFERFILDS, изменение значения ключевого поля в создаваемой записи, удаление старой записи и вставка новой. Второй вариант отрабатывает быстрее.
|
|
13.01.2014, 18:27 | #3 |
Участник
|
сделал немного элегантнее:
Код: ... _SalesPriseWorksheetTmp.TRANSFERFIELDS(SalesPriseWorksheet); _SalesPriseWorksheetTmp."Ending Date" := CALCDATE('<-1D>', _SalesPriseWorksheet."Starting Date"); IF _SalesPriseWorksheetTmp.INSERT(TRUE) THEN; ...
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
13.01.2014, 21:21 | #4 |
Участник
|
А старую запись удалить? При использовании TRANSFERFIELDS еще нужно помнить про неглобальные измерения и про возможные связанные таблицы. Правда, судя по названию переменных типа Record, измерений в Вашем примере быть не должно.
RENAME должен отрабатывать корректно. Там есть тонкость, которая впрочем описана в хелпе, что после RENAME в скобках должны быть указаны через запятую, значения всех полей из первичного ключа, даже если они не изменяются. Т.е для таблицы SalesPriseWorksheet это должно выглядеть примерно так _SalesPriseWorksheet.RENAME("Starting Date",CALCDATE('<-1D>', _SalesPriseWorksheet."Starting Date"),"Sales Type","Sales Code","Currency Code","Item No.","Variant Code","Unit of Measure Code","Minimum Quantity") |
|
29.01.2014, 20:09 | #5 |
Участник
|
Я всегда использую ренэйм, проблем нет с изменением ключевых полей нет.
Просто нужно отгетить таблицу по этому ключу, а сам ренэйм проводить на таблице через другую переменную. например: IF NOT Tab1.GET(Type,"No.") THEN ... RENAME(Type,"No."); MODIFY; |
|
30.01.2014, 11:30 | #6 |
Участник
|
Мелькающее при этом окошко "Идет подсчет записей в таблицах ...." не смущает?)
|
|
05.02.2014, 19:08 | #7 |
Участник
|
Цитата:
Дело в том, что обычно это применяется в служебных функциях, одноразовых - что-то поправить в базе. Мелькает, не мелькает - нет никакой разницы для разработчика, запустил и отошел. А пользователю, естественно, такие механизмы не даются в принципе. Что бы они еще и ключи меняли - как-то в голову не приходило. |
|
06.02.2014, 11:00 | #8 |
Участник
|
Цитата:
Сообщение от Sova
Цитата:
Дело в том, что обычно это применяется в служебных функциях, одноразовых - что-то поправить в базе. Мелькает, не мелькает - нет никакой разницы для разработчика, запустил и отошел. А пользователю, естественно, такие механизмы не даются в принципе. Что бы они еще и ключи меняли - как-то в голову не приходило. |
|
10.02.2014, 16:09 | #9 |
Участник
|
|
|
10.07.2015, 18:07 | #10 |
Участник
|
Хочу перекодировать всех клиентов. Сделал репорт, в OnAfterGetRecord() пишу как-то так:
Код: RENAME(NoSeriesMgt.GetNextNo(SalesSetup."Customer2 Nos.",0D,TRUE)) ; |
|
10.07.2015, 18:31 | #11 |
NavAx
|
Попробуй использовать две переменные
Т.е., к примеру, одна переменная типа record Customer - это датаайтем Заведи переменную Customer1 такого же типа на onaftergetrecord напиши Customer1.GET(Customer."No."); Customer1.RENAME...
__________________
"Моей лошадке ядрышком полмордочки снесло..." А.В.Суворов, письма к дочери |
|
11.07.2015, 09:21 | #12 |
Участник
|
|
|