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

03.05.18

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Пример - Создание подключаемой обработки табличной части с диалогом запроса параметров заполнения (Управляемые формы):
.epf 10,39Kb
389
389 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

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

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

9600 руб.

19.06.2012    139001    264    81    

224

Обмен с ГосИС Мастера заполнения WEB-интеграция Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет Оперативный учет Управляемые формы 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Универсальное расширение конфигурации для автоматической загрузки и заполнения реквизитов контрагентов (партнеров) из ОГРН для 1С:ERP Управление предприятием 2 (1С:ERP Управление предприятием 2, редакция 2.4), 1С:ERP Управление предприятием 2 (1С:ERP Управление предприятием 2, редакция 2.2), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.5), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.4), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.3), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.2), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.4), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.2), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.0) и 1С:Бухгалтерия 8 (Бухгалтерия предприятия, редакция 3.0).

3900 руб.

08.11.2017    63835    406    295    

73

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

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

1200 руб.

23.07.2015    64803    312    15    

180

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

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

4560 руб.

26.01.2023    5601    12    1    

9

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

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

5000 руб.

13.03.2023    17988    46    49    

75

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

Данное расширение автоматически заполняет бизнес-регион партнера в 1С (УТ 11, КА 2, ERP) при записи на основании КПП или индекса из адреса. Присутствует возможность сохранить имеющиеся бизнес-регионы партнеров, а также перезаполнить или очистить их при первичном заполнении. Возможен выбор региона по умолчанию для партнера без КПП или адреса (например, если вы не указываете адреса физ. лиц и знаете, что они из Вашего региона).

2000 руб.

29.04.2019    33222    54    51    

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

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

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

&НаСервере
Процедура ЗаполнитьДокументНаСервере(ОбъектДокумента)
	
	Для каждого СтрокаТовар Из ОбъектДокумента.Товары Цикл
		Если СтрокаТовар.Номенклатура = Номенклатура Тогда
			СтрокаТовар.Цена = СтрокаТовар.Цена + СтрокаТовар.Цена/100 * ИзменениеЦены;
			СтрокаТовар.Сумма = СтрокаТовар.Сумма + СтрокаТовар.Сумма/100 * ИзменениеЦены;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Показать
Goggy; user745172; cleaner_it; Wrols; Snigse; flanchev; korpas; dimas103; mentozavr; rintik; LeXXeR; Karlosss; romankoav; Raskad; websamson; Serg O.; baracuda; smit1c; user1626770; oninfostart; ketr; Anosov_EP; JohnyDeath; zinzillya; AlekseySipaev; 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; +57 Ответить
4. Mirage78 136 29.05.18 10:11 Сейчас в теме
(3) Параметры регистрации прописывались в старых обработках, и я не заморачиваясь скопировал этот фрагмент. В остальном реализация интересная, но непонятно что значит "формой можно обойтись одной". Смысл в том, что параметр далеко не один. На форму можно набросать разные реквизиты (списки выбора/таблицы значений и т.д.), а основная форма используется при открытии через Файл и для отладки.

Или речь о том, что можно не возвращаться с параметрами на основную ... Думаю да, я начинал с основной, поэтому на автомате и вернулся к ней получив параметры.
5. ltfriend 29.05.18 11:17 Сейчас в теме
(4) Одна форма - это то, что можно нарисовать одну форму с параметрами, в параметрах регистрации указываем вид ОткрытиеФормы, в форме при создании на сервере запоминаем объект назначения (ссылка на документ), при нажатии на кнопку выполняем заполнение (процедура ВыполнитьОбработку в коде выше - это обработчик команды кнопки).
Raskad; adhocprog; Mirage78; +3 Ответить
6. Mirage78 136 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) Ветка старая, но:
если вместо:
ПараметрыФормы = Новый Структура("Ключ", Поступление);
ФормаДокумента = ПолучитьФорму("Документ.ПоступлениеТоваровУслуг.ФормаОбъекта", ПараметрыФормы);

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

то будет работа именно с формой текущего документа
bnkazov; happymansev; rintik; гвость; oninfostart; JohnyDeath; Ctrl P; myoker; windsurf; Lehha; mai_k; COMPER; zzz14; user640247; Vida; Suslik_Johns; Batman; generick; adhocprog; gucci76; +20 Ответить
15. Suslik_Johns 15.05.20 20:14 Сейчас в теме
(13) Спасибо за эту волшебную строчку!)
16. German_Tagil 43 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 18 16.03.21 22:37 Сейчас в теме
19. ksavetisyan 07.01.21 20:22 Сейчас в теме
(3) Добавлю небольшое уточненние.
Форму и объект можно получить напрямую от внешней обработки

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


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

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

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


Заранее спасибо!
12. independ 1551 06.04.19 00:04 Сейчас в теме
(11) да, или через внешнюю печатную форму или создание связанных объектов и проч. Учитывая, что файл нужен на клиенте, то логику обработки проще поместить в модуль формы, вызов сделать в процедуре ПриОткрытии(), после всех манипуляций там же выполнить закрытие формы, т.е. форма обработки на экране не появится.
14. German_Tagil 43 18.07.19 15:25 Сейчас в теме
Придется обращаться к первоисточнику
20. XelOla 18 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. 297 10.01.23 15:09 Сейчас в теме
спасибо за более простой вариант, я тоже сразу захотел в 1 форме всё сделать.


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Закрыть();

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


Приогромнейшее спасибо за этот код!
30. LimonkaRu 13.06.24 05:38 Сейчас в теме
Добрый день!

Скажите, пожалуйста, все делала и написала, как и здесь. Все получилось. Объект заполнился по моему алгоритму, но почему-то не встают в ТЧ документа данные:

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

кол ТЧ 2 - 210 строк, но почему-то командой КопироватьданныеФормы ничего в табличную часть документа-владельца не переносится, табличная часть пустая
31. LimonkaRu 13.06.24 06:14 Сейчас в теме
ОбъектДокумента.Товары2_5.Количество() = 210

а документ пустой.


конфигурация Комплексная автоматизация 2.5.16.115, платформа 8.3.23.2040
32. LimonkaRu 13.06.24 06:52 Сейчас в теме
это что-то с самим документом назначения - Установка цен номенклатуры.

взяла просто проверила для другого документа Реализация товаров и услуг - все заполнилось. а для этого документа не работает почему-то
33. XelOla 18 12.11.24 15:39 Сейчас в теме
(32) ну же, там есть реквизит Статус = Согласовано, и ОК.
Оставьте свое сообщение