Версия для печати темы (https://pro1c.org.ua/index.php?s=815f83600fb1bfc11a6ef97f1e9f23d1&showtopic=3138)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ СообщениеПользователю - Поле

Автор: mister-x 12.03.11, 18:19

На реквізиті форми ДатаДоставки є процедура:

&НаКлиенте


Процедура ДатаДоставкиПриИзменении(Элемент)
    

Если Объект.ДатаДоставки < ТекущаяДата() Тогда    


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


тобто потрібно, щоб при введені дати доставки, меншої за системну дату видавалось повідомлення, що прив"язане до елемента ДатаДоставки і відповідно в дату доставки прописувати системну дату.


При такому коді, платформа видає помилку:

{Документ.ЗаявкаНаТранспорт.Форма.ФормаДокумента.Форма(7)}: Ошибка при установке значения атрибута контекста (Поле)
Сообщение.Поле = Объект.ДатаДоставки;
Несоответствие типов



Чому?

Автор: logist 12.03.11, 18:31

"Поле" должно быть названием элемента формы типа строка, а не реквизитом.

Автор: Боромир 12.03.11, 18:34

Если Объект.ДатаДоставки < ТекущаяДата() Тогда

замените на
Если ЭтотОбъект.ДатаДоставки < ТекущаяДата() Тогда

Автор: logist 12.03.11, 18:35

Если не ошибаюсь, в Вашем случае должно быть так:

Сообщение.Поле = "ДатаДоставки";

Автор: Боромир 12.03.11, 18:40

Цитата(logist @ 12.03.11, 19:35) *
Если не ошибаюсь, в Вашем случае должно быть так:
Сообщение.Поле = "ДатаДоставки";

или
Сообщение.Поле = Формат(ДатаДоставки,"ДЛФ=д");

как вариант

Автор: mister-x 12.03.11, 18:42

а як тоді повідомомлення причепити до ДатаДоставки?

Автор: Vofka 12.03.11, 19:00

Цитата
а як тоді повідомомлення причепити до ДатаДоставки?

Вы попробовали, как написал logist?
Сообщение.Поле = "ДатаДоставки";

Автор: mister-x 12.03.11, 19:12

Так, повідомлення №6, було написане до того як з"явились повідомлення №№4-5. smile.gif

Цитата(Боромир @ 12.03.11, 19:34) *
Если Объект.ДатаДоставки < ТекущаяДата() Тогда
замените на
Если ЭтотОбъект.ДатаДоставки < ТекущаяДата() Тогда


воно і так працює, а в чому полягає різниця?

Автор: logist 12.03.11, 19:18

Цитата(mister-x @ 12.03.11, 19:13) *
воно і так працює, а в чому полягає різниця?

Ну читайте ж "Синтаксис-помощник", там все замечательно описано, и зачастую с примерами.

Автор: mister-x 12.03.11, 19:32

Читаю:
ЭтотОбъект (ThisObject)
Использование:

Только чтение.
Описание:

Тип: ДокументОбъект. Содержит сам объект базы данных. Предназначено, в основном, для получения данного объекта встроенного языка в модуле объекта или модуле формы.

Доступность:

Сервер, толстый клиент, внешнее соединение.

Наскільки я розумію - тут я маю копію об"єкта із сервера, при зміні копії об"єкта при записі форми відбувається синхронізація копії об"єкту із об"єктом на сервері.

При чому ЭтотОбъект (ThisObject) в процедурі, яка компілюється на клієнті недоступний.

Автор: pablo 14.03.11, 9:04

Цитата
Наскільки я розумію - тут я маю копію об"єкта із сервера, при зміні копії об"єкта при записі форми відбувається синхронізація копії об"єкту із об"єктом на сервері.

Контекст выполнения процедуры желательно указывать.

Для Вашего случая уже указан ответ в №5.
Еще один вариант:
Сообщение.Поле = Строка(ДатаДоставки);

Автор: pablo 14.03.11, 9:06

P.S. Контекст не увидел, виноват

Автор: mister-x 14.03.11, 17:23

Цитата(pablo @ 14.03.11, 10:06) http://pro1c.org.ua/index.php?act=findpost&pid=20105 (&НаКлиенте) wink.gif

http://pro1c.org.ua/index.php?showtopic=3138&st=0&gopid=20035&#

Автор: mister-x 14.03.11, 17:24

Всім дякую за допомогу, скористався повідмленнями 4-5, тему закрити.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua