Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 16:22

Сообщение всем пользователям о событии.

Автор |R|U|D|E|N, 27 июн 2011, 16:34

0 Пользователей и 1 гость просматривают эту тему.

|R|U|D|E|N

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

|R|U|D|E|N

Значит вот как зделал

Процедура ПриНачалеРаботыСистемы()

Параметры = СервисныеМеханизмы.ПолучитьПараметры();

ПодключитьОбработчикОжидания("ПроверкаРегистраЗапланированныеЗадания", 600)

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




&НаКлиенте
Процедура ПроверкаРегистраЗапланированныеЗадания() Экспорт


Если РаботаСЗапланированнымиЗаданиями.ПолучитьЗапланированныеРаботы() <> Ложь Тогда

ФормаСообщения = ПолучитьФорму("ОбщаяФорма.Форма_Сообщения");
ФормаСообщения.НомерЗадания = РаботаСЗапланированнымиЗаданиями.ПолучитьЗапланированныеРаботы().НомерЗадания;
ФормаСообщения.Описание = РаботаСЗапланированнымиЗаданиями.ПолучитьЗапланированныеРаботы().ОписаниеЗадания;
ФормаСообщения.Исполнитель = РаботаСЗапланированнымиЗаданиями.ПолучитьЗапланированныеРаботы().ИсполнительЗадания;
ФормаСообщения.Документ = РаботаСЗапланированнымиЗаданиями.ПолучитьЗапланированныеРаботы().Документ;
ФормаСообщения.Открыть();

РаботаСЗапланированнымиЗаданиями.ИзменитьРеквизитПрочитано(РаботаСЗапланированнымиЗаданиями.ПолучитьЗапланированныеРаботы().НомерЗадания);
КонецЕсли;


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


Обе процедуры из модуля упр. приложения


Серверные функция общего модуля с флагами Сервер и Вызов сервера, Обезательно! без дерективы компиляции &НаСервере;

Функция ПолучитьЗапланированныеРаботы() Экспорт

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ИнформацияОЗапланированныхЗаданияхСрезПоследних.НомерЗадания,
| ИнформацияОЗапланированныхЗаданияхСрезПоследних.ОписаниеЗадания,
| ИнформацияОЗапланированныхЗаданияхСрезПоследних.ИсполнительЗадания,
| ИнформацияОЗапланированныхЗаданияхСрезПоследних.Прочитано,
| ИнформацияОЗапланированныхЗаданияхСрезПоследних.Документ
|ИЗ
| РегистрСведений.ИнформацияОЗапланированныхЗаданиях.СрезПоследних(&НаПериод, ) КАК ИнформацияОЗапланированныхЗаданияхСрезПоследних
|ГДЕ
| ИнформацияОЗапланированныхЗаданияхСрезПоследних.Прочитано = ЛОЖЬ";

Запрос.УстановитьПараметр("НаПериод", ТекущаяДата());

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

СписокПараметров = Новый Структура;
   
СписокПараметров.Вставить("НомерЗадания");
СписокПараметров.Вставить("ОписаниеЗадания");
СписокПараметров.Вставить("ИсполнительЗадания");
СписокПараметров.Вставить("Прочитано");
СписокПараметров.Вставить("Документ");

Если ВыборкаДетальныеЗаписи.Следующий() Тогда

СписокПараметров.НомерЗадания = ВыборкаДетальныеЗаписи.НомерЗадания;
        СписокПараметров.ОписаниеЗадания = ВыборкаДетальныеЗаписи.ОписаниеЗадания;
        СписокПараметров.ИсполнительЗадания = ВыборкаДетальныеЗаписи.ИсполнительЗадания;
СписокПараметров.Прочитано = ВыборкаДетальныеЗаписи.Прочитано;
СписокПараметров.Документ = ВыборкаДетальныеЗаписи.Документ;

Возврат СписокПараметров;

Иначе

Возврат Ложь;

КонецЕсли;

КонецФункции // ПолучитьЗапланированныеРаботы()


//
Функция ИзменитьРеквизитПрочитано(НомерЗаданияРегистра) Экспорт

Выборка = РегистрыСведений.ИнформацияОЗапланированныхЗаданиях.Выбрать();
Пока Выборка.Следующий() Цикл           
Если Выборка.НомерЗадания = НомерЗаданияРегистра Тогда
МенеджерЗаписи = Выборка.ПолучитьМенеджерЗаписи();
МенеджерЗаписи.Прочитано = Истина;
МенеджерЗаписи.Записать(Истина);
КонецЕсли;
КонецЦикла;

КонецФункции // ИзменитьРеквизитПрочитано()



При этом регистр НЕ ПОДЧЕНЕН регистратору.  Вот код обработки проведения документа создающего задание:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

Запись = РегистрыСведений.ИнформацияОЗапланированныхЗаданиях.СоздатьМенеджерЗаписи();
        Запись.НомерЗадания = ЭтотОбъект.Номер;
Запись.Период = ЭтотОбъект.Дата;
Запись.Документ = ЭтотОбъект.Ссылка;
Запись.ИсполнительЗадания = ЭтотОбъект.ДляКого;
Запись.ОписаниеЗадания = ЭтотОбъект.Описание;
Запись.Записать();

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



Работает очень не плохо. Форма открывается у нужного пользователя и весит пока не будет закрыта.

Не нашел я как отпозиционировать открываемую форму! Нет у формы таких свойств как Верх и Лево.
И еще жутко не нравится что для изменения записи Прочитано на истина, необходимо делать выборку. Это помоему слишком ресурсоемкая операция. Может есть способ сделать проще?

cannabis_86

Я конечно не асс в 1с, но мне кажется что когда вы пишите:
    Если РаботаСЗапланированнымиЗаданиями.ПолучитьЗапланированныеРаботы() <> Ложь Тогда
       
        ФормаСообщения = ПолучитьФорму("ОбщаяФорма.Форма_Сообщения");
        ФормаСообщения.НомерЗадания = РаботаСЗапланированнымиЗаданиями.ПолучитьЗапланированныеРаботы().НомерЗадания;
        ФормаСообщения.Описание = РаботаСЗапланированнымиЗаданиями.ПолучитьЗапланированныеРаботы().ОписаниеЗадания;
        ФормаСообщения.Исполнитель = РаботаСЗапланированнымиЗаданиями.ПолучитьЗапланированныеРаботы().ИсполнительЗадания;
        ФормаСообщения.Документ = РаботаСЗапланированнымиЗаданиями.ПолучитьЗапланированныеРаботы().Документ;
        ФормаСообщения.Открыть();
       
        РаботаСЗапланированнымиЗаданиями.ИзменитьРеквизитПрочитано(РаботаСЗапланированнымиЗаданиями.ПолучитьЗапланированныеРаботы().НомерЗадания);
    КонецЕсли;

То функция РаботаСЗапланированнымиЗаданиями.ПолучитьЗапланированныеРаботы() вызывается несколько раз, я бы назначил переменную которой присвоил эту функцию и потом уже работал с ними. Хотя я могу сильно ошибаться(опыт в 1С не такой большой). Думаю что кто-нить из старожил ответит по этому поводу. Мне и самому интересно)))

ЦитироватьИ еще жутко не нравится что для изменения записи Прочитано на истина, необходимо делать выборку. Это помоему слишком ресурсоемкая операция. Может есть способ сделать проще?
А тут бы я не делал выборку ко всему регистру сведений:
Выборка = РегистрыСведений.ИнформацияОЗапланированныхЗаданиях.Выбрать();
Проще мне кажется сделать сразу запрос на этот номер:
Выбрать Все
ИЗ РегистрыСведений.ИнформацияОЗапланированныхЗаданиях
ГДЕ РегистрыСведений.ИнформацияОЗапланированныхЗаданиях = &НомерЗаданияРегистра

После Выборка=Запрос.Выполнить().Выбрать();
ну и т.д.



cannabis_86

Допустил там пару ошибок, но думаю разберетесь))

|R|U|D|E|N

Да, вы абсолютно правы нужно делать так:

СтруктураЗаписи =  ФормаСообщения.НомерЗадания = РаботаСЗапланированнымиЗаданиями.ПолучитьЗапланированныеРаботы();
ФормаСообщения.Описание = СтруктураЗаписи.Описание;

Это я очень торопился и упустил этот момент) спасибо за корректировку

А вот запрсом получить нужную запись я тоже думал, но у меня там были какие то проблемы с менеджеромЗаписи регистра...поэтому остановился на выборке....надо посмотреть по внимательнее


|R|U|D|E|N

Простите, ФормаСообщения.НомерЗадания во второй строке пред идущего поста лишнии) не заметил

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск