Как привязать сообщение пользователю к элементу табличной части документа?
Управляемые формы. Документ проводится и в случае если проверка не проходит должно появиться сообщение с привязкой к строке к эл. Количество.Вот код:
Код выводит облачное сообщение но оно привязано только к строке, а не к полю Количество.
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Товара "+ ВыборкаНоменклатура.Номенклатура.Наименование + " в количестве "+ВыборкаНоменклатура.Количество + " нет на складе ";
Сообщение.Поле ="Объект.СписокНоменклатуры["+ ВыборкаНоменклатура.НомерСтроки+"].Количество";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
ПоказатьКод выводит облачное сообщение но оно привязано только к строке, а не к полю Количество.
По теме из базы знаний
- Расчет фактической себестоимости в БП. Как это должно работать.
- База пользователей 1С (версия 0.7.1.16 от 21.08.2013)
- Конфигурация "Весовая ред. 3.0" для Платформы 8.3
- Обмен с системой Меркурий через Web + Ветис.API для любых конфигураций (универсальная конфигурация Хамелеон Меркурий)
- Проблемы маркируемой продукции при переходе на версию УТ 11.5.19.63
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Попробуйте без установить данные и без "Объект."
Т.е. примерно следующее:
Где СписокНоменклатуры - элемент формы.
Т.е. примерно следующее:
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Товара "+ ВыборкаНоменклатура.Номенклатура.Наименование + " в количестве "+ВыборкаНоменклатура.Количество + " нет на складе ";
Сообщение.Поле ="СписокНоменклатуры["+ ВыборкаНоменклатура.НомерСтроки+"].Количество";
Сообщение.Сообщить();
Где СписокНоменклатуры - элемент формы.
Возможно дело в том, что нужно указывать индекс строки, а не номер.
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
ТЧ = Объект.ТабличнаяЧасть1;
Для каждого СтрокаТЧ ИЗ ТЧ Цикл
Если СтрокаТЧ.Реквизит2 = 55 Тогда
Индекс = ТЧ.Индекс(СтрокаТЧ);
Сообщить = Новый СообщениеПользователю;
Сообщить.Текст = "Ошибка в этом поле строки";
Сообщить.Поле = "Объект.ТабличнаяЧасть1["+Индекс+"].Реквизит2";
Сообщить.Сообщить();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
(5)
Этот код некорректно будет выполнять привязку к строке (из-за неявного преобразования в число будут добавлены разделители тысяч), если в табличной части больше 1000 строк.
Вот так корректнее работать будет
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
ТЧ = Объект.ТабличнаяЧасть1;
Для каждого СтрокаТЧ ИЗ ТЧ Цикл
Если СтрокаТЧ.Реквизит2 = 55 Тогда
Индекс = ТЧ.Индекс(СтрокаТЧ);
Сообщить = Новый СообщениеПользователю;
Сообщить.Текст = "Ошибка в этом поле строки";
Сообщить.Поле = "Объект.ТабличнаяЧасть1["+Индекс+"].Реквизит2";
Сообщить.Сообщить();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьПроцедура ПередЗаписью(Отказ, ПараметрыЗаписи)
ТЧ = Объект.ТабличнаяЧасть1;
Для каждого СтрокаТЧ ИЗ ТЧ Цикл
Если СтрокаТЧ.Реквизит2 = 55 Тогда
Индекс = ТЧ.Индекс(СтрокаТЧ);
Сообщить = Новый СообщениеПользователю;
Сообщить.Текст = "Ошибка в этом поле строки";
Сообщить.Поле = "Объект.ТабличнаяЧасть1["+Индекс+"].Реквизит2";
Сообщить.Сообщить();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Этот код некорректно будет выполнять привязку к строке (из-за неявного преобразования в число будут добавлены разделители тысяч), если в табличной части больше 1000 строк.
Вот так корректнее работать будет
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
ТЧ = Объект.ТабличнаяЧасть1;
Для каждого СтрокаТЧ ИЗ ТЧ Цикл
Если СтрокаТЧ.Реквизит2 = 55 Тогда
Индекс = Формат(ТЧ.Индекс(СтрокаТЧ), "ЧГ=");
Сообщить = Новый СообщениеПользователю;
Сообщить.Текст = "Ошибка в этом поле строки";
Сообщить.Поле = "Объект.ТабличнаяЧасть1["+Индекс+"].Реквизит2";
Сообщить.Сообщить();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
(13)
И для первой же строки с индексом ноль ты получишь пустую строку.
Перекрестное опыление, инцухт, инцест, вырождение. Ничего нового.
А, ну и некротему еще обновить, потому что Очень Хочется Поделиться.
Вот так корректнее
Индекс = Формат(ТЧ.Индекс(СтрокаТЧ), "ЧГ=");
Перекрестное опыление, инцухт, инцест, вырождение. Ничего нового.
А, ну и некротему еще обновить, потому что Очень Хочется Поделиться.
(6) не работает никак, подозреваю что это очередной глюк платформы (8.3.17.1549), хотя пробовал несколько разных
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "По номенклатурае " + ВыборкаНоменклатура.НоменклатураПредставление + " не хватает " + (ВыборкаНоменклатура.Количество - ВыборкаНоменклатура.КоличествоОстаток);
Сообщение.Поле = "СписокНоменклатуры["+(ВыборкаНоменклатура.НомерСтроки-1)+"].Количество";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
(7)Не соглашусь с Вами на счет "глюка" платформы.
стоит такая же, как и у Вас = 1С:Предприятие 8.3 (8.3.17.1549)
все работает исправно.
стоит такая же, как и у Вас = 1С:Предприятие 8.3 (8.3.17.1549)
// Создание сообщения
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "В строке №"+ст.НомерСтроки+"
|по номенклатуре: "+ст.Номенклатура+"
|не верно указана количество: "+ст.Количество+" "+ст.Номенклатура.ЕдиницаИзмерения+"
|по спецификации: "+ст.Спецификация+"
|Остаток по спецификации: "+ст.КоличествоОстаток+" "+ст.Номенклатура.ЕдиницаИзмерения+"
|Отклонение: "+(ст.Количество-ст.КоличествоОстаток)+"
|Измените кол-во в указанной строке на "+ст.КоличествоОстаток+" "+ст.Номенклатура.ЕдиницаИзмерения;
Сообщение.Поле = "Объект.Товары["+(ст.НомерСтроки-1)+"].Количество";
Сообщение.Сообщить();
Показатьвсе работает исправно.
Прикрепленные файлы:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот