Имя: Пароль:
1C
1С v8
Внешняя обработка заполнения табличных частей - запись документа
0 Надмозг
 
17.11.17
12:36
Делаю внешнюю обработку для заполнения таб части.
Вид - ЗаполнениеОбъекта
ВызовКлиентскогоМетода

При запуске система просит записать объект. Если это проведенный документ, и оттуда удалить строки вручную, то при записи ругается, что таб часть пустая.

Есть вообще вариант запустить обработку, чтобы запись не требовалась?
1 Mort
 
17.11.17
12:44
А обработка сама не может удалить строки?
2 Cyberhawk
 
17.11.17
12:55
Щас напишу ответ, найду только письмо
3 Cyberhawk
 
17.11.17
12:56
В ходе реализации выяснилось, что решение текущей задачи через подключаемую обработку вида "Заполнение объекта" предусматривает два варианта, оба из которых накладывают ограничения на возможность использования этой обработки:
1. Для интерактивного взаимодействия с пользователем (открытие формы подбора по документам списания) следует использовать клиентские команды "ОткрытиеФормы" или "ВызовКлиентскогоМетода", при выполнении которых ожидается заполнение данных по ссылкам. Т.е. перед вызовом этих команд задается вопрос о записи объекта, и в случае, если ТЧ у документа пустая, то объект не записывается и команда, соответственно, не выполняется.
В результате для того, чтобы форма подбора открылась, нужно перед вызовом команды добавлять в ТЧ документа как минимум одну строку и обеспечить запись документа без ошибок.

2. С некоторых пор в БСП существует тип команды "ЗаполнениеФормы", не требующий записи объекта в БД перед вызовом команды. Однако, для такой команды отсутствует возможность выполнения какого-либо кода на клиенте (а именно это нам и нужно - открывать форму подбора на клиенте), поэтому такой вариант просто не подходит.

Делаем вывод, что если все-таки решать текущую задачу через подключаемую обработку заполнения объекта по варианту 1, то накладывается существенное ограничение на предмет обязательной заполненности документа до вызова формы подбора.

Повторно предлагаю рассмотреть и одобрить вариант решения задачи через расширение конфигурации, либо подтвердить согласие на то, что будет действовать описанное выше ограничение.

Вдогонку замечу, что проверка на обязательность заполнения ТЧ при записи объекта в форме выполняется только если документ проводится (или уже проведен).
Для нового документа такая проверка не выполняется.
Таким образом, неудобство от внешней обработки будет проявляться только в сценарии, когда уже у проведенного документа в форме очищается ТЧ и вызывается команда подбора (в этом случае такой документ придется сначала распровести из формы).
4 h-sp
 
17.11.17
12:56
(0) вроде нет такого варианта.
5 Cyberhawk
 
17.11.17
12:57
Распроводи документ (с задаванием вопроса) и дело в шляпе
6 Cyberhawk
 
17.11.17
13:09
Ну или юзай ЗаполнениеФормы, если клиентские методы не нужны
7 Надмозг
 
17.11.17
14:35
(1) зачем?
8 Надмозг
 
17.11.17
14:35
(6) задать вопрос перед заполнением нужно, получается клиентский метод нужен
9 Надмозг
 
17.11.17
14:36
(6) плюс там надо открыть форму с некоторыми настройками для заполнения
10 Надмозг
 
17.11.17
14:39
(3) почитаю, спасибо
11 vvp91
 
17.11.17
14:57
Как я делаю:

1. Минимальное универсальное расширение, которое исправляет недоработку БСП.
Надо перекрыть &Вместо метод ОМ.ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьНазначаемуюКомандуНаКлиенте
Вместо строки <Если Объект.Ссылка.Пустая() Или Форма.Модифицированность Тогда>
Написать <Если ВРег(ВыполняемаяКоманда.Модификатор) <> "БЕЗЗАПИСИФОРМЫ" И (Объект.Ссылка.Пустая() Или Форма.Модифицированность) Тогда>

2. При создании обработок заполнения объектов использовать модификатор команды "БезЗаписиФормы"
Таким образом будем объяснять системе, что это клиентская команда, в которой не надо записывать объект.

3. В обработке заполнения должна быть основная форма, можно пустая, в которой должна быть процедура &НаКлиенте с сигнатурой <Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт>
Таким образом будем обрабатывать вызовы из приложения.
Для доступа к текущему контексту вызывающей формы (Объект - данные формы) в нашей обработке следует использовать <ЭтотОбъект.ВладелецФормы.Объект>
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан