19 сент. 2016 г.

Правильное удаление строк из таблицы значений

//******************************************************************************
// ОчисткаТЗ()
// Параметры: ТЗ, которую надо очистить
// В ТЗ д.б. Колонки с идентификаторами "НадоУдалить" и "ОПС" (оригинальный порядок строк)
// Описание: очищает ТЗ от ненужных строк
Процедура глОчисткаТЗ(ТЗдляЧистки, ОПС="+ОПС", КолонкаУдалить="НадоУдалить", Режим=0) Экспорт
 
 Попытка  НадоУдалить = ТЗдляЧистки.Итог(КолонкаУдалить);
 Исключение Возврат;
 КонецПопытки;
 
 ТЗКС = ТЗдляЧистки.КоличествоСтрок();
 Если Режим <> 0 Тогда
  Сообщить("> ["+ТекущееВремя()+"]: *** удаляем "+НадоУдалить+" из "+ТЗКС+" ****"); 
 КонецЕсли;
 
 Если НадоУдалить <= 0 Тогда Возврат; КонецЕсли;
 
 Если НадоУдалить >= ТЗКС Тогда
  ТЗдляЧистки.УдалитьСтроки();
 Иначе
  ТЗРаб = СоздатьОбъект("ТаблицаЗначений"); ТЗдляЧистки.Выгрузить(ТЗРаб);
  ТЗРаб.Сортировать("+"+КолонкаУдалить); ТЗРаб.Выгрузить(ТЗдляЧистки,1,ТЗКС-НадоУдалить);
  ТЗРаб = 0;
 КонецЕсли;
 Если ПустаяСтрока(ОПС) = 1 Тогда Возврат; КонецЕсли; //сортировать не надо
 Если ОПС = "###" Тогда Возврат; КонецЕсли; //сортировать не надо
 //восстановим оригинальный порядок строк
 ТЗдляЧистки.Сортировать(ОПС);
КонецПроцедуры //глОчисткаТЗ()

Обмен сообщениями в 1С

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

Отправка сообщения осуществляется с помощью обработки, в которой можно


  • выбрать одного или несколько получателей для отправки им сообщения (уведомления)
  • по кнопке "Открыть регистр сообщений" просмотреть сообщение которое будет отправлено для конкретного пользователя (пользователей)

-------------------------------------------------------------------------------------------------
!В конфигурации должен быть:
  • Справочник.Пользователи
  • ПараметрыСеанса.ТекушийПользователь
-------------------------------------------------------------------------------------------------

Для реализации обмена сообщениями в 1С в конфигурацию я добавил 

РегистрСведений СообщенияПользователям
Измерения: Пользователь = СправочникСсылка.Пользователи
Ресурс: Сообщение = Строка


Общий модуль РаботаСПользователем (Глобальный, Клиент (упр. приложение),Клиент (об. приложение))


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


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

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

Функция ПолучитьТекущегоПользователя() Экспорт
               Возврат Справочники.Пользователи.НайтиПоНаименованию(ПараметрыСеанса.ТекушийПользователь.Наименование,Истина);
КонецФункции
В модуле управляемого приложения
Процедура ПриНачалеРаботыСистемы()
               ПодключитьОбработчикОжидания
("ПроцедураУведомленияПользователя",180,);
КонецПроцедуры
Обработка для общения скачать.
 

CopyPaste Copyright © 2017 - |- Шаблон создан O Pregador - |- Отредактирован myr4ik07