Имя: Пароль:
1C
 
Сообщение пользователю
0 pro3ri
 
12.08.15
10:07
Добрый день!

делаю сообщение в модуле набора записей регистра бухгалтерии:

Процедура ПередЗаписью(Отказ, РежимЗаписи)
    Ссылка = Отбор.Регистратор.Значение;
    Если Не ЗначениеЗаполнено(Ссылка.Курс) Тогда

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

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

    КонецЦикла;    
    
КонецПроцедуры

получаю https://s.mail.ru/4xBMMSSJ7RUB/img-2015-08-12-12-12-41.png
Как сделать чтобы сообщение выходило по стрелке вверху?
1 Господин ПЖ
 
12.08.15
10:12
откуда набор записей что-то знает про форму?
2 pro3ri
 
12.08.15
10:32
(1) Получается, нужно получитьформу?
3 alex-pro
 
12.08.15
11:25
(2) Получается гомно код. Нельзя в МО пихать любой инветрактив. Максимум - просто выведи информацию об ошибке.
А так - сделай проверку на форме перед записью, если режим записи - проведение.
4 alex-pro
 
12.08.15
11:25
*инветрактив = интерактив
5 pro3ri
 
12.08.15
12:06
(3) ок спасибо!
6 pro3ri
 
12.08.15
12:10
в итоге решил:
копирнул чудо код из ут и заработало:
ОМ: // Формирует и выводит сообщение, которое может быть связано с элементом
// управления формы.
//
//  Параметры
//  ТекстСообщенияПользователю - Строка - текст сообщения.
//  КлючДанных                - Любая ссылка на объект информационной базы.
//                               Ссылка на объект информационной базы, к которому это сообщение относится,
//                               или ключ записи.
//  Поле                       - Строка - наименование реквизита формы
//  ПутьКДанным                - Строка - путь к данным (путь к реквизиту формы)
//  Отказ                      - Булево - Выходной параметр
//                               Всегда устанавливается в значение Истина
//
//    Примеры использования:
//
//    1. Для вывода сообщения у поля управляемой формы, связанного с реквизитом объекта:
//    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
//        НСтр("ru = 'Сообщение об ошибке.'"), ,
//        "ПолеВРеквизитеФормыОбъект",
//        "Объект");
//
//    Альтернативный вариант использования в форме объекта:
//    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
//        НСтр("ru = 'Сообщение об ошибке.'"), ,
//        "Объект.ПолеВРеквизитеФормыОбъект");
//
//    2. Для вывода сообщения рядом с полем управляемой формы, связанным с реквизитом формы:
//    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
//        НСтр("ru = 'Сообщение об ошибке.'"), ,
//        "ИмяРеквизитаФормы");
//
//    3. Для вывода сообщения связанного с объектом информационной базы
//    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
//        НСтр("ru = 'Сообщение об ошибке.'"), ОбъектИнформационнойБазы, "Ответственный",,Отказ);
//
// 4. Для вывода сообщения по ссылке на объект информационной базы
//    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
//        НСтр("ru = 'Сообщение об ошибке.'"), Ссылка, , , Отказ);
//
// Случаи некорректного использования:
//  1. Передача одновременно параметров КлючДанных и ПутьКДанным
//  2. Передача в параметре КлючДанных значения типа отличного от допустимых
//  3. Установка ссылки без установки поля (и/или пути к данным)
//
Процедура СообщитьПользователю(
        Знач ТекстСообщенияПользователю,
        Знач КлючДанных = Неопределено,
        Знач Поле = "",
        Знач ПутьКДанным = "",
        Отказ = Ложь) Экспорт
    
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = ТекстСообщенияПользователю;
    Сообщение.Поле = Поле;
    
    ЭтоОбъект = Ложь;
    
#Если НЕ (ТонкийКлиент ИЛИ ВебКлиент) Тогда
    Если КлючДанных <> Неопределено Тогда
        Если XMLТипЗнч(КлючДанных) <> Неопределено Тогда
            ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа;
            ЭтоОбъект = Найти(ТипЗначенияСтрокой, "Object.") > 0;
        Иначе
            ИмяТипа = Строка(ТипЗнч(КлючДанных));
            ЭтоОбъект = Найти(ИмяТипа, "Обработка объект")>0 ИЛИ Найти(ИмяТипа, "Отчет объект")>0;
        КонецЕсли;
    КонецЕсли;
#КонецЕсли
    
    Если ЭтоОбъект Тогда
        Сообщение.УстановитьДанные(КлючДанных);
    Иначе
        Сообщение.КлючДанных = КлючДанных;
    КонецЕсли;
    
    Если НЕ ПустаяСтрока(ПутьКДанным) Тогда
        Сообщение.ПутьКДанным = ПутьКДанным;
    КонецЕсли;
        
    Сообщение.Сообщить();
    
    Отказ = Истина;
    
КонецПроцедуры

строчка в модуле набора записей регистра бухгалтерии:
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Проверьте курс",,"Курс", "Объект");
7 ЧеловекДуши
 
12.08.15
12:13
(6) Теперь он у тебя будет брать на любой документ, который пытался выполнить запись без "Курса" :)

...ГУАНО код детектид...
8 ЧеловекДуши
 
12.08.15
12:14
+ Видимо для вас не актуально "Скорость проведения группы документов за пол года" :)
9 pro3ri
 
12.08.15
12:20
Ну или вставил кусочек кода:
            УстановитьСоответствиеОбъектаИРеквизитаФормы(ЭтотОбъект, "Объект");
перед сообщением пользователю. Тема закрыта.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.