Как распечатать только выделенные строки документа (УФ)?

1. Divanoff 22 05.05.17 14:24 Сейчас в теме
День добрый.
Программа ЗУП 3. Есть внешняя печатная форма документа "Увольнение списком". Надо распечатать информацию только по выделенным строкам.
Как это делается? Нужен принцип и(или) пример реализации.
Как передаются выделенные строки в документ?
По теме из базы знаний
Найденные решения
3. v3rter 05.05.17 17:14 Сейчас в теме
Возможно поможет http://infostart.ru/public/191796/ , там, конечно, "Передача параметров/значений во внешнюю печатную форму для конфигураций на БСП (1С:Предприятие 8.2/8.3)", но принцип, скорее всего, тот же.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. alex-l19041 8 05.05.17 17:15 Сейчас в теме
(1)надо писать свою внешнюю печатную форму
5. Divanoff 22 10.05.17 08:22 Сейчас в теме
(4)это понятно, вопрос в том: как передать в печатную форму выделенные строки?
6. artik1994 10.05.17 08:24 Сейчас в теме
(5) а не проще в писке сделать галочки типа "булево" и по признаку Истина выводить их на печ. форму?
2. Matveev_VS 165 05.05.17 16:54 Сейчас в теме
Отдельно выделенные строки распечатать не получится, проще отредактировать печатную форму документа
3. v3rter 05.05.17 17:14 Сейчас в теме
Возможно поможет http://infostart.ru/public/191796/ , там, конечно, "Передача параметров/значений во внешнюю печатную форму для конфигураций на БСП (1С:Предприятие 8.2/8.3)", но принцип, скорее всего, тот же.
7. Divanoff 22 10.05.17 08:38 Сейчас в теме
(3)я прочитал данную статью, но в ней, как я понял, просто открывается форма с одной галочкой, которую надо заполнить или не заполнить и потом осуществляется печать.
Насколько я понимаю можно сделать так: показать такую же форму со всеми строками документа и в ней уже осуществить выбор нужных строки и через допараметры передать дальше в процедуру печати.
Получается выделенные строки нельзя никак передать в печатную форму?
15. Doom2w 37 10.05.17 10:09 Сейчас в теме
(7)
(3)я прочитал данную статью, но в ней, как я понял, просто открывается форма с одной галочкой, которую надо заполнить или не заполнить и потом осуществляется печать.
Насколько я понимаю можно сделать так: показать такую же форму со всеми строками документа и в ней уже осуществить выбор нужных строки и через допараметры передать дальше в процедуру печати.


Да.


(7)
Получается выделенные строки нельзя никак передать в печатную форму?


Можно но с изменением конфигурации.
Потребуется программно в документе, открывать ВПФ в которую передать (параметрами формы) выделенные строки.
Дальше по алгоритму из http://infostart.ru/public/191796/
19. Divanoff 22 10.05.17 16:01 Сейчас в теме
(3)Сделал по его образцу в ЗУП 3.1 но выходит ошибка:

{ВнешняяОбработка.ПечатьТ61СВыборомСотрудниковДляПечати.Форма.Форма.Форма(162)}: Поле объекта не обнаружено (ДополнительнаяОбработкаСсылка)
	ПараметрыОткрытия.ИсточникДанных     = ВыполняемаяКоманда.ДополнительнаяОбработкаСсылка;


А вот исходная процедура:

&НаКлиенте
Процедура ВыполнитьОткрытиеПечатнойФормы(Команда)
	
	ВыполняемаяКоманда = Параметры;
	
	СтандартнаяОбработка = Истина;
	
	//Определение и заполнение штатных параметров для общей формы ПечатьДокументов
	ПараметрыОткрытия = Новый Структура("ИсточникДанных, ПараметрыИсточника");
	ПараметрыОткрытия.ИсточникДанных     = ВыполняемаяКоманда.ДополнительнаяОбработкаСсылка;
	ПараметрыОткрытия.ПараметрыИсточника = Новый Структура("ИдентификаторКоманды, ОбъектыНазначения");
	ПараметрыОткрытия.ПараметрыИсточника.ИдентификаторКоманды = ВыполняемаяКоманда.ИдентификаторКоманды;
	
	//Здесь передаём наши значения в модуль обработки.
	//Структура для передачи параметров или значений в процедуру Печать обработки
	//В процедуре печати она будет доступна в качестве первого элемента массива МассивОбъектовНазначения
	ДополнительныеПараметры = Новый Структура();
	//Значения для передачи
	МассивСотрудников = Новый Массив;
	Для каждого Стр Из Элементы.Сотрудники.ВыделенныеСтроки Цикл
		МассивСотрудников.Добавить(Сотрудники[Стр].Сотрудник);		
	КонецЦикла; 
	ДополнительныеПараметры.Вставить("МассивСотрудников", МассивСотрудников);	
	
	//Еще какие-то значения
	//ДополнительныеПараметры.Вставить("РеквизитФормы1", РеквизитФормы1); 
	//ДополнительныеПараметры.Вставить("РеквизитФормы2", РеквизитФормы2); 
	
	//В массиве ОбъектыНазначения будут содержаться ссылки на вызвавший форму объект (документ, справочник)
	// и наши значения из реквизитов формы или обработки
	ОбъектыНазначения = Новый СписокЗначений;
	ОбъектыНазначения.Добавить(ДополнительныеПараметры);
	
	//Ссылки на вызвавшие форму объекты
	Для каждого ОбъектНазначения Из ВыполняемаяКоманда.ОбъектыНазначения Цикл
		ОбъектыНазначения.Добавить(ОбъектНазначения);
	КонецЦикла; //Для каждого ОбъектНазначения Из   
	ПараметрыОткрытия.ПараметрыИсточника.ОбъектыНазначения = ОбъектыНазначения;
	
	//Вывод сформированного табличного документа в штатную форму.
	ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия);	
	
КонецПроцедуры
Показать


Не в курсе что это может быть? И как правильно передать в новую БСП объекты печати?
20. Doom2w 37 11.05.17 07:55 Сейчас в теме
Проверь наличие Ключевых Параметров Форма
ДополнительнаяОбработкаСсылка типа СправочникСсылка.ДополнительныеОтчетыИОбработки
ИдентификаторКоманды тип строка
ИмяФормы тип строка
ОбъектыНазначения произвольный

(19)
ПараметрыОткрытия.ИсточникДанных = ВыполняемаяКоманда.ДополнительнаяОбработкаСсылка;


Отладчиком на данной строке. и открывай ВПФ.
mrmr; Divanoff; +2 Ответить
25. JinAir7460 20.12.23 10:54 Сейчас в теме
(20)
Проверь наличие Ключевых Параметров Форма

спасибо, намучался пару дней, а оказывается свойство Ключевой для параметра не стояло
8. aserg 44 10.05.17 08:49 Сейчас в теме
Выделение строк в форме происходит на клиенте и в объекте "Форма", а печать - на сервере и через запрос к базе данных. Возможно, наверное, передать в процедуру печати номера выделенных строк, а уже по этим номерам создать запрос к базе данных и процедуру печати
9. v3rter 10.05.17 09:18 Сейчас в теме
(8)
передать в процедуру печати номера выделенных строк
собственно, в передаче вся сложность, поэтому и посчитал, что передать массив строк во внешнюю печатную форму проще, чем разобраться с каскадом заумных стандартных обработчиков. Тем более, что надо ещё обрабатывать ситуацию "выделена одна строка".
11. aserg 44 10.05.17 09:38 Сейчас в теме
(9)
Тем более, что надо ещё обрабатывать ситуацию "выделена одна строка

Зачем? Достаточно использовать массив с одним элементом.
Divanoff; +1 Ответить
12. v3rter 10.05.17 09:47 Сейчас в теме
(11) В интерфейсном смысле - когда пользователь вызывает отдельную форму для печати выделенных строк, он понимает, что напечатается одна выделенная строка, а не весь документ.
16. Divanoff 22 10.05.17 10:50 Сейчас в теме
(9)да именно, что сложность в передаче. Теоретически можно передать массив сотрудников через стандартные процедуры печати, которые создают структуры и запихивают в них одни и те же данные несколько раз, но это, наверное, не самое изящное решение
10. aserg 44 10.05.17 09:27 Сейчас в теме
Массив выделенных строк можно получить на клиенте через:
МассивСтрок = ЭтаФорма.Элементы.Материалы.ВыделенныеСтроки;


Этот массив строк передается в процедуру печати на сервер, где строится запрос с условием:
ГДЕ
	ПоступлениеМЗМатериалы.НомерСтроки В (&МассивСтрок)
	И ПоступлениеМЗМатериалы.Ссылка = &Ссылка


Все. Только нужно учесть, что в МассивеСтрок хранятся индексы, а не номера строк.

Здесь "Материалы" - это табличная часть "Материалы" документа "ПоступлениеМЗ". В ЗУПе табличная часть будет иметь другое название, например: "Сотрудники".
17. Divanoff 22 10.05.17 10:54 Сейчас в теме
(10) это я знаю))) Сам механизм типовой передачи очень негибок, почему они не создали структуру которую тащили бы с самого начала до конца?
А то создают какие-то дополнительные параметры, передают что-то, а важной фишки нет
26. XelOla 18 29.03.24 12:32 Сейчас в теме
(17) чем закончилось, не поделитесь ли обработкой, мне как раз для ЗУП надо, но для другого документа
13. herfis 513 10.05.17 09:56 Сейчас в теме
Может, пользователя устроит вариант выделить на предпросмотре нужные строки и в настройках принтера при печати указать печать выделенной области?
Извините, что я тут со своими глупостями :)
14. v3rter 10.05.17 10:08 Сейчас в теме
Я не сторонник излишне общительных печатных форм ) Когда пользователи начинают печатать документы за месяц, ошибок от этих диалогов становится в разы больше, так как торопятся и промахиваются.
18. v3rter 10.05.17 11:19 Сейчас в теме
В том то и дело, что если в передаваемую структуру добавить что-то своё, то может нарушится работа некоторых типовых печатных форм. Уже натыкался.
21. Divanoff 22 11.05.17 08:30 Сейчас в теме
всем спасибо, кто помогал! Печатную форму сделал.
22. Meest 1 11.11.20 16:18 Сейчас в теме
(21)

Еще бы на писал бы как, вообще цены не было бы)
kontext; Angealtor; +2 Ответить
23. prog1c_vl 24 14.09.22 12:58 Сейчас в теме
(22) Для табличной части внешней обработки примерно вот так это выглядит:
НаКлиенте
МассивВыделенныхСтрок = Новый Массив;
МассивВыделенныхСтрок = ЭтаФорма.ТабличнаяЧастьМатериалы.ВыделенныеСтроки;
Если МассивВыделенныхСтрок.Количество()>0 Тогда
    //значения в массиве рекомендуется сортировать, т.к. индексы выстраиваются по своим правилам
    СписокДляСортировкиЗначенийМассива = Новый СписокЗначений;
    СписокДляСортировкиЗначенийМассива.ЗагрузитьЗначения(МассивВыделенныхСтрок);
    СписокДляСортировкиЗначенийМассива.СортироватьПоЗначению(НаправлениеСортировки.Возр);
    МассивДляОбработки = СписокДляСортировкиЗначенийМассива.ВыгрузитьЗначения();
    Печать_Сервере(МассивДляОбработки );//в массиве индексы строк
КонецЕсли;

НаСервере
Для Каждого СтрокаМассиваИндексовСтрок Из МассивДляОбработки Цикл
    СтрокаТабличнойЧастиМатериаловПоИндексуВыделеннойСтроки = Объект.ТабличнаяЧастьМатериалы.Получить(СтрокаМассиваИндексовСтрок);
//получаем значения реквизитов из строки табличной части
КоличествоМатериалов = СтрокаТабличнойЧастиМатериаловПоИндексуВыделеннойСтроки.Количество;
КонецЦикла
Показать
24. prog1c_vl 24 16.09.22 18:11 Сейчас в теме
(23)
Небольшое, но важное исправление:
вместо
СтрокаТабличнойЧастиМатериаловПоИндексуВыделеннойСтроки = Объект.ТабличнаяЧастьМатериалы.Получить(СтрокаМассиваИндексовСтрок);

нужно использовать
СтрокаТабличнойЧастиМатериаловПоИндексуВыделеннойСтроки = Объект.ТабличнаяЧастьМатериалы.НайтиПоИдентификатору(СтрокаМассиваИндексовСтрок);
27. Rafaraf 37 14.10.24 16:18 Сейчас в теме
&НаКлиенте 
Процедура Печать(ИдентификаторКоманды, МассивОбъектов) Экспорт
	
	Для Каждого СсылкаНаДокумент Из МассивОбъектов Цикл
		
		ПараметрыФормы = Новый Структура("Ключ", СсылкаНаДокумент);  
		Форма = ПолучитьФорму("Документ.ИзменениеПлановыхНачислений.Форма.ФормаДокумента", ПараметрыФормы); 
		// табличная часть Сотрудники на форме имеет имя ПоказателиСотрудников!
		мВыделенныеСтроки = Форма.Элементы.ПоказателиСотрудников.ВыделенныеСтроки; 
		
		мСтруктураОкладов = НачисленияСотрудников(СсылкаНаДокумент, мВыделенныеСтроки);
		
		ЗаполнитьДокументWord(СсылкаНаДокумент, мСтруктураОкладов);
		
	КонецЦикла;
	
КонецПроцедуры
Показать


&НаСервере
Функция НачисленияСотрудников(СсылкаНаДокумент, мВыделенныеСтроки)
	
	мСтруктураОкладов = Новый Массив;   
	
	// отбираем только выделенных в ТЧ сотрудников
	мВыделенныеСотрудники = Новый Массив;
	
	Для каждого Стр Из мВыделенныеСтроки Цикл
		мВыделенныеСотрудники.Добавить(СсылкаНаДокумент.Сотрудники[Стр].Сотрудник);
	КонецЦикла; 
	
	Для каждого Строка Из мВыделенныеСотрудники Цикл
Показать
Оставьте свое сообщение

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