25.12.2005, 09:50 | #1 |
Участник
|
У нас есть кассиры, которые создают ПКО/РКО через журнал ордеров. Кассиры каждый день меняются. Хочу, чтобы по имени пользователя определялся кассир для печати ордеров. В каком месте это лучше делать: либо прописать в методе инсерт к таблице ордеров, либо в каком-то классе/методе, который ответственнен за инициализацию базы (компании) при открытии? Если последнее, то где это надо делать.
|
|
25.12.2005, 10:32 | #2 |
Участник
|
Ссылки на текущих официальных лиц хранятся в таблице OfficialsTable_RU
А для контактные лица при создании каждого документа хранятся в OfficialsTrans_RU Ваша задача - при помощи перекрестных ссылок отловить те места, где вставляются записи в OfficialsTrans_RU и подменить алгоритм на ваш "smart" алгоритм. ЗЫ Учтите, что работа с таблицами официальных лиц - антипаттерн. Разберитесь и никогда так не делайте. |
|
25.12.2005, 13:16 | #3 |
Участник
|
Я нашла в какой момент вставляются официальные лица в форму (метод датасоурс executeQuery). После того как они вставятся идет супер, затем я хочу добавить свое. Получить связь в официалтранс (это я и так уже поняла пока искала, не такая я уж и глупая) - т.е. идентификатор связи с официальными лицами и подставить ФИО кассира.
Только вот самое забавное не могу найти таблицу с именами пользователей. Идентификатор есть, а имен таблиц, куда ссылается таблица с пользователями, нет. Последний абзац неразборчивый читать не надо. Уже нашла. А вот первый, правильно ли я вас поняла маззи |
|
25.12.2005, 13:23 | #4 |
Участник
|
Цитата:
Сообщение от Arahnid
Я нашла в какой момент вставляются официальные лица в форму (метод датасоурс executeQuery). После того как они вставятся идет супер, затем я хочу добавить свое. Получить связь в официалтранс (это я и так уже поняла пока искала, не такая я уж и глупая) - т.е. идентификатор связи с официальными лицами и подставить ФИО кассира.
Только вот самое забавное не могу найти таблицу с именами пользователей. Идентификатор есть, а имен таблиц, куда ссылается таблица с пользователями, нет. Хм... Не понял. Что нужно сделать с первым обацем? |
|
25.12.2005, 13:33 | #5 |
Участник
|
А почему не в форму LedgerJournalTransCasher или как она там называется
|
|
25.12.2005, 14:13 | #6 |
Участник
|
Хм... Таки не понял вопрос.
Но открыл Аксапту и начал вспоминать. Похоже, я был неправ насчет RHRMVirtualNetworkTable посмотрите на метод OfficialsTrans_RU::nameLookup Имя подписавшего берется из списка: = сотрудников EmplTalbe = контактных лиц ContactPerson |
|
25.12.2005, 14:23 | #7 |
Участник
|
Вообщем, правильно ли я понимаю, что надо вставить в ds OfficialTrans_ru формы LedgerJournalTransCasher .
Если правильно, то почему он ругается в методе init? |
|
25.12.2005, 14:35 | #8 |
Участник
|
1. Нет такой формы в стандартном функционале. Есть LedgerJournalTransRCash
2. Я не понимаю, что вы хотите вставить и какой init ругается. 3. А если ругается, то не могли бы вы привести текст ошибки. |
|
25.12.2005, 14:52 | #9 |
Участник
|
Извините, что так не точно, Аксапта отвалилась и не приваливалась. Теперь по понятиям
форма LedgerJournalTransRCash ds OfficialsTrans_RU текст кода из метода executeQuery <div class='XPPtop'>X++</div><div class='XPP'>[color=:blue]public[/color] [color=:blue]void[/color] executeQuery() { [color=:blue]select[/color] OfficialsTrans_RU [color=:blue]where[/color] OfficialsTrans_RU.ReportType [color=:blue]==[/color] OffReportType_RU::CashSlip && OfficialsTrans_RU.OffSessionId [color=:blue]==[/color] ledgerJournalTrans.OffSessionId_RU; [color=:blue]super[/color](); [color=:green]//добавлено еще в ClassDeclaration [/color] [color=:blue]while[/color] [color=:blue]select[/color] [color=:blue]forupdate[/color] OfficialsTrans_RU [color=:blue]where[/color] OfficialsTrans_RU.ReportType [color=:blue]==[/color] OffReportType_RU::CashSlip && OfficialsTrans_RU.OffSessionId [color=:blue]==[/color] ledgerJournalTrans.OffSessionId_RU && OfficialsTrans_RU.Position [color=:blue]==[/color] OffPosition_RU::Cashier { [color=:blue]while[/color] [color=:blue]select[/color] [color=:blue]firstonly[/color] userInfo [color=:blue]where[/color] userInfo.Id [color=:blue]==[/color] curUserId() { EmplNameCashier = Empltable::findByName(userInfo.name).Name; EmplTitleCashier = Empltable::findByName(userInfo.name).Title; } } }</div> Помимо этого в класс декларейшен формы добавлено <div class='XPPtop'>X++</div><div class='XPP'>[color=:green]//Date: 24/12/05 [/color] [color=:green]//Name: Cat [/color] UserInfo userInfo; EmplName EmplNameCashier; TitleId EmplTitleCashier; [color=:green]//добавилено котенком 24/12/05[/color]</div> Ошибка Неправильные типы агрументов в операции присвоения значения переменной forms/LedgerJournalTransRCash/data sourse/ledgerjournaltrans\methods\init - line 5 |
|
25.12.2005, 14:57 | #10 |
Участник
|
1. Я не понял что именно вы собираетесь сделать в методе ExcecuteQuery
2. В любом случае, я считаю принципиально неправильным править УЖЕ полученную запись. Этим путем стоит идти только если другого выхода нет 3. Я предлагал вам разобраться как заполняется таблица Officials_RU. В частности разберитесь как работает класс OfficialsServ_RU. И просто заполняйте своими данными. Не мучайтесь с формами, добейтесь правильных данных в таблицах. |
|
25.12.2005, 15:03 | #11 |
Участник
|
Вот в 1с есть такая глобальная процедура, которая запускается, когда входишь в программу. Я там тогда и прописывала кассира в 1с.
А в аксапте такой класс есть? |
|
25.12.2005, 15:06 | #12 |
Участник
|
Есть форма
Главное меню \ Основное \ Настройки \ Контакты \ должностные лица. |
|
25.12.2005, 15:11 | #13 |
Участник
|
Да я понимаю это. Просто хочу понять, как при входе в программу присваивать значение кассиру. Этот класс сам по себе не активизируется. ОН ничем не вызывается. Значит , когда пользователь входит в программу, этот класс должен вызываться. Чем его надо вызывать?
|
|
25.12.2005, 15:22 | #14 |
Участник
|
Цитата:
Почему вы хотите присваивать значение ПРИ ВХОДЕ? |
|
25.12.2005, 15:26 | #15 |
Участник
|
Я так делала в 1с. Пользователь входил и он сразу подставлялся в историю значения кассир.
Я так же хочу сделать. Пользовтель входит. Определяется группа прав. Если группа прав кассир, то он должен встать в должность кассира (Контакты). Я не могу вашего предложения понять. В какой момент вы предлагаете его присваивать (в Контактах, должностные лица) Если не при входе в программу, то при создании строки надо присваивать фамилию кассира. Этот вариант вы горите плох. |
|
25.12.2005, 15:27 | #16 |
Участник
|
Цитата:
Сообщение от Arahnid
У нас есть кассиры, которые создают ПКО/РКО через журнал ордеров. Кассиры каждый день меняются. Хочу, чтобы по имени пользователя определялся кассир для печати ордеров. В каком месте это лучше делать: либо прописать в методе инсерт к таблице ордеров, либо в каком-то классе/методе, который ответственнен за инициализацию базы (компании) при открытии? Если последнее, то где это надо делать.
Кассиры, насколько я понимаю, разные пользователи. 1. Это значит, что вы должны расширить таблицу OfficialTable_Ru так, чтобы можно было указывать различные подписи для различных пользователей. 2. Это значит, что вы должны расширить логику создания новых записей в OfficialTrans_Ru так, чтобы при поиске из OfficialTable_Ru учитывался бы и пользователь. 3. Логику скорее всего менять надо в классе OfficialServ_Ru 4. Нужно ли запоминать пользователя в OfficialTrans_Ru - не знаю. Ни в коем случае вам не надо править формы. Вам нужно править данные. |
|
25.12.2005, 15:31 | #17 |
Участник
|
Мой вопрос подразумевал следующее. Пользователь входит в программу и если кассир, то подставляется в талицу как кассир. Может я вначале не так написала
|
|
25.12.2005, 15:45 | #18 |
Участник
|
Ох. Проще сделать...
См. проект. Главное изменение в методе OfficialsServ_RU.insertOrUpdate() Было <div class='XPPtop'>X++</div><div class='XPP'> officials = OfficialsTable_RU::find(_reportType, _position, _relation, _inventLocation);</div> Стало <div class='XPPtop'>X++</div><div class='XPP'> officials = OfficialsTable_RU::find(_reportType, _position, _relation, _inventLocation, curuserid());</div> Все остальное предназначено обеспечить работу данного изменения. Еще раз хочу напомнить, что работа с Officials - антипаттерн. Никогда так не делайте в своем функционале. Извините, пропустил проверку validateWrite. Исправился. Добавил скриншот. Обратите внимание, что: = если войдет пользователь mazzy, то для него кассир будет Сидоров = если войдет пользователь admin, то для него кассиром будет Вронский = для остальных кассиром будет Гладких. |
|
25.12.2005, 16:01 | #19 |
Участник
|
Боже, какой сложный вариант. Я хочу проще. Есть имя пользователя, оно соответствует имени сотрудника. Если это так, то мы его подставляем как кассира. Новый реквизит то мне зачем? Мне не нужна идентификация пользователя и кассира.
Ладно, вы истинный программист. У меня все идеи сводятся к меньше гадить в коде и все изменения свети к минимуму. Я идею поняла. Дальше буду разбираться сама. Большое спасибо. |
|
25.12.2005, 16:03 | #20 |
Участник
|
Как вы это собираетесь выяснить?
Как скажете. |
|