19 сент. 2016 г.

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

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

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


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

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

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

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


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


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


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

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

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

13 сент. 2016 г.

Удалить строку из ТаблицыЗначений 7.7

Процедура УдалитьСтрокуИзТаблицыЗначений() 
 Пока ТЗ.ПолучитьСтроку() = 1 Цикл     
  ~начало:   
  если НужноУдалитьСтрокуИзТаблицыЗначений тогда 
   ТЗ.УдалитьСтроку();  
   Если ТЗ.НомерСтроки<>0 Тогда 
    Перейти ~начало;
   КонецЕсли;
  конецесли;
 конеццикла; 
КонецПроцедуры
подход, как в 8-ке не подойдет, в 7-ке заморочка с НомерСтроки.

11 сент. 2016 г.

Сброс пароля 1С 7.7

Есть конфигурация с пользователями и ни к одному пользователю не можешь вспомнить пароль?

Тогда заходит в каталог базы 1С и перемести с папки каталогБД\usrdef\ файл users.usr куда желаешь. Запусти конфигуратор, после запуска назад файл users.usr перемести каталогБД\usrdef\, а далее в конфигураторе открываем список пользователей и удаляем или изменяем нужному пользователю пароль. Все.

Тестировал на файловом режиме.

Версионирование (история изменений объектов) (Управляемые формы)

Данная конфигурация дает возможность отслеживать историю изменений объектов базы данных, а так же позволяет наглядно показать изменения в виде информативного отчета.
Взял конфигурацию http://infostart.ru/public/137383/ с данной публикации для обычных форм и добавил возможность работы для управляемых форм. Больше нечего добавить :)
Пару скриншотов для ознакомления





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

9 сент. 2016 г.

Узнать дату создания объекта 1С

Функция взята с интернета.
Функция ДатаСозданияСсылки(Ссылка) Экспорт
       
        Если НЕ ЗначениеЗаполнено(Ссылка) Тогда
                Возврат Неопределено;
        КонецЕсли;     
               
        Момент = Дата(1, 1, 1);
        Попытка
               
        УИ = Строка(Ссылка.УникальныйИдентификатор());
        УИ = ВРег(СтрЗаменить(УИ,"-",""));
               
                Если Сред(УИ, 13, 1) = "1" Тогда
                       
            Значение16 = ВРег(Сред(УИ, 14, 3) + Сред(УИ, 9, 4) + Сред(УИ, 1, 8));
            Цифры16    = "123456789ABCDEF";
            Значение10 = 0;
            Длина16    = СтрДлина(Значение16);
                       
                        Для Ном = 1 По Длина16 Цикл
                Значение10 = Значение10 + Pow(16, Длина16-Ном)*Найти(Цифры16, Сред(Значение16, Ном, 1));
                        КонецЦикла;
                       
            Значение10 = Значение10/10000000;
            Момент     = Дата(1582, 10, 15, 3, 0, 0) + Значение10;
                       
                КонецЕсли;
               
    Исключение
    КонецПопытки;
       
        Возврат Момент;
               
КонецФункции

Перебрать перечисления 1С

Для н = 0 По  Перечисления.ТипыПроизводства.Количество() - 1 Цикл      
КонецЦикла;

Проверить режим подключения к базе

Процедура КнопкаВыполнитьНажатие(Кнопка)
  Сообщить(РежимЗапуска(СтрокаСоединенияИнформационнойБазы()));
КонецПроцедуры
 
Функция РежимЗапуска(СтрокаСоединения)
 Если Найти(СтрокаСоединения,"File") <> 0 Тогда
  Возврат "Файловый";
 ИначеЕсли Найти(СтрокаСоединения,"Srvr") <> 0 Тогда 
  Возврат "Серверный";
 Иначе 
  Возврат "Неопределено";
 КонецЕсли;
КонецФункции

Узнать имя базы 1С

ИмяБазы = Макс(НСтр(СтрокаСоединенияИнформационнойБазы(),"Ref"),НСтр(СтрокаСоединенияИнформационнойБазы(),"File"))

Индикатор выполнения

В реквизитах формы Добавляем Реквизит типа Число, перемещаем добавленные реквизит на форму и в свойствах перемещенного реквизита на форме в поле Вид выбираем Поле индикатора.
Выборка = РезультатЗапроса.Выбрать(); 
Индикатор = ЭлементыФормы.ИндикаторПеребора; 
Индикатор.МаксимальноеЗначение = Выборка.Количество(); 
Индикатор.Значение = 0; 
Пока Выборка.Следующий() Цикл 
            Индикатор.Значение = Индикатор.Значение + 1; 
КонецЦикла;

Предупредить о закрытии формы 1С Управляемые формы

&НаКлиенте
Перем НужноЗакрыватьФорму ;

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

&НаКлиенте
Процедура ПередЗакрытиемЗавершение(Ответ, ДополнительныеПараметры) Экспорт 
        Если Ответ = КодВозвратаДиалога.Да Тогда 
                НужноЗакрыватьФорму = Истина; 
                Закрыть();
        Иначе 
                НужноЗакрыватьФорму = Неопределено; 
        КонецЕсли; 
КонецПроцедуры

Сохранить восстановить настройки формы

Данная часть кода по событиям с процедурами и функциями даст возможность сохранить настройки (заполненные поля), например внешней обработке при закрытии этой обработки, а так же при открытии восстановить эти же настройки (заполнения поля) в форму обработки.
&НаКлиенте
Перем НужноЗакрыватьФорму; 


// СОХРАНЕНИЕ

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

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

&НаКлиенте
Функция ЗаполнитьНастройки()       
        Настройки = Новый Структура;
        ВсеРеквизиты = ПолучитьВсеРеквизиты();
        Для Каждого Эл Из ВсеРеквизиты Цикл 
                Настройки.Вставить(Эл.Ключ,Элементы.Найти(Эл.Ключ).ТекстРедактирования);
        КонецЦикла;
       
        Возврат Настройки;   
КонецФункции

Процедура СохранитьНастройкиПользователя(Настройки)
        КлючОбъекта  = "OpenCartSQL";
        КлючНастроек = "OpenCartSQL_Настройки";
                               
        ХранилищеОбщихНастроек.Сохранить(КлючОбъекта,КлючНастроек,Настройки,,Пользователи.ТекущийПользователь());
КонецПроцедуры


// ВОССТАНОВЛЕНИЕ 

&НаКлиентеПроцедура 
ПриОткрытии(Отказ)
        ВосстановитьНастройкиПользователя();
КонецПроцедуры

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

Процедура ВосстановитьЗначенияРеквизитов(СтруктураНастроек)
        Для Каждого Эл Из СтруктураНастроек Цикл 
                ЭтаФорма[Эл.Ключ] = Эл.Значение;   
        КонецЦикла;
КонецПроцедуры
 

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