Ввод на основании в пакетном режиме

29.05.20

Задачи пользователя - Адаптация типовых решений

Была поставлена задача сделать ввод на основании в пакетном режиме. В списке документов пользователь выделяет несколько документов и нажимает кнопочку Ввести на основании. После этого создаются документы на основании выделенных документов.

В модуле менеджера документа в процедуре ДобавитьКомандыСозданияНаОсновании. Комментируем типовую команду и добавляем свою команду. (Если конфигурация типовая без изменений делаем это в расширение). 

В обработчик  команды прописываем не типовой клиентский модуль

А_ВводНаОснованииКлиент.ЗаявкаНаРасходованиеДенежныхСредствСоздатьНаОснованииЗаказаПоставщикуОбщая

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

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

 

В модуле А_ВводНаОснованииКлиент создаем процедуру

Вариант 1. Открываются заполненные формы новых документов.

Делаем цикл по массиву ВыделенныеСтроки в котором находятся выделенные документы.

Открываем форму передаем в нее параметр заполнения Новый Структура("Основание", ПараметрыОткрытия).

Вся логика заполнения прописана в модуле создаваемого документа в процедуре ОбработкаЗаполнения.

 

 

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

 

 В результате получаем:

 

 

Вариант 2. Создаем и записываем документы без открытия формы.

Все тоже самое что и в Варианте 1, только вместо открытия формы переходим в не типовой серверный модуль 

А_ВводНаОснованииВызовСервера.СоздатьЗаявкаНаРасходованиеДенежныхСредствСоздатьНаОснованииЗаказаПоставщику(ПараметрыОткрытия);

 

 

Процедура ЗаявкаНаРасходованиеДенежныхСредствСоздатьНаОснованииЗаказаПоставщикуОбщая(МассивСсылок, ПараметрыВыполнения) Экспорт

	Для Каждого Стр Из ПараметрыВыполнения.Источник.ВыделенныеСтроки Цикл
		ПараметрыВыполненияКоманды = Новый Структура("Источник,Уникальность,Окно,НавигационнаяСсылка");
		ЗаполнитьЗначенияСвойств(ПараметрыВыполненияКоманды, ПараметрыВыполнения.ОписаниеКоманды.ДополнительныеПараметры);
		
		ПараметрыОткрытия = Новый Структура;
		ПараметрыОткрытия.Вставить("Основание", Стр);
		
		А_ВводНаОснованииВызовСервера.СоздатьЗаявкаНаРасходованиеДенежныхСредствСоздатьНаОснованииЗаказаПоставщику(ПараметрыОткрытия);	
	КонецЦикла;
	
КонецПроцедуры 

 

В модуле А_ВводНаОснованииВызовСервера создаем документ и вызываем функцию Заполнить(ПараметрыОткрытия)

 

 

Процедура СоздатьЗаявкаНаРасходованиеДенежныхСредствСоздатьНаОснованииЗаказаПоставщику(ПараметрыОткрытия) Экспорт 
	
	ЗаявкаНаРДС = Документы.ЗаявкаНаРасходованиеДенежныхСредств.СоздатьДокумент();
	ЗаявкаНаРДС.Дата = ТекущаяДата();
	ЗаявкаНаРДС.Заполнить(ПараметрыОткрытия);
	Попытка
		ЗаявкаНаРДС.Записать(РежимЗаписиДокумента.Проведение);
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Создан документ:'") + ЗаявкаНаРДС.Ссылка);
	Исключение
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
	КонецПопытки;	
 	
КонецПроцедуры

 

 В результате получаем: 

 

 

Тестировал: 

1С:Комплексная автоматизация 2 (2.4.9.98)

Платформа 1С:Предприятие 8.3 (8.3.16.1148)

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Адаптация типовых решений 1С:Предприятие 8 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

32330 руб.

29.06.2023    12432    35    15    

42

Адаптация типовых решений БСП (Библиотека стандартных подсистем) Кадровый учет ЭДО и ОФД 1C:Бухгалтерия 1С:Зарплата и кадры 7.7 1C:ERP 1С:ЗУП 1С:УТ 1С:ДО Платные (руб)

Наше расширение 1С Госключ обеспечивает интеграцию любой конфигурации 1С на базе БСП с мобильным приложением «Госключ», позволяя сотрудникам подписывать кадровые документы (КЭДО) и документы материальной ответственности (МОЛ, ПБ) усиленной электронной подписью прямо со смартфона. Решение автоматизирует формирование и отправку документов на подпись, отслеживает статусы подписания и хранит подписанные файлы непосредственно в базе 1С

25000 руб.

06.03.2026    1024    1    0    

3

Печатные формы Адаптация типовых решений Бухгалтер Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с соответствующими именами, при выводе на печать в размещённые картинки будут выводиться факсимиле из прикреплённых рисунков. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

6000 руб.

07.02.2023    13326    119    23    

75

Банковские операции Адаптация типовых решений Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

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

9760 руб.

17.06.2025    3800    9    0    

8

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

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

7930 руб.

16.10.2025    1436    2    0    

2

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Расширение для УНФ, чтобы автоматически отменять старые резервы и не мешалть эффективно продавать.

9150 руб.

02.08.2023    8304    26    5    

41
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. PLAstic 296 16.03.20 14:12 Сейчас в теме
А почему нельзя сделать это типовыми средствами? Просто вытащить ввод на основании в форму списка и всё. Ну, не штатную, а свою, но с той же иконкой даже. Если у вас правильно расположен код заполнения документа (ОбработкаЗаполнения), то понадобится только написать Для каждого-Из-Цикл. Разве нет?
Пока что я или не понимаю сути алгоритма, или ваша реализация не является оптимальной.
2. John_d 6108 16.03.20 14:14 Сейчас в теме
(1) Так не выходит. Попробуйте в типовой конфигурации так сделать.
d4rkmesa; +1 Ответить
3. PLAstic 296 16.03.20 14:28 Сейчас в теме
(2) Проверьте ещё раз, плз. Пара минут и у меня воспроизвелось несколько примеров.
&НаКлиенте
Процедура КомандаЗаполнитьПачкой(Команда)

	ВвестиПачкой(Элементы.Список.ВыделенныеСтроки);

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

&НаСервереБезКонтекста
Процедура ВвестиПачкой(ЗНАЧ МассивДокументов)

	Для каждого ДокументСсылка Из МассивДокументов Цикл
		ВыполнениеРабот = Документы.ВыполнениеРабот.СоздатьДокумент();
		ВыполнениеРабот.Дата = ТекущаяДата();
		ВыполнениеРабот.Заполнить(ДокументСсылка);
		ВыполнениеРабот.Записать();
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрШаблон("Создан документ %1", ВыполнениеРабот.Ссылка));
	КонецЦикла;

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

Нюансы:
* Серверному обработчику не нужен контекст формы.
* Операнд обработчика исходно только для чтения, поэтому надо добавлять "ЗНАЧ", чтобы платформа не пыталась изменить его после вызова серверной процедуры.
* Заполнение даты можно также убрать в обработчик заполнения. Просто для красоты.
user811769; +1 Ответить
4. John_d 6108 16.03.20 14:35 Сейчас в теме
(3) так будет работать. Это как у меня в Варианте 2.
Только тут это дополнительная кнопка. А у меня типовая кнопка "ввод на основании"
5. PLAstic 296 16.03.20 14:37 Сейчас в теме
(4) Открытие форм новых документов тоже можно несложно реализовать. Даже без записи их в базу, формы новых.
Вся соль, я так понял, в использовании типовой кнопки?
6. John_d 6108 16.03.20 14:37 Сейчас в теме
7. triviumfan 101 16.03.20 15:35 Сейчас в теме
8. kirill_sh 2 17.03.20 11:47 Сейчас в теме
9. selez-a 18 18.03.20 19:27 Сейчас в теме
Не пробовали использовать внешнюю обработку с типом "СозданиеСвязанныхОбъектов".
10. zardinovav 14.05.26 08:34 Сейчас в теме
Нашел максимально простой способ ввода на основании нескольких выделенных строк. Задача была сделать ввод на основании Корректировок общее перемещение
вставил одну строчку в модуле менеджера перемещения
&ИзменениеИКонтроль("ДобавитьКомандуСоздатьНаОсновании")
Функция ТР_ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании)
	Если ПравоДоступа("Добавление", Метаданные.Документы.ПеремещениеТоваров) Тогда
		КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
		КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.ПеремещениеТоваров.ПолноеИмя();
		КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.ПеремещениеТоваров);
		КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
		КомандаСоздатьНаОсновании.ФункциональныеОпции = "ИспользоватьПеремещениеТоваров";
		#Вставка   
		КомандаСоздатьНаОсновании.МножественныйВыбор = истина;
		#КонецВставки
		Возврат КомандаСоздатьНаОсновании;

	КонецЕсли;

	Возврат Неопределено;
КонецФункции
Показать


после этого в обработке заполнения просто проверяем данные на тип массив
Для отправки сообщения требуется регистрация/авторизация