Имя: Пароль:
1C
 
Вывод сообщения о незаполненном поле документа
,
0 LivingStar
 
20.09.19
14:08
УТ 11, Документ.ЗаказКлиента.
При записи документа нужно выводить сообщение о том что не заполнено одно из полей на форме.
В зависимости от выбранного значения в списке другого поля. Подскажите пожалуйста. Где правильно это сделать?
В какой процедуре? В модуле формы или модуле объекта?
1 GROOVY
 
20.09.19
14:11
В обработкеПроверкиЗаполнения
2 LivingStar
 
20.09.19
14:13
В процедуре ОбработкаПроверкиЗаполненияВМодулеФормы ?
3 Mankubus
 
20.09.19
14:14
объекта
4 trooba
 
20.09.19
14:15
(2) Пример из типовой, тут есть обращение к обеим функциям, думаю разберетесь:

Если УчетТоваров.НеУказанаСтранаПроисхождения(СтрокаТовары.НомерГТД, СтрокаТовары.СтранаПроисхождения) Тогда
                ТекстСообщения = ОбщегоНазначенияКлиентСервер.ТекстОшибкиЗаполнения("Колонка",, НСтр("ru = 'Страна происхождения'"),
                    СтрокаТовары.НомерСтроки, ИмяСписка);
                    
                Поле = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", СтрокаТовары.НомерСтроки, "СтранаПроисхождения");
                ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, Поле, "Объект", Отказ);
            КонецЕсли;
5 LivingStar
 
20.09.19
14:33
(4) Обязательно так сложно делать?
Может перед записью? Если значение поля не такое то, и если не заполнено такое то поле, то сообщить то то?

(4) Это сходу не понять.

(3) В модуле документа? Я видел процедуру (2) в модуле формы. То есть нужно её сейчас искать именно в модуле объекта?
6 LivingStar
 
20.09.19
14:34
(1) (3) Вижу процедуру ОбработкаПроверкиЗаполнения в модуле объекта.
То есть нужно делать именно в ней? А в какой момент она выполняется?
7 palsergeich
 
20.09.19
14:39
(6) когда происходит проверка заполнения.
Она вызывается штатно платформой, так и может быть вызвана из кода.
Рекомендую почитать на ИТС или на ИС про это
8 GROOVY
 
20.09.19
14:40
(6) Там в синтакс-помощник все ОЧЕНЬ подробно описано.
9 LivingStar
 
20.09.19
14:59
Делаю в расширении в модуле объекта.

Почему выходит ошибка?

{ДМ_Документ_ЗаказКлиента Документ.ЗаказКлиента.МодульОбъекта(39,29)}: Переменная не определена (Объект)
        Если Не ЗначениеЗаполнено(<<?>>Объект.ДополнительнаяИнформацияПоДоставке1) Тогда (Проверка: Сервер)


//////////////////////////////////////////////////////////////

// LivingStar 2019_09_20 ->
&После("ОбработкаПроверкиЗаполнения")
Процедура ДМ_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    Если Не СпособДоставки = Перечисления.СпособыДоставки.Самовывоз Тогда
        Если Не ЗначениеЗаполнено(Объект.ДополнительнаяИнформацияПоДоставке1) Тогда
            
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
// <-
10 LivingStar
 
20.09.19
15:49
Я сдела вот так, почему то по коду проходит, но сообщение не показывается (((((

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



Почему?
11 LivingStar
 
20.09.19
15:56
Сообщение не показывается. Что я не так делаю?

&После("ОбработкаПроверкиЗаполнения")
Процедура ДМ_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    Если Не СпособДоставки = Перечисления.СпособыДоставки.Самовывоз Тогда
        Если Не ЗначениеЗаполнено(ЭтотОбъект.ДополнительнаяИнформацияПоДоставке) Тогда
            Сообщить("Не заполнено поле <<Контактная и дополнительная информация по доставке !>>", СтатусСообщения.Информация);    
            Текст = "Не заполнено поле <<Контактная и дополнительная информация по доставке !>>";
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
12 LivingStar
 
20.09.19
16:03
Подскажите пожалуйста! Где мое сообщение????? Почему оно не показывается? Что я не так сделал??????
13 Кодер
 
20.09.19
16:06
Последний вопрос, конечно, провоцирует...

Ты на УФ? Тогда зачем используешь "Сообщить"?
14 palsergeich
 
20.09.19
16:08
Проверка заполнения сама плюется сообщениями, надо только поиграть с МассивПроверяемыхРеквмзитов
Я думал ты таки справку то почитал, там же усё написано(
15 palsergeich
 
20.09.19
16:10
(14) ой проверяемыереквизиты, вот с ней надо поиграться
16 Механик
 
20.09.19
16:21
(13) А разве "Сообщить" на УФ не работает?
17 LivingStar
 
20.09.19
16:29
(13) Я как то хочу вывести сообщение. Как угодно. Что бы оно осталось. А то я нажимаю записать и закрыть, документ закрывается, велетает и пропадает какое то сообщение не мое а моего нет ((((( Мне хоть как бы , любым способом. Почему не срабытывает? Помогите!!!!!!
18 LivingStar
 
20.09.19
16:30
Может эта процедура дурная????

ОбработкаПроверкиЗаполнения

И нужно делать в при записи и все будет работать?

Что не так у меня, подскажите?
19 Кодер
 
20.09.19
16:31
Дамочка, прекратите истерику.

Не можете творить - не надо, копируйте чужой удачный код.
И это не работает - почитайте документацию.
Не поможет и это - мне надо керамогранит уложить в Зеленограде, бетономешалку дам, всему научу.
20 craxx
 
20.09.19
16:32
(18) Андрюха, завязывай тупить
21 LivingStar
 
20.09.19
16:35
Я с утра бывает могу хорошо работать, а после полудня ещё и под вечер, голова выключается. Вот дошел до того что не могу вывести сообщение ((( Что делать то?
22 ам794123
 
20.09.19
16:35
(17) вам же в (4) сказали как делать
23 SadrArt
 
20.09.19
16:36
(18) нет, это кто то другой дурной
24 LivingStar
 
20.09.19
16:36
дело в параметрах да?

ТекстСообщения, ЭтотОбъект, Поле, "Объект", Отказ);
25 SadrArt
 
20.09.19
16:38
у тебя сообщения выводятся, но ты их не видишь, потому как форма закрывается
сделай так, чтобы форма не закрывалась
26 SadrArt
 
20.09.19
16:39
(13) + "ЭтотОбъект" в модуле объекта тоже кажется моветон
27 Очевидно
 
20.09.19
16:39
(0) ИТС есть ?
Придайся чтиву :
https://its.1c.ru/db/v8std#content:463:hdoc
28 LivingStar
 
20.09.19
16:42
(25) Вечер, как не пытайся а мозгов в голове уже нет (((((( Теперь с утра нового дня уже.
29 LivingStar
 
20.09.19
17:06
Как мне привязывать к форме сообщение то, если форма закрывается!
Как что бы оно осталось пользователю то, если документ закрылся?
30 Очевидно
 
20.09.19
17:09
(29) в ссылке из (27) есть пример для копипаста
31 LivingStar
 
20.09.19
17:21
Скажите я в правильном месте делаю вывод сообщения?
Форма то закрывается!!!
Как что бы сообщение осталось?

Не знаю что это даст


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


Пробую. Мне нужно что бы сообщение осталось!
32 LivingStar
 
20.09.19
17:22
(31) Какое то сообщение показывается, не моё, и все закрывается. Моего так и нет (
33 LivingStar
 
20.09.19
18:02
может быть само положение сообщения куда то скрыто?
Так тоже не работает.

&НаСервере
Процедура ДМ_ПриЗаписиНаСервереПосле(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Если Не Объект.СпособДоставки = Перечисления.СпособыДоставки.Самовывоз Тогда
        Если Не ЗначениеЗаполнено(Объект.ДополнительнаяИнформацияПоДоставке) Тогда
            Сообщить("Не заполнено поле <<Контактная и дополнительная информация по доставке !>>", СтатусСообщения.Информация);    
            //Текст = "Не заполнено поле <<Контактная и дополнительная информация по доставке !>>";
            //ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст, ЭтотОбъект, "ДополнительнаяИнформацияПоДоставке","Объект.ДополнительнаяИнформацияПоДоставке");
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
34 LivingStar
 
20.09.19
19:00
35 LivingStar
 
20.09.19
19:07
Не работает

&НаКлиенте
Процедура ДМ_ПередЗаписьюПеред(Отказ, ПараметрыЗаписи)
    //ВсеОкна = ПолучитьОкна();
    //РабСтол = ВсеОкна[0];
    //РабСтол.Активизировать();
    //    
    ОкнаКлиентскогоПриложения = ПолучитьОкна();
    Для каждого ОкноКлиентскогоПриложения Из ОкнаКлиентскогоПриложения Цикл
        Если ОкноКлиентскогоПриложения.Основное Тогда
            ОкноКлиентскогоПриложения.Активизировать();
            Прервать;
        КонецЕсли;
    КонецЦикла;    
КонецПроцедуры
// <-
36 LivingStar
 
20.09.19
19:22
Кто либо понимает о чем я говорю? Нажатие кнопки провести и закрыть закрывает документ и нет сообщения ( !!! Как что бы оно было после закрытия документа?
37 Fram
 
20.09.19
21:33
(36) ты документацию принципиально не читаешь?
38 LivingStar
 
21.09.19
06:13
(37)  Ну подскажите что читать? Какое решение? Везде пишут что это не возможно или какие то примеры которые не работают.
39 PuhUfa
 
21.09.19
06:19
(38) не знай что ты где читаешь, но все возможно и все выше тебе уже подсказали. в той же ут11 примеров твоей "задачи" полно
40 LivingStar
 
21.09.19
06:59
(39) Вы понимаете что мне нужно вывести сообщение по провести и закрыть?
Форма документа закрывается и нет никаких сообщений. Я пробовал все возможные варианты.
Подскажите хоть один я попробую.
41 LivingStar
 
21.09.19
07:01
Не нужна мне процедура ОбработкаПроверкиЗаполнения.
То о чем я пишу принципиальная проблема, и по ней есть много статей, где это разбирается.


Одно из решений

2). Довольно часто необходимо вывести сообщение в обработке проведения документа, причем не только когда возникла ошибка при проведении, но и в том случае, когда документ успешно проведен. Проблема возникает когда пользователь использует команду “Провести и закрыть”. Сообщение привязывается к окну содержащему форму текущего документа, которое в случае успешного проведения тут же закрывается и пользователь его не видит. Все дело в том что метод Сообщить() объекта СообщениеПользователю выводит сообщение в АКТИВНОЕ окно, документ как правило открывается в дополнительном окне, которое в данном случае и является активным. Таким образом, что бы пользователь смог прочитать сообщение после закрытия формы документа, необходимо перед использованием метода Сообщить() активизировать основное окно управляемого приложения. Один из вариантов – сделать это в событии формы ПередЗаписью(), например так:
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
  ОкнаКлиентскогоПриложения = ПолучитьОкна();
  Для каждого ОкноКлиентскогоПриложения Из ОкнаКлиентскогоПриложения Цикл
    Если ОкноКлиентскогоПриложения.Основное Тогда
      ОкноКлиентскогоПриложения.Активизировать();
      Прервать;
     КонецЕсли;
  КонецЦикла;
КонецПроцедуры
После этого в обработке проведения можно смело выводить сообщение, теперь оно будет привязано к основному окну, и пользователь сможет прочитать его даже после закрытия формы документа.
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
  // .....

  Сообщение = Новый СообщениеПользователю;
  Сообщение.Текст = "Проведен документ " + Ссылка;
  Сообщение.КлючДанных = Ссылка;
  Сообщение.Сообщить();
  // .....

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



Но у меня это не работает! Форма закрывается и моего сообщения нет
42 LivingStar
 
21.09.19
09:17
up
43 hhhh
 
21.09.19
09:44
(42) а точно окно основное? У тебя же не основное окно.
44 rphosts
 
21.09.19
09:47
(0) о! ЛивингСтар! (42) см (1) там всё есть!
(41) а где вот это самое: Отказ = Истина;
45 LivingStar
 
21.09.19
09:54
(44) Что такое отказ истина? Эточто бы документ оставался открытым при этом сообщении????
Этого не нужно.
Нужно что бы документ закрылся и вывелось сообщение. Как это сделать?

(43) Вы про какое окно? Вот http://joxi.ru/GrqW64zi4DaqP2

Я пытаюсь понять как это сделать и можно ли вообще.

Пользователь, нажимает "записать и закрыть", ему нужно вывести сообщение.
Вот такая задача, подскажите кто в теме, поправьте, или подскажите способ, что бы предметно и детально его испробовать, если есть рабочий.
46 hhhh
 
21.09.19
10:02
(45) какое из всех этих окон Основное? Непонятно
47 rphosts
 
21.09.19
10:02
это значит отказаться от продолжения процесса на этом этапе.
48 Kashey
 
21.09.19
10:07
(45) Если проверяемое поле не заполнено, то документ должен проводиться или нет?
49 hhhh
 
21.09.19
10:07
(47) ему не нужно отказываться, просто сообщить и двигаться дальше.
50 LivingStar
 
21.09.19
10:09
(45) Основное - Это рабочий стол конфигурации. Основное окно конфигурации.

(48) Все должно выполняться как выполняется, без ограничений. Нужно только пользователю вывести окно и все.
51 LivingStar
 
21.09.19
10:11
(47) Не нужно не от чего отказываться.
Пользователь жмет Записать и закрыть. Окно закрывается.

А пользователю выводится сообщение, -

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


Или как там его вывести. Любым способом, что бы оно осталось. В обычных формах с этим бы не было бы проблем.
52 rphosts
 
21.09.19
10:11
(49) ну значит закроется вместе с сообщением оконце
53 rphosts
 
21.09.19
10:13
(51) если у вас такие извращения... прячьте кнопки ЗаписатьИЗакрыть, Ок, Провести и втыкайте вместо них свои со своей логикой
54 LivingStar
 
21.09.19
10:15
(53) Не нужно ничего прятать. Нужно сделать как заявлено.
Пользователь жмет, записать и закрыть.
Документ закрывается.

И если не заполнено это поле, то выводится сообщение об этом, и отображается.

А то сколько я его не вывожу его нет нигде.
55 hhhh
 
21.09.19
10:17
(54) Ну, потому что рабочий стол это не основное окно. Ты где прочитал, что оно основное?
56 rphosts
 
21.09.19
10:19
(54) оконце снизу - тексты всех вызовов Сообщить в нём. Если так нужно ещё и вернуться в закрытый уже документ - выкидывай туда этого документа Ссылку
57 LivingStar
 
21.09.19
10:24
(55) Я же вот вам подчеркнул http://joxi.ru/GrqW64zi4DaqP2
Я не сам это придумал а взял решение, про которое говорят что оно работает (41)
Но оно не работает!!!!!!!

(56) Я не понимаю. Можете по коду подсказать?

Я перепробовал все что можно, ничего не работает!!!!!
58 hhhh
 
21.09.19
10:31
(57) а какого года это решение в (41) ? Может оно столетнее? Точно на такси?
59 hhhh
 
21.09.19
10:33
(57) А рабочий стол открывал после проведения? Может ты забыл открыть рабочий стол и там посмотреть?
60 LivingStar
 
21.09.19
10:41
(59) После проведения и закрытия, когда документ закрывается
остается же рабочий стол????

Я СДЕЛАЛ ВОТ ТАК. ВСЕХ УСТРАИВАЕТ? ИЛИ ЧТО ТО НЕ ТАК? НЕ ВИЖУ ДРУГИХ ВАРИАНТОВ.
ЕСЛИ ВСЕ ЧТО И БЫЛО ТО СТОЛЕТНЕЕ. Я делаю в конфигурации УТ 11.4.7.141

/////////////////////////////////////////////////////


    // LivingStar 2019_09_21 ->
    Если Не Объект.СпособДоставки = ЗначениеСамовывоз() Тогда
        Если Не ЗначениеЗаполнено(Объект.ДополнительнаяИнформацияПоДоставке) Тогда
            Предупреждение("Не заполнено поле"               + Символы.ПС +
                           "<<Контактная и дополнительная" + Символы.ПС +
                           "информация по доставке !>>");    
        КонецЕсли;
    КонецЕсли;
    //
КонецПроцедуры                                                                                                                                          
//
Функция ЗначениеСамовывоз()
    Возврат Перечисления.СпособыДоставки.Самовывоз;
КонецФункции
// <-
61 hhhh
 
21.09.19
10:43
(60) нет, рабочий стол не остаётся.
62 LivingStar
 
21.09.19
10:44
(61) Ну не знаю тогда. Что сделать то что бы сообщение осталось???
Я уже не соображаю по этому поводу и решил остановиться на (60).
63 hhhh
 
21.09.19
10:45
Поэтому вам не пойдёт это решение. Пользователю ещё кучу кнопок нажимать, чтобы перейти на рабочий стол и там потом внизу где-то смотреть, пришло ему сообщение или нет.
64 LivingStar
 
22.09.19
08:41
(63) Какое решение тогда этой задачи?

Пользователь нажимает "Провести и закрыть", форма документа закрывается, нужно вывести сообщение пользователю.
65 Мимохожий Однако
 
22.09.19
08:44
(51) Правильнее и логичнее (ИМХО) при обязательных незаполненных полях делать отказ в записи документа, проведения и закрытии. Тогда не придётся городить огород с оповещением.
66 Фрэнки
 
22.09.19
09:22
продолжу пост выше - при том, что в топике задано, что форма документа отрыта и Запись документа с проведением делается из его формы. И исходя из того, что нужен контроль на заполненные поля, либо реквизиты объекта в форме.
Перехват события, которым пользователь будет Закрывать с Записью и Проведением, либо просто Запись перед Проведением - это все можно спокойно перехватить обработчиками событий прямо на форме или повесть свое собственное событие. Но на форме и вариантов можно придумать много разных.

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

з.ы. решение будет довольно простым и примитивным.
67 Fram
 
22.09.19
11:04
(64) правильнее будет задать вопрос какой смысл в этом сообщении после закрытия формы?