Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как правильно нужно заполнить параметры сеанса?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Ярослав
Доброго времени суток Уважаемые форумчане!

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

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

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

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

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

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

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

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

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

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


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

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

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

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

А вообще - думаю Вам лучше обратится к литературе, т.к. Вы не в курсе примитивных вещей, даже не представляю что Вы там городите smile.gif)
Если не начнете учить самостоятельно по книжкам с примерами, потом будет еще БОЛЬШЕ вопросов. Отвечать на каждый никто не будет.
Ярослав
Цитата(logist @ 17.11.10, 23:38) необходимо зарегистрироваться для просмотра ссылки
То что Вы увидели это не два параметра. Это две процедуры которые вызываются из модуля "ПолныеПрава". Т.е. чтобы понять как они работают в типовой - откройте общий модуль "ПолныеПрава" и ищите эти процедуры.

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


Спасибо за критику, знаю что литература необходима. Вы как мастер своего дела скажите в какой книге можно найти про параметры сеанса? Может что посоветуете конкретно?
logist
Цитата(Ярослав @ 18.11.10, 1:31) необходимо зарегистрироваться для просмотра ссылки
в какой книге можно найти про параметры сеанса?

Вы не совсем поняли что я хотел сказать. Вам не нужна книга в которой написаны параметры сеанса, Вам нужна литература вообще.

Цитата(Ярослав @ 18.11.10, 1:31) необходимо зарегистрироваться для просмотра ссылки
Может что посоветуете конкретно?

Конкретно советую - искать и читать тут: необходимо зарегистрироваться для просмотра ссылки очень много информации по 8.2. для начинающих в т.ч.
Damien
У-у-ух... Да, батенька....

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

ОбщийМодуль1 (на сервере):
Функция ПараметрыСеанса(Название) Экспорт
         Возврат ПараметрыСеанса[Название]
КонецФункции


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

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


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

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

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


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

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


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

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

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


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

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

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

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

А в чём сейчас вопрос состоит?
Ярослав
Цитата(Vofka @ 29.12.10, 21:49) необходимо зарегистрироваться для просмотра ссылки
А в чём сейчас вопрос состоит?

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

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

Судя по всему к параметрам сеанса он никакого отношения не имеет, он должен быть только в модуле упр.приложения в процедуре "ПриНачале....".
А вообще смотрите что делает эта обработка (Обработки.пмСлужебнаяОбработка), возможно она не приспособлена к работе в упр.приложении.
Ярослав
я слышал что в УПП все глобальные переменные загнаны в параметры сеанса, у Вас нет ссылки на эту конфу, что бы скачать и посмотреть как это делалают они?
Fynjy
необходимо зарегистрироваться для просмотра ссылки
logist
Цитата(Ярослав @ 30.12.10, 17:09) необходимо зарегистрироваться для просмотра ссылки
я слышал что в УПП все глобальные переменные загнаны в параметры сеанса, у Вас нет ссылки на эту конфу, что бы скачать и посмотреть как это делалают они?

Они "загнаны" в один параметр сеанса, как структура значений. Затем процедурами общего модуля, либо устанавливаются либо читаются. Работает только &НаСервере
p.s. предупреждаю сразу - это был самый развернутый ответ на вопрос.
logist
Прочитал я вот это:
Цитата(Ярослав @ 27.12.10, 18:46) необходимо зарегистрироваться для просмотра ссылки
Сотрудник = Справочники.пмСотрудники.НайтиПоНаименованию(ИмяПользователя());
//Если пользователь не найден заносим его в справочник
Если Сотрудник.Пустая() тогда
Объект = Справочники.пмСотрудники.СоздатьЭлемент();
Объект.Код    = ИмяПользователя();
Объект.Наименование = ИмяПользователя();
Объект.Записать();

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

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

там так просто не зарегистрироваться ((( можно на мыло отправить?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.