Имя: Пароль:
1C
1С v8
Проверить единицу измерения в ТЧ документа на клиенте (ERP 2.5)
0 zelenprog
 
02.12.25
12:52
Добрый день!

Задача вроде бы простая: в событии при записи документа "Заказ" нужно проверить единицы измерения в каждой строке ТЧ товаров.
Если это весовой товар - выдать пользователю сообщение-предупреждение.
Очень желательно сделать все это на клиенте.

Во-первых, не понятно в каком реквизите хранится единица измерения.
В ТЧ объекта "Товары" есть реквизит "Упаковка", но по умолчанию он пустой.
Хотя, на форме в таблице в колонке "Единица измерения" отображается "шт.".
Понятное дело, что эти штуки подставляются из Объект.ТЧТовары.Номенклатура.ЕдиницаИзмерения.
Получается, что если реквизит "Упаковка" пустой, то используется единица измерения из "Объект.ТЧТовары.Номенклатура.ЕдиницаИзмерения". А если реквизит "Упаковка" заполнен, то в качестве единицы измерения используется этот реквизит.
Верно я понял?

Тогда вопрос: как можно "добраться" до этих "шт.", не дергая сервера, если "Упаковка" пустой?

Нужно учесть, что пользователь мог изменить значение в этой колонке - выбрать другую ЕИ. То есть надо проверять текущие значения в форме, которые еще не записаны.

Подскажите пожалуйста как это сделать?
1 Волшебник
 
02.12.25
12:53
Дёрните сервер
2 zelenprog
 
02.12.25
13:24
(1) Если это обязательно, то придется так и сделать.

Другого выхода нету?
Ведь сам клиент "видит" эти "штуки".
Значит, где-то же он их хранит?
3 Волшебник
 
02.12.25
13:23
(2) Не морочьте голову. Дёрните сервер.
4 arsik
 
гуру
02.12.25
13:59
Дерни сервер без контекста.
5 zelenprog
 
02.12.25
14:24
(4) Передать на сервер Объект? Или просто ТЧ?
6 mikecool
 
02.12.25
14:28
(2) а ты погляди реквизит, который показывает эти штуки
если упаковки для позиции не заданы, то отображается единица измерения
7 arsik
 
гуру
02.12.25
14:33
(5) Да нахрена. Собери массив структур построчно (Номенклатура, Упаковка) и передай на сервер без контекста.
Ну или построчно (Номенклатура, Упаковка) проверь
8 Злопчинский
 
02.12.25
14:38
А почему на клиенте нельзя проверить то, что отображается на клиента? ну вот чисто мне как невменяемому - непонятно!
9 Timon1405
 
02.12.25
14:40
(0)
в событии при записи документа нет, правильное место для этого - обработка проверки заполнения в МО.
в УТ в ней уже есть вызов
// Процедуры проверки заполнения реквизита Количество и КоличествоУпаковок в документах.
ОбщегоНазначенияУТ.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ);
если надо менять логику, расширяйте эту процедуру
10 Kongo2019
 
02.12.25
14:46
(8) Проверить можно. Но не место этой проверки на клиенте.
11 arsik
 
гуру
02.12.25
15:01
(8) Ну на клиенте допустим отображается упаковка. А владельца упаковки ты как проверишь? Чтобы получить владельца упаковки, тебе на сервер нужно передать ссылку на упаковку и там уже проверить его владельца.
(10) Ну почему. Если что-то можно проверить на клиенте, я всегда проверяю на клиенте. Это ж быстрее.
12 Злопчинский
 
02.12.25
15:03
(11) понятно что в разных случаях - разные потребности могут быть. Но если мне надо проверить сам факт наличия упаковки или что наименование упаковки (то что я вижу на клиенте) совпадает/несовпадает с "шт"... - надо ли для этого бежать на сервер?
13 arsik
 
гуру
02.12.25
15:04
(12) Ну картинки посмотри и станет понятно, когда лезть на сервер, а когда клиента достаточно.
14 Garykom
 
гуру
02.12.25
15:34
(0) 1. Надо не просто при записи а при проведении
2. Открой форму документа и просмотри, там
Объект.Товары.Упаковка или Объект.Товары.Номенклатура.ЕдиницаИзмерения
15 Timon1405
 
02.12.25
16:00
(14) нет, проверять что-то в проведении архитектурно неправильно: уже сработали обработчики перед записью(достаточно длительные, типовые там наборы для записи готовят), и тут бац в проведении "у вас там не заполнено что-то" и откат записи
16 Garykom
 
гуру
02.12.25
16:10
(15) Речь о том что пока документ не проводится (просто запись или отмена проведения) - пофиг что там внутри
Может быть недозаполнен

И только в случае проведения обязательно надо проверять
17 Garykom
 
гуру
02.12.25
16:11
(16)+ И обязательно предусмотреть условие для ОбменДанными.Загрузка
18 RomanYS
 
02.12.25
16:19
(15)(16) странный спор. Есть специальное событие для этих целей у документа-объекта "ОбработкаПроверкиЗаполнения". Удовлетворяет всем вашим запросам:
- вызывается только при проведении
- только при интерактивной записи (не нужно проверять ОбменДанными.Загрузка)
- не удлиняет транзакцию
19 arsik
 
гуру
02.12.25
16:26
(18) ну это такое. Только форму проверяет.
20 RomanYS
 
02.12.25
16:33
(19) Не понял. Событие у документа-объекта, форма в нём недоступна. У формы есть аналогичное.
21 Timon1405
 
02.12.25
16:40
(18) согласен, спор странный, я в (9) написал как это в типовой работает
22 arsik
 
гуру
02.12.25
16:43
(20) Сорян. Запамятовал. Истинно так.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший