Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=2169)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ как правильно нужно заполнить параметры сеанса?

Автор: Ярослав 16.11.10, 18:12

Доброго времени суток Уважаемые форумчане!

Заранее прошу прощения возможно за глупые вопросы... Скажу сразу я только учусь.
Суть вопроса вот в чем, есть конфигурация не типовая. Мне нужно создать управляемую форму к справочнику, форму создал... но тут и начинается, при открытии справочника в тонком клиенте пишет ошибку: "Попытка получения инициализированного значения параметра сеанса" Дальше жму на кнопку создать и опять пишет ошибку

"{Справочник.пмЗадачи.МодульОбъекта(60,58)}: Переменная не определена (глКонифигурацияДляКлиента)
НЕ РольДоступна("ПравоНаДобавлениеПапкиВКорне") и Не <<?>>глКонифигурацияДляКлиента и не глТекущийИсполнитель = ПараметрыСеанса.пмУчредитель Тогда"

{Справочник.пмЗадачи.МодульОбъекта(60,89)}: Переменная не определена (глТекущийИсполнитель)
НЕ РольДоступна("ПравоНаДобавлениеПапкиВКорне") и Не глКонифигурацияДляКлиента и не <<?>>глТекущийИсполнитель = ПараметрыСеанса.пмУчредитель Тогда

{Справочник.пмЗадачи.МодульОбъекта(45,5)}: Процедура или функция с указанным именем не определена (Предупреждение)
<<?>>Предупреждение("Запрещено добавлять задачи в данную папку!"+ Символы.ПС + "Задачи сотрудникам можно ставить в форме ""Оргсхемы и планирование"".");

{Справочник.пмЗадачи.МодульОбъекта(209,4)}: Процедура или функция с указанным именем не определена (пмбпНайтиСледующиеЗадачи)
<<?>>пмбпНайтиСледующиеЗадачи(ЭтотОбъект);

{Справочник.пмЗадачи.МодульОбъекта(921,32)}: Процедура или функция с указанным именем не определена (ОпредилитьДатаЗавершения)
Задача.ДатаЗавершенияПлан = <<?>>ОпредилитьДатаЗавершения(Задача.ДатаНачалаПлан, Задача.ПОИ);

Интуитивно я догадываюсь что проблема где то в параметре сеанса, более того там ничего не было, в модуле сеанса создал
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры) и все, что дальше делать я не понимаю, хожу вокруг да около сдвигу никакого...
Помогите Пожалуйста!!!!!!

Автор: logist 16.11.10, 18:30

Цитата(Ярослав @ 16.11.10, 19:12) *
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры) и все, что дальше делать я не понимаю, хожу вокруг да около сдвигу никакого...
Помогите Пожалуйста!!!!!!

В этой процедуре и нужно установить все параметры которые Вы описали в соответствующей ветке конфигурации. Т.е. присвоить необходимые значения параметрам.
В конце-концов, что мешает посмотреть как это реализовано в типовых?

Еще обратите внимание на то что модули с полными правами могут выполнятся только на сервере.

Автор: Ярослав 17.11.10, 21:50

Цитата(logist @ 16.11.10, 19:30) *
В этой процедуре и нужно установить все параметры которые Вы описали в соответствующей ветке конфигурации. Т.е. присвоить необходимые значения параметрам.
В конце-концов, что мешает посмотреть как это реализовано в типовых?

Еще обратите внимание на то что модули с полными правами могут выполнятся только на сервере.


Прошу прощения, но у меня ничего не получается, я смотрел типовую конф. там только 2 параметра:

ПолныеПрава.УстановитьПараметрСеансаТекущийПользователь();
ПолныеПрава.УстановитьИзменяемыеПараметрыСеансаПользователя();

У меня они не работают, пишет: Переменная не определена (ПолныеПрава)

Если Вам не составит труда, можно пример заполнения?

Автор: logist 17.11.10, 22:38

То что Вы увидели это не два параметра. Это две процедуры которые вызываются из модуля "ПолныеПрава". Т.е. чтобы понять как они работают в типовой - откройте общий модуль "ПолныеПрава" и ищите эти процедуры.

А вообще - думаю Вам лучше обратится к литературе, т.к. Вы не в курсе примитивных вещей, даже не представляю что Вы там городите smile.gif)
Если не начнете учить самостоятельно по книжкам с примерами, потом будет еще БОЛЬШЕ вопросов. Отвечать на каждый никто не будет.

Автор: Ярослав 18.11.10, 0:31

Цитата(logist @ 17.11.10, 23:38) *
То что Вы увидели это не два параметра. Это две процедуры которые вызываются из модуля "ПолныеПрава". Т.е. чтобы понять как они работают в типовой - откройте общий модуль "ПолныеПрава" и ищите эти процедуры.

А вообще - думаю Вам лучше обратится к литературе, т.к. Вы не в курсе примитивных вещей, даже не представляю что Вы там городите smile.gif)
Если не начнете учить самостоятельно по книжкам с примерами, потом будет еще БОЛЬШЕ вопросов. Отвечать на каждый никто не будет.


Спасибо за критику, знаю что литература необходима. Вы как мастер своего дела скажите в какой книге можно найти про параметры сеанса? Может что посоветуете конкретно?

Автор: logist 18.11.10, 11:36

Цитата(Ярослав @ 18.11.10, 1:31) http://pro1c.org.ua/index.php?act=findpost&pid=13646
Может что посоветуете конкретно?

Конкретно советую - искать и читать тут: http://pro1c.org.ua/index.php?showforum=118 очень много информации по 8.2. для начинающих в т.ч.

Автор: Damien 18.11.10, 17:55

У-у-ух... Да, батенька....

Судя только по одним ошибкам трудно что-то конкретное подсказать, НО (самые элементарные вещи!):
1) Предупреждение() - у вас вызывается в модуле объекта. Это же чисто интерактивная процедура, вызывать можно только на клиентах!
2) Объект ПараметрыСеанса не доступен на тонком клиенте, хотите обратится с клиента - прыгайте через функцию общего серверного модуля!

ОбщийМодуль1 (на сервере):

Функция ПараметрыСеанса(Название) Экспорт
         Возврат ПараметрыСеанса[Название]
КонецФункции


Ваш модуль (клиент):

глТекущийИсполнитель = ОбщийМодуль1.ПараметрыСеанса("пмУчредитель")


ВЕЗДЕ В СПРАВКЕ СМОТРИТЕ ПОСЛЕ ОПИСАНИЯ, ГДЕ ДОСТУПЕН ТОТ ИЛИ ИНОЙ МЕТОД (на сервере,тонком клиенте, и т.д.)!!!

А вообще, если учитесь, пишите на 8.1, там нет таких задротов с четким разделением клиентской и серверной частями!

Автор: Ярослав 27.12.10, 17:46

всех с наступающим icon_beer17.gif , посмотрел как заполняются параметры сеанса в типовой бухгалтерии и решил сделать тоже самое. Создал общий модуль "ПараметрСеанса" в него поместил след. код.

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

Сотрудник = Объект.Ссылка;
КонецЕсли;
//задаем параметр сеанса
ПараметрыСеанса.текИсполнитель = Сотрудник;
КонецПроцедуры


в модуле сеанса написал след.
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
    ПараметрСеанса.УстановитьПараметрыСеансаТекПользователь();
КонецПроцедуры

Пишет ошибку.
{МодульСеанса(4,2)}: Переменная не определена (ПараметрСеанса)
<<?>>ПараметрСеанса.УстановитьПараметрыСеансаТекПользователь(); (Проверка: Толстый клиент (обычное приложение))

Автор: Vofka 27.12.10, 18:05

Попробуйте так:

Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
    УстановитьПараметрыСеансаТекПользователь();
КонецПроцедуры

Автор: logist 27.12.10, 18:23

Цитата(Ярослав @ 27.12.10, 18:46) *
Пишет ошибку.
{МодульСеанса(4,2)}: Переменная не определена (ПараметрСеанса)
<<?>>ПараметрСеанса.УстановитьПараметрыСеансаТекПользователь(); (Проверка: Толстый клиент (обычное приложение))


А модуль "ПараметрСеанса" имеет полные права? И в свойствах установлено "Сервер", "Вызов сервера"?

Автор: Ярослав 27.12.10, 19:23

Цитата(logist @ 27.12.10, 19:23) *
А модуль "ПараметрСеанса" имеет полные права? И в свойствах установлено "Сервер", "Вызов сервера"?

Спасибо Vofka, сделал как Вы говорили, при проверке на синт. ошибки пишет что их не обнаружено, но когда начинаю отладку пишет "Процедура или функция с указанным именем не определена (УстановитьПараметрыСеансаТекПользователь)".
Logist, в свойствах модуля ПараметрСеанса установлено: "Сервер", "Вызов сервера" и Клиент (обычное приложение).

Автор: logist 27.12.10, 20:06

Цитата(Ярослав @ 27.12.10, 20:23) *
и Клиент (обычное приложение).

Уберите.

Автор: Vofka 27.12.10, 20:26

Посчелкайте галки в свойствах модуля, как пишет logist. Ну и у функции должен быть признак Экспорт (у вас есть).

Автор: logist 27.12.10, 20:33

Должно быть так:


Ну и правописание проверьте, а то вдруг где ошиблись в одной букве...

Автор: Ярослав 29.12.10, 19:38

Тут проблема немного в другом, дело в том что конфиг. изначально была написана на 8.1 потом конвертировали в 8.2. Модуль управляемого приложения совсем пуст. Я перенес из процедуры ПередНачаломРаботыСистемы(Отказ) модуля обычного приложения в общий модуль ПараметрСеанса 2 строки из процедуры.

Процедура ПередНачаломРаботыСистемы(Отказ) Экспорт
глВспомогательнаяОбработка = Обработки.пмСлужебнаяОбработка.Создать();  //в пмСлужебнаяОбработка заполняются все параметры сеанса
глВспомогательнаяОбработка.ПередНачаломРаботыСистемыPM(Отказ);
КонецПроцедуры
при отладке пишет что нет кучи переменных, в модуле управляемого приложения попробовал их объявить но и это ничего не дало.
листинг ощего модуля ПараметрСеанса имеет селд. вид:
Процедура УстановитьПараметрыСеансаТекПользователь() Экспорт
глВспомогательнаяОбработка = Обработки.пмСлужебнаяОбработка.Создать();
глВспомогательнаяОбработка.ПередНачаломРаботыСистемыPM();

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

Сотрудник = Объект.Ссылка;
КонецЕсли;
//задаем параметр сеанса
ПараметрыСеанса.текИсполнитель = Сотрудник;
      
  КонецПроцедуры

буду признателен если Вы откликнитесь, спасибо.

Автор: Vofka 29.12.10, 20:49

Цитата
буду признателен если Вы откликнитесь, спасибо.

А в чём сейчас вопрос состоит?

Автор: Ярослав 29.12.10, 21:32

Цитата(Vofka @ 29.12.10, 21:49) *
А в чём сейчас вопрос состоит?

вопрос в том как, заполнить эти параметры сеанса. При отладке в тонком клиенте конфа не грузиться, слетает и пишет что не хватает переменных. Я объявляю их в модуле управляемого приложения но это результата не дает.

Автор: logist 30.12.10, 12:45

Уберите из

Процедура УстановитьПараметрыСеансаТекПользователь() Экспорт

Этот код:
глВспомогательнаяОбработка = Обработки.пмСлужебнаяОбработка.Создать();
глВспомогательнаяОбработка.ПередНачаломРаботыСистемыPM();

Судя по всему к параметрам сеанса он никакого отношения не имеет, он должен быть только в модуле упр.приложения в процедуре "ПриНачале....".
А вообще смотрите что делает эта обработка (Обработки.пмСлужебнаяОбработка), возможно она не приспособлена к работе в упр.приложении.

Автор: Ярослав 30.12.10, 16:09

я слышал что в УПП все глобальные переменные загнаны в параметры сеанса, у Вас нет ссылки на эту конфу, что бы скачать и посмотреть как это делалают они?

Автор: Fynjy 30.12.10, 16:15

http://pro1c.org.ua/redirect.php?http://users.v8.1c.ru/

Автор: logist 30.12.10, 16:46

Цитата(Ярослав @ 30.12.10, 17:09) *
я слышал что в УПП все глобальные переменные загнаны в параметры сеанса, у Вас нет ссылки на эту конфу, что бы скачать и посмотреть как это делалают они?

Они "загнаны" в один параметр сеанса, как структура значений. Затем процедурами общего модуля, либо устанавливаются либо читаются. Работает только &НаСервере
p.s. предупреждаю сразу - это был самый развернутый ответ на вопрос.

Автор: logist 30.12.10, 19:06

Прочитал я вот это:

Цитата(Ярослав @ 27.12.10, 18:46) *
Сотрудник = Справочники.пмСотрудники.НайтиПоНаименованию(ИмяПользователя());
//Если пользователь не найден заносим его в справочник
Если Сотрудник.Пустая() тогда
Объект = Справочники.пмСотрудники.СоздатьЭлемент();
Объект.Код    = ИмяПользователя();
Объект.Наименование = ИмяПользователя();
Объект.Записать();

Сотрудник = Объект.Ссылка;
КонецЕсли;
//задаем параметр сеанса
ПараметрыСеанса.текИсполнитель = Сотрудник;
КонецПроцедуры

и пока сам с подобной штукой ковырялся, должен Вам сказать, что наверное лучше будет так:
Сотурдник = Справочники.Сотрудники.НайтиПоКоду(ИмяПользователя());
Если НЕ ЗначениеЗаполнено(Сотрудник) Тогда
Объект = Справочники.Сотрудники.СоздатьЭлемент();
Объект.Код = ИмяПользователя();
Объект.Наименование = ПолноеИмяПользователя();
Объект.Записать();
Сотрудник = Объект.Ссылка;
КонецЕсли;
ПараметрыСеанса.ТекущийПользователь = Сотрудник;

Автор: Ярослав 30.12.10, 19:34

Цитата(Fynjy @ 30.12.10, 17:15) http://pro1c.org.ua/index.php?act=findpost&pid=15635

там так просто не зарегистрироваться ((( можно на мыло отправить?

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua