Имя: Пароль:
1C
1С v8
Справочник "Пользователи"
,
0 Scorp1985
 
05.08.13
06:58
Здравствуйте все!

Делаю свою конфигурацию, необходимо привязать элементы справочника "Пользователи" к пользователям БД, а также создавать пользователя БД при создании элемента справочника, и наоборот, при входе пользователя БД создавать (если отсутствует) элемент справочника.

Что где прописать, чтобы ничего не упустить?
1 IamAlexy
 
05.08.13
06:59
открыть любую демку платформы и подглядеть
2 Scorp1985
 
05.08.13
07:01
(1) Ну там боюсь что-то упустить, поэтому и прошу указать все места, где нужно проработать...
3 Галахад
 
гуру
05.08.13
07:06
(2) Это легко. Достаточно потом проверить результат.
Если результата нет, то где-то ошибка.
4 Scorp1985
 
05.08.13
07:09
(1) (3) буду признателен за конкретные указания что и где прописать, т.к. опыта совсем мало... =)
Справочник пользователи у меня имеет лишь один реквизит: ИдентификаторПользователя, ФИО хранится в Наименовании.
5 Любопытная
 
05.08.13
07:25
(4) Ну неужели опыта настолько мало, что нельзя демо открыть и посмотреть?
Надо в модуле приложения прописать проверку при запуске системы. Никак они не привязываются на самом деле, тупо по коду находится и все
6 sonsimo
 
05.08.13
07:30
(5) не всегда. Например, в БСП связь не по коду, а по идентификатору пользователя. Соответственно, такой порядок во всех конфах, построенных на БСП.
Ну а то, что привязка программная - согласен
7 Scorp1985
 
05.08.13
07:33
(5) (6) смотрю, там наворочено много) И как раз таки по идентификатору привязка идёт.
8 Web00001
 
05.08.13
07:46
Добавить БСП в самописную конфигурацию, уже предлагали?
9 Любопытная
 
05.08.13
07:48
(6) Я из БСП подсистему пользователей не щупала, она больно громоздкая. Для собственных целей обошлась старыми дедовскими методами из УТ 10.3.

А так-то можно из БСП взять конечно
10 Scorp1985
 
05.08.13
08:01
Взял из БП КОРП кусок модуля, а именно ПриНачалеРаботыСистемы()
ПользовательОпределен = Ложь;
    ОписаниеОшибкиОпределенияПользователя = "";
    Если Не ЗначениеЗаполнено(ПараметрыСеанса.ТекущийПользователь) Тогда
        Если УправлениеПользователями.ОпределитьТекущегоПользователя(ОписаниеОшибкиОпределенияПользователя) Тогда
            ПользовательОпределен = ЗначениеЗаполнено(ПараметрыСеанса.ТекущийПользователь);
        КонецЕсли;
    Иначе
        ПользовательОпределен = Истина;
    КонецЕсли;
    
    Если Не ПользовательОпределен Тогда
        Если ПустаяСтрока(ОписаниеОшибкиОпределенияПользователя) Тогда
            ОписаниеОшибкиОпределенияПользователя = "Ошибка идентификации пользователя. Обратитесь к администратору";
        КонецЕсли;
        Предупреждение(ОписаниеОшибкиОпределенияПользователя);
        ЗавершитьРаботуСистемы(Ложь);
        Возврат;
    Иначе


Теперь не могу понять, где привязать в документе при создании чтобы подставлялся элемент справочника для текущего пользователя((
11 Галахад
 
гуру
05.08.13
08:03
При открытии, если документ новый.
12 Cerera
 
05.08.13
08:04
(10)
Если ЭтоНовый() Тогда
Пользователь=Справочники.Пользователи.НайтиПоНаименованию(ПараметрыСеанса.ТекущийПользователь);
КонецЕсли;
13 Scorp1985
 
05.08.13
08:12
(12) Спасибо, но ругается((

{Документ.Накладная.Форма.ФормаДокумента.Форма(11,14)}: Переменная не определена (Справочники)
Пользователь=<<?>>Справочники.Пользователи.НайтиПоНаименованию(ПараметрыСеанса.ТекущийПользователь); (Проверка: Тонкий клиент)
{Документ.Накладная.Форма.ФормаДокумента.Форма(11,59)}: Переменная не определена (ПараметрыСеанса)
Пользователь=Справочники.Пользователи.НайтиПоНаименованию(<<?>>ПараметрыСеанса.ТекущийПользователь); (Проверка: Тонкий клиент)
{Документ.Накладная.Форма.ФормаДокумента.Форма(10,7)}: Процедура или функция с указанным именем не определена (ЭтоНовый)
    Если <<?>>ЭтоНовый() Тогда (Проверка: Тонкий клиент)
14 1Сергей
 
05.08.13
08:13
ПриСозданииНаСервере
15 Scorp1985
 
05.08.13
08:24
В общем, вопрос опять с нуля, привязать код из БП Корп нормально не смог, не работает он. Даже новый пользователь в справочнике не создается.

Хотелось бы просто и наглядно сделать, без лишних букв.
Запустили программу - проверили пользователя - создали.
Добавили пользователя в справочник - проверили - создали в БД.

Опыта у меня маловато, чтобы разобраться в сложных процедурах типовых конфиг.
16 Любопытная
 
05.08.13
08:27
(15)Ну ты ж сам все написал. Теперь напиши это на языке 1С и будет тебе счастье. Ну что ты на опыт-то пеняешь. Думаешь - если за тебя все напишут, у тебя опыта прибавится?
17 1Сергей
 
05.08.13
08:31
(15) конкретные вопросы задавай
18 George Wheels
 
05.08.13
08:38
(15) БП КОРП наверное обычное приложение (у нас так). А у тебя я так понял УФ.
19 Scorp1985
 
05.08.13
08:41
(18) Да, как раз до этого дошёл))

Как в моделе управляемого приложения получить текущего пользователя, пробую пойти за ним на сервер, получаю:

&НаСервере
Функция ПолучитьТекущегоПользователяСервер() Экспорт
    НайденноеЗначение = ПараметрыСеанса.ТекущийПользователь;
    Возврат НайденноеЗначение;
КонецФункции

// Процедура - обработчик события "При начале работы системы".
//
Процедура ПриНачалеРаботыСистемы()
    
    ТекПользователь = ПолучитьТекущегоПользователяСервер();



{МодульУправляемогоПриложения(11,20)}: Процедура или функция с указанным именем не определена (ПолучитьТекущегоПользователяСервер)
    ТекПользователь = <<?>>ПолучитьТекущегоПользователяСервер(); (Проверка: Тонкий клиент)
20 Любопытная
 
05.08.13
08:45
(19) не надо ничего писать в модуле управляемого приложения.
Вот тебе:
в модуле сеанса

Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
    
    ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
    Пользователь = Справочники.Пользователи.НайтиПоКоду(ПользовательИБ.Имя);
    Если Пользователь = Справочники.Пользователи.ПустаяСсылка() Тогда
        //Создаем нового пользователя в справочнике
        Пользователь = Справочники.Пользователи.СоздатьЭлемент();
        Пользователь.Код = ПользовательИБ.Имя;
        Пользователь.Наименование = ПользовательИБ.Имя;
        Пользователь.Записать();
    КонецЕсли;
    //Инициализируем параметр сеанса
    ПараметрыСеанса.ТекущийПользователь = Пользователь.Ссылка;

КонецПроцедуры


В модуле документа

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Объект.ОтветственныйЗаСоздание = ПараметрыСеанса.ТекущийПользователь;
КонецПроцедуры
21 Scorp1985
 
05.08.13
08:58
(20) Спасибо, это уже более ли менее понятно))

осталось только решить:

ПараметрыСеанса.ТекущийПользователь = Пользователь.Ссылка;

{МодульСеанса(15)}: Поле объекта не обнаружено (ТекущийПользователь)
    ПараметрыСеанса.ТекущийПользователь = Пользователь.Ссылка;
22 Любопытная
 
05.08.13
09:16
А параметр сеанса вообще есть такой? Или на шару пишем?
23 Любопытная
 
05.08.13
09:19
(21) Более-менее понятно... ну обидно даже, честное слово. Это примитивное, оч. прямолинейное решение задачи. Там все ясно как белый день. А если не ясно, значит еще не дорос, значит садись и разбирайся - что неясно, почему неясно и как сделать так, чтобы прояснилось)
24 Scorp1985
 
05.08.13
09:25
(23) Ну тупенький я ещё, но я хочу подрасти))) А Вам большое спасибо!

Только вот при создании документа в поле Пользователь - пусто :(
25 Любопытная
 
05.08.13
09:30
(24) Печалька... Ну включай отладчик и смотри - почему же у тебя в поле Пользователь пусто.
26 Любопытная
 
05.08.13
09:31
Может у тебя там типы реквизитов не совпадают, может просто не дописал что-то. Тут уже своими мозгами организуйся
27 Scorp1985
 
05.08.13
09:31
(25) У меня почему-то если любому реквизиту значение присваиваю в ПриСозданииНаСервере, при открытии формы всё равно пусто((
28 Любопытная
 
05.08.13
09:39
(27) У меня модуль телепатии вчера шашлыками с коньяком отключился, так что с этой проблемой я тебе не помогу))Смею предположить, что что-то с формой ты сделал не так... ну выложи картинку формы из конфигуратора, мож тогда определю.
Но щас у меня модуль жадности включится, ибо кофе кончился и меня жаба задушит))
29 Scorp1985
 
05.08.13
09:42
(28) Можно тогда спросить - процедуры ПриСозданииНаСервере() и ПриОткрытии() нужно где-то ещё привязывать в документе, или они по названию сами привязываются?
30 Scorp1985
 
05.08.13
09:44
(28) Пытаюсь проверить вот так:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    Сообщить("Сообщение при открытии");    
    ПересчитатьСуммуНакладной();
    
КонецПроцедуры

Никакого сообщения при открытии формы не наблюдаю :(
31 Любопытная
 
05.08.13
09:44
см. свойства формы
32 Любопытная
 
05.08.13
09:45
кинь цф ф какую-нить файлопомойку, я посмотрю. Мне работать все равно лень
33 Scorp1985
 
05.08.13
09:49
(32) Добрая Вы, люблю я добрых людей)) особенно девушек, прям захотелось лично познакомиться))

сф тут:
http://sdrv.ms/13elFUy
34 Любопытная
 
05.08.13
09:52
(33)Ха-ха
35 Serg_1960
 
05.08.13
09:53
ТС, я вот одного не пойму: почему ты тонкого клиента пытаешься всё время сделать толстым?

Впрочем - бог с тобой. Не хочешь работать на сервере - твои и твоих пользователей проблемы.

Загоняй на сервере в структуры нужные данные и работай с ними в тонком клиенте :(
36 Любопытная
 
05.08.13
09:58
Открываешь свойства формы, тащишь ползунок вниз, там внизу есть раздел События. В этом разделе для каждого события формы, которое ты прописал заполняешь процедуру, которая это событие обрабатывает.
В дальнейшем, когда будешь описывать какие-то события в модуле формы делаешь так: открываешь модуль формы, открываешь список процедур модуля формы (по кнопке с лупой и надписью "proc") и два раза щелкаешь на названии того события, которое хочешь прописать. Платформа сама создаст процедуру, впишет ее куда надо, а тебе останется написать ее тело.
Учись, студент. И книжки читай :) И не верь добрым девушкам, они обычно такими жабами становятся, что не приведи Господь;)
37 Aleksey
 
05.08.13
10:05
(20) ну и где тут идентификатор, как некоторые говорили?
38 Любопытная
 
05.08.13
10:07
(37) Ну так-то я и говорила, что у меня примитив без всяких там идентификаторов работает))
39 Aleksey
 
05.08.13
10:13
(38) пришлось лезть в БП 3.0

ТекущийПользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор);
40 Любопытная
 
05.08.13
10:20
(39) Это из БСП. Берешь БСП, внедряешь от нее подсистему Пользователи и все ок. ТОлько надо ИТСы почитать, хотя на них тоже не слишком хорошо написано.
41 Scorp1985
 
05.08.13
13:00
(36) спасибо за уроки))
(38) а мне сложнее и не надо - зачем?)

(34) А можно с Вами познакомиться?))
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан