Создание подключаемой обработки табличной части с диалогом запроса параметров заполнения (управляемые формы)

03.05.18

Задачи пользователя - Мастера заполнения

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

Скачать исходный код

Наименование Файл Версия Размер
Пример - Создание подключаемой обработки табличной части с диалогом запроса параметров заполнения (Управляемые формы):
.epf 10,39Kb
358
.epf 10,39Kb 358 Скачать

Зачастую перед заполнением от пользователя нужно получить какие либо указания для дальнейшего выполнения. Можно спросить Да/Нет или какое-то значение, но когда необходимо запросить более развернутую информацию, перечислять вопросы неудобно ни пользователю, ни для функционирования.

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

Задача: В конфигурации Бухгалтерия предприятия 3.0 создать обработку заполнения табличной части, при запуске которой откроется диалог указания необходимых параметров для изменения имеющихся данных. Работа с документом Реализация (акты, накладные), перед заполнением нужно спросить Номенклатуру и как нужно изменить ей цену.

Приступим к реализации:

Первым делом напишем в модуле созданной обработки процедуры регистрации:

 Функция СведенияОВнешнейОбработке() Экспорт
    Назначения = Новый Массив ;
    Назначения.Добавить("Документ.РеализацияТоваровУслуг") ;
     
    ПараметрыРегистрации = Новый Структура ;
    ПараметрыРегистрации.Вставить("Вид","ЗаполнениеОбъекта");
    ПараметрыРегистрации.Вставить("Назначение",Назначения);
    ПараметрыРегистрации.Вставить("Наименование","Пример обработки табличной части с диалогом запроса параметров");
    ПараметрыРегистрации.Вставить("Версия","1.0");
    ПараметрыРегистрации.Вставить("Информация","Дополнительная обработка табличной части");
    ПараметрыРегистрации.Вставить("БезопасныйРежим",Истина);
     
    Команды = ПолучитьТаблицуКоманд() ;
    ДобавитьКоманду(Команды, "Тестовая обработка",
            "ЗаменитьФинансирование","ВызовКлиентскогоМетода",Ложь,) ;
     
    ПараметрыРегистрации.Вставить("Команды",Команды) ;
     
    Возврат ПараметрыРегистрации;
     
КонецФункции
 
Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений ;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")) ;
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")) ;
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")) ;
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")) ;
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")) ;
    Возврат Команды;
КонецФункции   
 
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор,
                Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить() ;
    НоваяКоманда.Представление = Представление ;
    НоваяКоманда.Идентификатор = Идентификатор ;
    НоваяКоманда.Использование = Использование ;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение ;
    НоваяКоманда.Модификатор = Модификатор ;
КонецПроцедуры

В реквизиты обработки добавим реквизит Документ, который пригодится при отладке и будет применяться при зарегистрированном использовании. Этот вариант дает некоторую универсальность. Можно тестировать, отлаживать и, если все в порядке, сразу подключить пользователю.

Теперь нам нужна основная форма, которая будет видна только при запуске через Файл - Открыть, но её процедуры нужны в любом случае. А так-же нужна вторая форма, назовем её "ЗапросПараметров", она станет служить для указания параметров пользователем.

В модуль основной формы пишем:

Перем ОбъектЗаполнения Экспорт;

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    Если НЕ ЗначениеЗаполнено(Объект.Документ) Тогда
         Объект.Документ = ВладелецФормы.Объект.Ссылка;
    КонецЕсли;
    ОбъектЗаполнения=Объект.Документ;
    ЗакрытиеФормы = Новый ОписаниеОповещения
    ("ЗаполнениеПоВыбраннымПараметрам", ЭтаФорма); // Название процедуры, которая будет выполняться после закрытия формы "ЗапросПараметров"
    ЗапросПараметров = ОткрытьФорму("ВнешняяОбработка.ПримерОбработкиТабличнойЧастиСДиалогомПараметров.Форма.ЗапросПараметров", ,ОбъектЗаполнения,,,,ЗакрытиеФормы);
КонецПроцедуры

Эта часть перебрасывает нас на форму параметров, так что переходим на неё. Добавляем требуемые реквизиты, и пару команд (Выполнить и Отмена):

В процедуре кнопки Выполнить напишите:

 
    Парам = Новый Структура("ОбъектДляЗаполнения,Номенклатура,ИзменениеЦены");
    Парам.ОбъектДляЗаполнения = ВладелецФормы;
    Парам.Номенклатура = ЭтаФорма.Номенклатура;
    Парам.ИзменениеЦены = ЭтаФорма.ИзменениеЦены;
    ЭтаФорма.Закрыть(Парам);

Для кнопки Отмена:

    ЭтаФорма.Закрыть(Неопределено);

Теперь эта форма поместит указанные реквизиты в структуру и передаст её в основную форму.

Заключительная часть обработки табличной части происходит в модуле основной формы, следовательно добавляем в него:

&НаКлиенте
Процедура ЗаполнениеПоВыбраннымПараметрам(Результат, Параметры) Экспорт
    Если НЕ ЗначениеЗаполнено(Результат) Тогда
        Возврат; // Пользователь не стал указывать параметры, останавливаем работу
    КонецЕсли;
    ОбъектЗаполнения = ЗаполнениеНаСервере(ОбъектЗаполнения, Результат); // Результат содержит структуру, полученную из формы "ЗапросПараметров"
    Если НЕ ВладелецФормы=Неопределено Тогда
        ВладелецФормы.Прочитать(); // Если обработка вызывалась из документа, то нужно перечитать изменения, чтобы пользователь видел результат обработки
    КонецЕсли;
КонецПроцедуры
 
&НаСервере
функция ЗаполнениеНаСервере(ОбъектЗаполнения, Параметры = Неопределено)
    Если ЗначениеЗаполнено(Объект.Документ) Тогда // Проверяем режим запуска: Через Открыть или из документа
        Док = Объект.Документ.ПолучитьОбъект();
    Иначе Док = ОбъектЗаполнения;
    КонецЕсли;
    Для каждого Стр Из Док.Товары Цикл // Цикл обработки табличной части "Товары"
        Если Стр.Номенклатура = Параметры.Номенклатура Тогда
            Стр.Цена = Стр.Цена+Стр.Цена/100*Параметры.ИзменениеЦены;
            Стр.Сумма = Стр.Сумма+Стр.Сумма/100*Параметры.ИзменениеЦены;
        КонецЕсли;
    КонецЦикла;     
   Док.Записать(); // Сохраняем результат
КонецФункции

Остался маленьких штрих. Основная форма осталась пустой, но так не должно быть. Поместите на неё созданный ранее реквизит Документ и добавьте кнопку ВыполнитьОбработку, при нажатии на которую выполнится одна команда:

    ВыполнитьКоманду("", Объект.Документ);

Задача выполнена. Разумеется, сим я показал принцип, а не единое руководство решения любой проблемы. Надеюсь, предложенный вариант поможет сэкономить время на решение реальных вопросов.

Для работы использовалась платформа 1С:Предприятие 8.3 (8.3.11.3034).

Метод использовался при создании обработки Замена финансирования определенных видов расчета в документе Начисление зарплаты и взносов (ЗИКГУ 3.1)

обработка создание табличная часть отладка управляемая форма

См. также

Автоматический подбор и заполнение ГТД для 1С:Бухгалтерия предприятия 8, редакция 3.0 (платформа 8.2 и 8.3)

Операции по ВЭД Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Мастера заполнения Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

СКАЧАЙТЕ И ПОПРОБУЙТЕ БЕСПЛАТНО! Данная обработка расширяет функционал типовой конфигурации «1С:Бухгалтерия предприятия» и позволяет осуществлять автоматическое заполнение ГТД в документах «Реализация товаров и услуг», «Списание товаров», «Отчет о розничных продажах», «Отчет комиссионера (агента) о продажах», «Требование-накладная», «Возврат товаров от покупателя», «Комплектация номенклатуры», «Безвозмездная передача», «Отчет производства за смену». Обработка предназначена для работы в конфигурации «1С:Бухгалтерия предприятия 8, редакция 3.0» Есть версия обработки оптимизированная для работы в 1CFresh

8280 руб.

19.06.2012    136872    251    81    

213

Заполнение описания номенклатуры с помощью ChatGPT

Мастера заполнения Нейросети Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Расширение для заполнения описания номенклатуры с помощью модели ИИ ChatGPT. Расширение формирует продающее описание товара по его наименованию с помощью модели искусственного интеллекта. Будет полезно для владельцев интернет магазинов, каталогов товаров и продающих через маркетплейсы. Адаптировано для основных конфигураций: УТ, ЕРП, КА, УНФ. Прошло аудит на 1cfresh.com. Версия для автоматического заполнения

5000 руб.

13.03.2023    16109    42    49    

74

Заполнение описания номенклатуры с помощью GigaChat

Нейросети Мастера заполнения Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Расширение для заполнения описания номенклатуры с помощью модели ИИ GigaChat от Сбера. Расширение формирует продающее описание товара по его наименованию с помощью модели искусственного интеллекта. Будет полезно для владельцев интернет магазинов, каталогов товаров и продающих через маркетплейсы. Адаптировано для основных конфигураций: УТ, ЕРП, КА, УНФ.

5000 руб.

08.11.2023    1491    6    0    

14

Основной договор в документах для УТ11.5

Мастера заполнения Платформа 1С v8.3 1С:Управление торговлей 11 Россия Платные (руб)

Если вы устали каждый раз выбирать один и тот же договор из множества других при оформлении документов, это расширение для вас! Пометьте один договор как основной и это избавит вас от рутинного поиска необходимого договора.

4560 руб.

26.01.2023    4891    8    1    

7

Заполнение справочника "Автоработы" и справочника "Номенклатура" в Альфа-Авто

Логистика, склад и ТМЦ Мастера заполнения Платформа 1С v8.3 Конфигурации 1cv8 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Обработка заполняет справочник "Автоработы" 3000 авторабот (реквизит сопоставления "Наименование") и справочник "Номенклатура" 200000 артикулами запчастей на популярные модели автомобилей (реквизиты сопоставления "Наименование" и "Артикул").

2000 руб.

07.10.2022    6525    15    0    

13

Заполнение реквизитов контрагентов по ИНН и наименованию для УТ 10.3 и 10.2 и других конфигураций (апрель 2022 года)

Обмен с ГосИС Мастера заполнения Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Простое решение по автоматическому заполнению реквизитов контрагентов (юридических и физических лиц) по ИНН и наименованию. Может использоваться в любых конфигурациях 1С Предприятие 8: УТ 10.2, УТ 10.3 и т.д. Обновление механизмов 2022 года! Программный код открыт.

1200 руб.

23.07.2015    64013    308    15    

177

Списание остатков по счету документом Операция

Мастера заполнения Бухгалтерский учет Управляемые формы 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Универсальная обработка заполнения документа Операция. Позволяет перенести остатки или обороты с одного счета на другой. Или изменить аналитику.

5000 руб.

29.05.2019    11236    6    5    

7
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Lapitskiy 1057 12.05.18 03:50 Сейчас в теме
Суть прекрасно описано.
Но есть одно НО.
Документ записывается после обработки, а это методически не верное решение.
А причина - в изменении данных "Объект", а правильно изменять данные "Форма".
Тогда всё измененное, сразу отобразится на форме, без костылей типа "Записать", "Прочитать".
Snigse; user631290_makerplus; dablack; adhocprog; TSSV; distorshion; rpgshnik; PLAstic; +8 Ответить
2. Mirage78 129 12.05.18 10:18 Сейчас в теме
(1) К сожалению, пришлось задействовать этот грубый вариант "Объект/Записать/Прочитать", и причина в ограничениях платформы. Смысл обработки именно в обработке, а не в заполнении табличной части с нуля. Изменять существующую табличную часть формы проблематично ...
nnnnnndfge; +1 Ответить
3. ltfriend 961 28.05.18 22:06 Сейчас в теме
Код модуля с регистрацией обработки можно существенно сократить
Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
	ПараметрыРегистрации.Наименование = НСтр("ru='Пример обработки табличной части с диалогом запроса параметров'");
	ПараметрыРегистрации.Информация = НСтр("ru='Дополнительная обработка табличной части'");
	ПараметрыРегистрации.Версия = "1.0";
	ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
	
	Команда = ПараметрыРегистрации.Команды.Добавить();
	Команда.Идентификатор = "ЗаменитьФинансирование";
	Команда.Представление = "Тестовая обработка";
	Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
	
	Возврат ПараметрыРегистрации;
	
КонецФункции
Показать

Да и формой можно тоже обойтись одной. Вот полный код формы (без всяких "записей-перезаписей"):
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ОбъектНазначения = Параметры.ОбъектыНазначения[0];
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьОбработку(Команда)
	
	ПараметрыФормы = Новый Структура("Ключ", ОбъектНазначения);
	ФормаДокумента = ПолучитьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыФормы);
	
	ОбъектДокумента = ФормаДокумента.Объект;
	
	ЗаполнитьДокументНаСервере(ОбъектДокумента);
	
	КопироватьДанныеФормы(ОбъектДокумента, ФормаДокумента.Объект);
	
	ФормаДокумента.Модифицированность = Истина;
	
	Закрыть();
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьДокументНаСервере(ОбъектДокумента)
	
	Для каждого СтрокаТовар Из ОбъектДокумента.Товары Цикл
		Если СтрокаТовар.Номенклатура = Номенклатура Тогда
			СтрокаТовар.Цена = СтрокаТовар.Цена + СтрокаТовар.Цена/100 * ИзменениеЦены;
			СтрокаТовар.Сумма = СтрокаТовар.Сумма + СтрокаТовар.Сумма/100 * ИзменениеЦены;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Показать
Wrols; Snigse; flanchev; korpas; dimas103; mentozavr; rintik; LeXXeR; Karlosss; romankoav; Raskad; websamson; Serg O.; baracuda; smit1c; user1626770; oninfostart; ketr; Anosov_EP; JohnyDeath; zinzillya; cassper; marku; tiniji; myoker; lepth; Andreyyy; windsurf; Lehha; simy4; houpl; Feelthis; Yackov; zzz14; MonteCriZto; Восьмой; base_1c; ksavetisyan; ixijixi; maksa2005; user591389_aska_rabota; buy_sale; user640247; user695615_a.a.gromenkov; BarsukM; Chizhik2020; rpgshnik; iosys; LiebeMein; adhocprog; KpoTuk; Nuuq; Sergant; user958854; +54 Ответить
4. Mirage78 129 29.05.18 10:11 Сейчас в теме
(3) Параметры регистрации прописывались в старых обработках, и я не заморачиваясь скопировал этот фрагмент. В остальном реализация интересная, но непонятно что значит "формой можно обойтись одной". Смысл в том, что параметр далеко не один. На форму можно набросать разные реквизиты (списки выбора/таблицы значений и т.д.), а основная форма используется при открытии через Файл и для отладки.

Или речь о том, что можно не возвращаться с параметрами на основную ... Думаю да, я начинал с основной, поэтому на автомате и вернулся к ней получив параметры.
5. ltfriend 961 29.05.18 11:17 Сейчас в теме
(4) Одна форма - это то, что можно нарисовать одну форму с параметрами, в параметрах регистрации указываем вид ОткрытиеФормы, в форме при создании на сервере запоминаем объект назначения (ссылка на документ), при нажатии на кнопку выполняем заполнение (процедура ВыполнитьОбработку в коде выше - это обработчик команды кнопки).
Raskad; adhocprog; Mirage78; +3 Ответить
6. Mirage78 129 29.05.18 12:37 Сейчас в теме
(5) Упс, забыл про вид, спасибо.
7. OksDallas 22 28.06.18 08:56 Сейчас в теме
(5)
Управление торговлей, редакция 11 (11.4.5.24)

К сожалению, не поняла, как можно указать в параметрах регистрации вид ОткрытиеФормы. Пробовала вот так:
    ...
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.СообщениеSMS");

    ПараметрыРегистрации.Вставить("Вид", "ОткрытиеФормы");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "Заполнить по подразделению");
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная обработка табличной части к документу Сообщение SMS");
...
Показать


Дает ошибку с ссылкой на отсутствие соответствующего перечисления ВидыДополнительныхОтчетовИОбработок. Действительно, в перечислении есть только следующее:
- ДополнительнаяОбработка
- ДополнительныйОтчет
- ЗаполнениеОбъекта
- Отчет
- ПечатнаяФорма
- СозданиеСвязанныхОбъектов
- ШаблонСообщения
- РасчетСкидкиНаценки
- ПроверкаУсловияПредоставленияСкидкиНаценки

В УФ еще плаваю - куда влезла, что делаю???
10. Stivens 35 07.11.18 02:06 Сейчас в теме
(3) Убился. В Клиент-серверном варианте открывает второй экземпляр формы документа. Причем в первом старые данные, во втором - новые.
В файловом все нормально, изменяет именно вызвавшую форму.
Прикрепленные файлы:
ШаблонВОТЧсОтладкойИДиалогом.epf
Vida; AZel84; ichhh; +3 Ответить
13. androidT1C 76 04.07.19 10:02 Сейчас в теме
(10) Ветка старая, но:
если вместо:
ПараметрыФормы = Новый Структура("Ключ", Поступление);
ФормаДокумента = ПолучитьФорму("Документ.ПоступлениеТоваровУслуг.ФормаОбъекта", ПараметрыФормы);

написать:
ФормаДокумента = ВладелецФормы;

то будет работа именно с формой текущего документа
happymansev; rintik; гвость; oninfostart; JohnyDeath; Ctrl P; myoker; windsurf; Lehha; mai_k; COMPER; zzz14; user640247; Vida; Suslik_Johns; Batman; generick; adhocprog; gucci76; +19 Ответить
15. Suslik_Johns 15.05.20 20:14 Сейчас в теме
(13) Спасибо за эту волшебную строчку!)
16. German_Tagil 42 08.07.20 07:03 Сейчас в теме
17. user640247 27.08.20 22:07 Сейчас в теме
(13)
ФормаДокумента = ВладелецФормы;

(3)
Огромное Вам спасибо! целый день потратила.
18. user640247 27.08.20 22:32 Сейчас в теме
25. SOTaygind 12.05.21 08:31 Сейчас в теме
(13)
ВладелецФормы

Если ветка еще жива... Почему-то ВладелецФормы = Неопределено, уже все перерыл, кто подскажет? Заранее спасибо!
21. XelOla 17 16.03.21 22:37 Сейчас в теме
19. ksavetisyan 07.01.21 20:22 Сейчас в теме
(3) Добавлю небольшое уточненние.
Форму и объект можно получить напрямую от внешней обработки

ФормаДокумента = ЭтотОбъект.ВладелецФормы.ИмяФормы;
ОбъектДокумента  = ЭтотОбъект.ВладелецФормы.Объект;


И далее изменять данные непосредсвенно через эти переменные.
wokituk; happymansev; +2 Ответить
26. Arxxximed 34 18.06.21 12:10 Сейчас в теме
(3) Ребята , кто подскажет такой вопрос. Если Видобработки = ВидОбработкиЗаполнениеОбъекта()
И Команда.Использование = ТипКомандыЗаполнениеФормы() Тогда
при вызове команды из формы объекта не выдается никаких сообщений и можно провести заполнение формы объекта.
Если же Команда.Использование отличается, например Команда.Использование = ТипКомандыОткрытиеФормы() , Тогда идет проверка модифицированности формы владельца, и предлагается записать Объект.

Вопрос в следующем: как это обойти? Дело в том, что я заполняю форму владельца через форму дополнительной обработки. Открываю форму обработки, на ней подбираю файлик из FTP , Пользователь проверяет загруженную табличную часть, и если всё хорошо, то нажимает кнопку перенести в документ. И если первый раз команда отрабатывает хорошо (документ то не был изменен) , то второй раз спрашивает, записать ли документ.

Когда прошерстил код модуля ПодключаемыеКоманды, то не нашел, как можно исправить ситуацию.
8. OksDallas 22 28.06.18 09:39 Сейчас в теме
Все, нашла. "ОткрытиеФормы" надо в ТаблицуКоманд привязывать.
ДобавитьКоманду(ТаблицаКоманд, "Заполнить документ", "Заполнить документ", "ОткрытиеФормы", Истина);
9. Mirage78 129 28.06.18 12:45 Сейчас в теме
(8) именно, я не стал поправлять Павла, просто понял о чём речь ...
11. alexd73 05.04.19 23:00 Сейчас в теме
Спасибо за мануал. подскажите, если я хочу выгрузить накладную в xml по кнопке - тоже надо делать через "ЗаполнениеОбъекта"? Или как?
И мне формы не нужны. Надо просто создать файл и вывести сообщение об этом.
подскажите эти моменты.


Заранее спасибо!
12. independ 1520 06.04.19 00:04 Сейчас в теме
(11) да, или через внешнюю печатную форму или создание связанных объектов и проч. Учитывая, что файл нужен на клиенте, то логику обработки проще поместить в модуль формы, вызов сделать в процедуре ПриОткрытии(), после всех манипуляций там же выполнить закрытие формы, т.е. форма обработки на экране не появится.
14. German_Tagil 42 18.07.19 15:25 Сейчас в теме
Придется обращаться к первоисточнику
20. XelOla 17 16.03.21 22:27 Сейчас в теме
22. ВасяЧ 26.03.21 17:42 Сейчас в теме
Сделал обработку для заполнения ТЧ Поступления Товаров и Услуг в БП 3.0 по отрицательным остаткам.
Почему-то при открытии формы обработки в "Параметры.ОбъектыНазначения" ничего нет(
Остальные параметры присутствуют.

Притом, что в модуле ДополнительныеОтчетыИОбработкиКлиент Процедура ОбработчикКомандыЗаполнения передает ОбъектыНазначения в структуре ПараметрыВызоваСервера, где есть ссылка на документ, из которого открывается обработка.

ОткрытьФорму("ВнешняяОбработка."+ ИмяВнешнегоОбъекта +".Форма", ПараметрыВызоваСервера, Форма);


Куда потерялись ОбъектыНазначения?
23. GAlexis 5 13.04.21 13:18 Сейчас в теме
(22) Сорри не внимательно прочитал
24. ВасяЧ 13.04.21 15:32 Сейчас в теме
Собирался использовать ОбъектыНазначения для манипуляции с данными ВладельцаФормы.
(13) Спасло!
27. Serg O. 224 10.01.23 15:09 Сейчас в теме
спасибо за более простой вариант, я тоже сразу захотел в 1 форме всё сделать.


ещё немного можно упростить - без выполнения на Сервере - функция ЗаполнитьДокументНаСервере() - не нужна
и "обратное" копирование так же не нужно будет, если сразу менять в таблице ОбъектДокумента.Товары на клиенте.

+ ещё можно менять не саму цену (часто это нельзя!) а только % ручной скидки, поле ПроцентРучнойСкидки в КА

и все процедуры пересчета надо взять (для любой титовой конфигурации) из самой формы РТУ
ТоварыПроцентРучнойСкидкиПриИзменении(Элемент) или ТоварыСтавкаНДСПриИзменении(Элемент)

у меня был вариант для Комплексной Автоматизации 2.4 (см. ниже)
новое отмечено комментарием // +++( -------------------------
// +++)

общие структуры - СтруктураПересчетаСуммы и СтруктураДействий
зависят только от документа, а не от ТЧ Товары, поэтому они вынесены перед циклом.

&НаКлиенте
Процедура Применить(Команда) 
	
	ПараметрыФормы = Новый Структура("Ключ", Объект.Документ); // ссылка
	ФормаДокумента = ПолучитьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыФормы);
	
	ОбъектДокумента = ФормаДокумента.Объект;  
	
	// --- не нужно не сервере! --- ЗаполнитьДокументНаСервере(ОбъектДокумента); 
	
	//--- не нужно обратно копировать! --- КопироватьДанныеФормы(ОбъектДокумента, ФормаДокумента.Объект);
	
	 // +++( ------------------------- далее на Клиенте как в  ФормаДокумента РТУ - ТоварыСтавкаНДСПриИзменении(Элемент)
	СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(ОбъектДокумента); 
	
	СтруктураДействий = Новый Структура;
	СтруктураДействий.Вставить("ПересчитатьСуммуНДС",  СтруктураПересчетаСуммы);
	СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
	СтруктураДействий.Вставить("ПересчитатьСумму");
	СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", 		  Новый Структура("Очищать", Ложь));
	СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
	СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
	СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
	СтруктураДействий.Вставить("ПересчитатьСуммуСверхЗаказа", 
	Новый Структура("РеализацияПоступлениеПоЗаказу, ТребуетсяЗалогЗаТару",
	ОбъектДокумента.РеализацияПоЗаказам, ОбъектДокумента.ТребуетсяЗалогЗаТару)); 
	
	КэшированныеЗначения = Неопределено;
	Для каждого СтрТЧ Из ОбъектДокумента.Товары Цикл  
		СтрТЧ.ПроцентРучнойСкидки = ИзменениеЦены;
		ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(СтрТЧ, СтруктураДействий, КэшированныеЗначения);
	КонецЦикла;
	//+++)

	ФормаДокумента.Модифицированность = Истина;    

	Закрыть();
	
КонецПроцедуры   

 // +++( ---------------- вспомогательная функция из Формы документа РТУ ------------------------
&НаКлиентеНаСервереБезКонтекста
Функция ЗависимыеРеквизиты()
	
	Возврат Новый Структура("БезВозвратнойТары",
	"Сумма,СуммаНДС,СуммаСНДС,СуммаАвтоматическойСкидки,СуммаРучнойСкидки");
	
КонецФункции
Показать
morin; гвость; +2 Ответить
28. R_o_n_n_y 67 07.10.23 14:14 Сейчас в теме
Клиент попросил сделать обработку двойного назначения: кроме обработки заполнения ТЧ еще и как самостоятельная с интерактивным открытием.
Для этого создан реквизит объекта обработки "Документ" тип ДокументСсылка....
Реквизит помещен на форму.
Модуль переработал так:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
        //реквизит виден только при открытии через Файл-Открыть
	Если ЭтотОбъект.ВладелецФормы = Неопределено Тогда
		ЭтаФорма.Элементы.Документ.Видимость = Истина;
	Иначе
		ЭтаФорма.Элементы.Документ.Видимость = Ложь;
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьОбработку(Команда)

	Если ЭтотОбъект.ВладелецФормы = Неопределено ТОгда //по документу из формы
		Если ЗначениеЗаполнено(Объект.Документ) Тогда
			ПараметрыФормы = Новый Структура("Ключ", Объект.Документ);
			ФормаДокумента = ПолучитьФорму("Документ.СписаниеНДС.ФормаОбъекта", ПараметрыФормы);
			ОбъектДокумента  = ФормаДокумента.Объект;
		Иначе
			Закрыть();
		КонецЕсли;		
	Иначе		
		ФормаДокумента = ЭтотОбъект.ВладелецФормы;
		ОбъектДокумента  = ЭтотОбъект.ВладелецФормы.Объект;
	КонецЕсли;

	ЗаполнитьДокументНаСервере(ОбъектДокумента); //Если нужно заполнять &НаСервере, но можно и на клиенте
	
	Если ЭтотОбъект.ВладелецФормы = Неопределено Тогда
		ФормаДокумента.Открыть();
	КонецЕсли;
	
    КопироватьДанныеФормы(ОбъектДокумента, ФормаДокумента.Объект);
    
    ФормаДокумента.Модифицированность = Истина;
    
    Закрыть();
    
КонецПроцедуры
Показать
29. Гость 20.11.23 17:03
(28)
&НаКлиенте
Процедура ВыполнитьОбработку(Команда)

Если ЭтотОбъект.ВладелецФормы = Неопределено ТОгда //по документу из формы
Если ЗначениеЗаполнено(Объект.Документ) Тогда
ПараметрыФормы = Новый Структура("Ключ", Объект.Документ);
ФормаДокумента = ПолучитьФорму("Документ.СписаниеНДС.ФормаОбъекта", ПараметрыФормы);
ОбъектДокумента = ФормаДокумента.Объект;
Иначе
Закрыть();
КонецЕсли;
Иначе
ФормаДокумента = ЭтотОбъект.ВладелецФормы;
ОбъектДокумента = ЭтотОбъект.ВладелецФормы.Объект;
КонецЕсли;

ЗаполнитьДокументНаСервере(ОбъектДокумента); //Если нужно заполнять &НаСервере, но можно и на клиенте

Если ЭтотОбъект.ВладелецФормы = Неопределено Тогда
ФормаДокумента.Открыть();
КонецЕсли;

КопироватьДанныеФормы(ОбъектДокумента, ФормаДокумента.Объект);

ФормаДокумента.Модифицированность = Истина;

Закрыть();

КонецПроцедуры
Показать


Приогромнейшее спасибо за этот код!
Оставьте свое сообщение