Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Билет №2 вопрос по УФ          
Sunset1 Подменю пользователя
сообщение 26.11.13, 14:38
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 20
Спасибо сказали: 0 раз
Рейтинг: 0

Самое неприятное по-моему, поскольку в реальной жизни пока не используется (ну может кто-то уже вовсю работает с УТ3, у нас как-то пока никто).

С помощью регламентного задания необходимо по расписанию каждый день формировать задачи сотрудникам на создание отчет о проделанной работе. Задача должна порождаться для тех сотрудников, которые числятся в регистре сведений «Сведения о сотрудниках» на момент формирования задачи. По мере возникновения этих задач у пользователя должна автоматически открываться форма каждой невыполненной его задачи

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

-------------------------------------------------------------

Понятно более-менее все, кроме как открыть форму.

Сделали новую задачу ОтчетОПроделаннойРаботе,
Реквизит адресации (и основной) Исполнитель, Текущий исполнитель – параметр сеанса ТекИсполнитель.
Добавили Реквизит Содержание, чтоб хранить перечень работ.


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

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

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


------------
В модуле упр. приложения запустили это все

Процедура ПередНачаломРаботыСистемы(Отказ)
    ПодключитьОбработчикОжидания("ОбработчикОжидания",1);
КонецПроцедуры

Процедура ОбработчикОжидания() экспорт
      ВыполнитьОбработкуЗаданий();
КонецПроцедуры

------------
Сделали Задаче форму списка, в реквизите Список выбрали основную таблицу Задача.ОтчетОПроделаннойРаботе.ЗадачиПоИсполнителю
Пошли в конфигурацию – рабочая область рабочего стола, подцепили там эту форму списка – теперь открывая 1С, видим свои задачи на рабочем столе.

Туда же в форму списка в команды формы добавили команду ВсеЗадачи, и привязали к нему

&НаКлиенте
Процедура ВсеЗадачи(Команда)
   ПокажиВсеЗадачи()
КонецПроцедуры

&НаСервере
Процедура ПокажиВсеЗадачи()
Список.ОсновнаяТаблица="Задача.ОтчетОПроделаннойРаботе";
КонецПроцедуры


Теперь кнопочкой можно отключить отбор.


Не могу понять куда «По мере возникновения этих задач у пользователя должна автоматически открываться форма каждой невыполненной его задачи»
Куда это можно подсунуть, в саму задачу, или какой-то обработчик ожидания.


 i 

Для выделения кода есть специальные теги!
 


Сообщение отредактировал Vofka - 26.11.13, 14:56

mister-x Подменю пользователя
сообщение 26.11.13, 22:00
Сообщение #2

...
Иконка группы
Модератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 3477
Из: Тернопіль
Спасибо сказали: 1417 раз
Рейтинг: 0

ще не реалізовував його, подивлюсь пізніше

Sunset1 Подменю пользователя
сообщение 28.11.13, 20:04
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 20
Спасибо сказали: 0 раз
Рейтинг: 0

Ок, я практически уверена, что это изврат. Пока в этих директивах плаваю((

Насколько я их поняла, надо показать пользователю все задачи, включая все которые он проигнорировал вчера и позавчера, и в момент после того, как создалась "сегодняшняя".

Сделала новую задачу "ПоказВсехНевыпЗадач " - с тем же реквизитом адресации Исполнитель.

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

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




Функция НевыполненныеЗадачи()   Экспорт
        ТабНевыпЗадач=Новый Массив;
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ПоказВсехНевыпЗадач.Ссылка  как Ссылка
        |ИЗ
        |    Задача.ПоказВсехНевыпЗадач.ЗадачиПоИсполнителю(&Исполнитель, НЕ Выполнена) КАК ПоказВсехНевыпЗадач";
        
        Запрос.УстановитьПараметр("Исполнитель", ПараметрыСеанса.ТекИсполнитель);
        
        Результат = Запрос.Выполнить();
        
        Если Результат.Выгрузить().Количество()>0 Тогда
            Выборка=Результат.Выбрать();
            Пока Выборка.Следующий() Цикл
                Задача=Выборка.Ссылка.ПолучитьОбъект();
                Задача.ВыполнитьЗадачу();
            КонецЦикла;    
            
            Запрос = Новый Запрос;
            Запрос.Текст =
            "ВЫБРАТЬ
            |    ОтчетОПроделаннойРаботеЗадачиПоИсполнителю.Ссылка  как Ссылка
            |ИЗ
            |    Задача.ОтчетОПроделаннойРаботе.ЗадачиПоИсполнителю(&Исполнитель, НЕ Выполнена) КАК ОтчетОПроделаннойРаботеЗадачиПоИсполнителю";
            
            Запрос.УстановитьПараметр("Исполнитель", ПараметрыСеанса.ТекИсполнитель);
            
            Выборка1 = Запрос.Выполнить().Выбрать();
            Пока Выборка1.Следующий() Цикл
                ТабНевыпЗадач.Добавить(Выборка1.Ссылка);
            КонецЦикла;
        КонецЕсли;
        возврат ТабНевыпЗадач;
    КонецФункции


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

    ПодключитьОбработчикОжидания("ОбработчикОжидания",5);
    ПодключитьОбработчикОжидания("ПоказЗадач",6);
КонецПроцедуры

Процедура ОбработчикОжидания() экспорт
      ВыполнитьОбработкуЗаданий();
КонецПроцедуры
  
Процедура ПоказЗадач() экспорт
   Зад=ОбщийМодуль1.НевыполненныеЗадачи();
  Для каждого СтрЗад из Зад Цикл
  ОткрытьЗначение(СтрЗад);
  КонецЦикла;
КонецПроцедуры

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 4:01
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!