Имя: Пароль:
1C
1С v8
Вывод Сообщения Пользователю в Табличной части (процедура на сервере)
,
0 Meldir
 
22.04.18
23:11
Доброго время суток!
Задача: В документе Отчет Производства За Смену есть табличная часть, в которой выводится список "ингредиентов" согласно выбранной пользователем спецификации. Список формируется через запрос на сервере, одновременно надо проверять, хватает ли вообще на складе сырья и, если нет, выводить сообщение. В идеале с привязкой к строке/ячейке. С последним возникла проблема. Сообщения цепляются или к подвалу таблицы, или прилипают снизу к последней строке. Повторюсь, вся процедура формирования табличной части и сообщений идет на сервере.
Вывод организован следующим образом:

Пока РезультатЗапроса.Следующий() Цикл
    Строка = Объект.Материалы.Добавить();
    //...    
    Если ЗначениеЗаполнено(Объект.Количество) Тогда
        Если Объект.Количество > РезультатЗапроса.ПределГотовойПродукции Тогда
            Строка.Количество = 0;
            Строка.Себестоимость = 0;
            тСтрока = Строка.НомерСтроки-1;
            Сообщение = новый СообщениеПользователю;
        //Так сообщения привязываются к подвалу таблицы
            Сообщение.Поле = "Материалы[" + тСтрока + "].Количество";
        // далее - глупость, но именно так сообщения оказываются под нижней строкой таблицы
            //Сообщение.Поле = "Форма.Материалы[" + тСтрока + "].Количество";
            Сообщение.УстановитьДанные(РеквизитФормыВЗначение("Объект"));
            Сообщение.Текст = "Не хватает сырья:" + РезультатЗапроса.Номенклатура + ". Дозакажите " +
            Формат((Объект.Количество - РезультатЗапроса.ПределГотовойПродукции)*
            РезультатЗапроса.Количество,"ЧЦ=4") + РезультатЗапроса.ЕдИзмеренияКомплектующего + ". Сейчас сырья
            хватает на " + РезультатЗапроса.ПределГотовойПродукции + " готовой продукции.";
            Сообщение.Сообщить();
            Продолжить;
        Иначе
            Строка.Количество = РезультатЗапроса.Количество*Объект.Количество;
            Строка.Себестоимость = РезультатЗапроса.Коэффициент*Объект.Количество;
        КонецЕсли;    
    Иначе
        Строка.Количество = РезультатЗапроса.Количество;
        Строка.Себестоимость = РезультатЗапроса.Коэффициент;
    КонецЕсли;
    //...

Ради интереса цепляла сообщения к нетабличному полю - прекрасно прикрепилось, а вот с ячейками таблицы затык. Где я ошибаюсь?
1 Chameleon1980
 
23.04.18
03:19
а так?

Сообщение.Поле = "ЛистОтказа["+Объект.ЛистОтказа.Индекс(стр)+"].Решение";
            

Сообщение.Поле = "Материалы[" + Объект.Материалы.Индекс(стр) + "].Количество";

+ попробовать без
Сообщение.ПутьКДанным = "Объект";
2 Chameleon1980
 
23.04.18
03:22
+ вернее в индекс(стр) - стр  нужно передать строку тч (не номер)
3 Chameleon1980
 
23.04.18
03:31
хотя вру (м.б.)
утро - 5:30
4 Чайник1983
 
23.04.18
06:01
Сообщение.Поле = "Товары[" + Выборка.НомерСтроки - 1 +"].Количество";            Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
5 Otark
 
23.04.18
06:05
https://its.1c.ru/db/pubmanagedui#content:211:hdoc

Сообщение = Новый СообщениеПользователю;
Сообщение.Поле = "Товары[0].Количество";
Сообщение.Текст = "На складе есть только 5 единиц товара.";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
6 Meldir
 
23.04.18
09:01
(1) - Если не указываю УстановитьДанные, то сообщения вываливаются в общем списке, на форме даже не отражаются.  При установленных данных результат как у меня в первом случае - цепляются к подвалу.
7 Meldir
 
23.04.18
09:25
(4) Запись свойства Поле таким образом даёт ошибку "Преобразование значения к типу Число не может быть выполнено". Если номер строки выразить отдельно, как у меня, и прописать

Сообщение.УстановитьДанные(ЭтотОбъект);

сообщения вываливаются в общем списке, без цепляния к форме.
8 hhhh
 
23.04.18
10:09
(7) попробуйте

(Выборка.НомерСтроки - 1)

в скобки
9 Meldir
 
23.04.18
10:13
(5) Мануал почитала. Но у меня не работает Сообщение с такими свойствами, хоть убейте. Возможно, что из-за формирования на сервере. Я потестила варианты из этих статей:
http://prosto1s.ru/index.php/59-soobshcheniya-polzovatelyu-v-upravlyaemykh-formakh-eshche-raz
и
https://helpf.pro/faq/view/1842.html
"Не выходит каменный цветок", опять или подвал, или под последнюю строку.
10 Meldir
 
23.04.18
10:21
(8) - Ошибка ушла, на этом всё. Сообщения не хотят к ячейкам. Слушайте, может у меня где настройка не такая или галочку какую не вижу? Ну бред же, должно работать. Ну хоть один вариант(((
11 1Садовник
 
23.04.18
11:01
(10) документ записывается в этой же процедуре?
12 Meldir
 
23.04.18
11:29
(10) Нет, тут только формирование данных для формы. Пользователь проверил глазками и потом уже нажал сохранение.
13 hhhh
 
23.04.18
11:29
(10) вообще-то это неудобно, как вы задумали. Прилеплять сообщение там к какой-то ячейке. Лучше все сообщения выводить внизу. Просто в тексте сообщения чтобы был номер строки. Чтобы они все вместе были.
14 Meldir
 
23.04.18
11:37
(13) - ну тут вопрос спорный. Сообщения в любом случае не вывалятся пестрым одеялом на всю форму. Сбоку будет стандартный перечень всех ошибок, а на самой форме выведется последнее, на его окне волшебные стрелочки перехода к предыдущим. Также из перечня по клику можно сразу попасть к ячейке с ошибкой, а не искать её глазами. Проверяла вариант с работой на клиенте (форма справочника была) - мне понравилось. А вот с серверной реализацией не могу сладить.
15 Meldir
 
28.04.18
16:37
В общем и смех, и грех. Дело оказалось в релизе.
На 8.3.10.2650 вот такая "реализация":

https://cdn1.savepice.ru/uploads/2018/4/28/07f0276885728e3bf5d29c80257cb4b8-full.jpg

А в 8.3.12.1412 уже всё хорошо:

https://cdn1.savepice.ru/uploads/2018/4/28/da7f6c017e7d9d1c22be9b8d4b86167a-full.jpg
https://cdn1.savepice.ru/uploads/2018/4/28/b63d936da22a272e947e1bb82010ca24-full.jpg

Спасибо всем за участие! :)
16 triviumfan
 
28.04.18
16:41
Не верю, что дело в релизе.
17 Meldir
 
29.04.18
14:30
(16) Отправила dt-шник товарищу в Мурманск)) Ничего не правили, запустили как было - работает.
18 Meldir
 
29.04.18
14:33
(16) Если есть подозрение, что разница в чем-то ещё, давайте спрошу. Самой интересно.
19 mistеr
 
29.04.18
15:01
(16) Сложно поверить, что в 1С тоже косячат?