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

03.05.18

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

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

Скачать файл

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Обмен с ГосИС Мастера заполнения 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    62823    403    295    

72

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

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

9600 руб.

19.06.2012    138376    260    81    

221

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

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

3600 руб.

07.10.2022    6959    19    0    

17

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

При формировании КУДиР при УСН часто возникает множество вопросов и проблем, к.т.: 1. Как выполняется заполнение книги учета доходов и расходов 2. Неправильно формируется книга учета доходов и расходов в 1С а). Доходы / расходы не попадают в КУДиР; б). Доходы / расходы попадают, но не принимаются к учету и многие другие ошибки. При правильном учёте, книга формируется корректно, но идеальный учет это скорее фантастика, для реальных случаев можно использовать специальный инструмент. Обработка предназначена для заполнения КУДиР. Версия для актуальных конфигураций на управляемых формах поддерживает один механизм заполнения - от бухгалтерской проводки. Старый метод автоматизации штатного заполнения присутствует в отдельной версии для обычных форм.

5880 руб.

12.03.2014    133585    80    97    

107

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

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

5000 руб.

13.03.2023    17606    45    49    

75

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

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

1200 руб.

23.07.2015    64635    310    15    

179

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

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

2000 руб.

29.04.2019    32952    52    51    

55
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 * ИзменениеЦены;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Показать
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; +56 Ответить
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 1543 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. 294 10.01.23 15:09 Сейчас в теме
спасибо за более простой вариант, я тоже сразу захотел в 1 форме всё сделать.


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

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

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

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

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

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

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

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

 // +++( ---------------- вспомогательная функция из Формы документа РТУ ------------------------
&НаКлиентеНаСервереБезКонтекста
Функция ЗависимыеРеквизиты()
	
	Возврат Новый Структура("БезВозвратнойТары",
	"Сумма,СуммаНДС,СуммаСНДС,СуммаАвтоматическойСкидки,СуммаРучнойСкидки");
	
КонецФункции
Показать
A1WEB; гвость; +2 Ответить
28. R_o_n_n_y 68 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 Сейчас в теме
это что-то с самим документом назначения - Установка цен номенклатуры.

взяла просто проверила для другого документа Реализация товаров и услуг - все заполнилось. а для этого документа не работает почему-то
Оставьте свое сообщение