![]() |
#1 |
Участник
|
![]()
Всем доброго времени суток!
У меня такой вопрос: Как программно создать запись в таблице относящейся к другой компании? Дело в том, что используя табличную коллекцию для номенклатурных единиц необходимо, чтобы таблицы InventTableModule и InventLocation были для каждой компании свои. При настройке коллекции, возникает потребность в добавлении строк в таблицы InventTableModule и InventLocation для того чтобы отображался справочник во всех компаниях. |
|
![]() |
#2 |
Участник
|
Нашел метод ChangeCompany, вроде все заработало.
|
|
![]() |
#3 |
Участник
|
Поосторожней с ChangeCompany: если у пользователя нулевые права в этой компании(настраивается через домены) - ChangeCompany вываливается с ошибкой в рантайме и Аксапта падает. Приходится 1) использовать try-catch и дальнейшую обработку проводить батчем, запущеным под другим пользователем или 2) дать таки права на какой-нибудь dummy-table(в этом случае пользователь будет видеть компанию в списке выбора - что не всегда есть хорошо).
|
|
![]() |
#4 |
Участник
|
Можно немного поподробней про "1) использовать try-catch и дальнейшую обработку проводить батчем, запущеным под другим пользователем" Если можно привидите пример использования. Как вариант можно разрулить правами по доменам, но думаю вариант предложенный вами будет болле корректным.
|
|
![]() |
#5 |
Участник
|
<div class='XPPtop'>X++</div><div class='XPP'>[color=:blue]try[/color]
{ [color=:blue]changecompany[/color](cmp) { [color=:green]// пишем в связанные таблички [/color] ....................... } [color=:green]//помечаем InventTable(или пишем в лог синхронизации - реализация на выбор) [/color] InventTable.IsSynchronized = [color=:blue]true[/color]; InventTable.update(); } [color=:blue]catch[/color](exception::Error) [color=:green]//<-- вывалились по ошибке, в этой компании номенклатуры видно не будет [/color]{ }</div> Запущенный под паверюзером батч выбирает периодически записи с InventTable.IsSynchronized = false и применяет тот же код |
|