Имя: Пароль:
1C
 
Печать из списка документов
0 NIGHTHUNTER
 
12.04.24
10:23
В списке документов есть печать.
Внешняя печатная форма. Печатает только выделенный в списке документ.
как сделать что бы при выделении в списке нескольких документов они шли на печать?
1 Builder
 
12.04.24
10:27
(0) Может доработать печатную форму?
2 NIGHTHUNTER
 
12.04.24
10:31
(1) Подскажите пожалуйста как?

Функция СформироватьТабличныйДокумент(ОбъектПечати, ПечатьЭП) Экспорт

В ОбъектПечати ссылка на выбранный документ.

Или при тестировании с реквизита формы. Или при выборе строки в списке документов. Или из самого документа.

А как это сделать, при выборе строк в списке документов, что бы на печать пошли все выбранные строки?
3 Fedor-1971
 
12.04.24
10:32
(0) Если внешняя форма с использованием БСП, то туда отправляется массив документов, соответственно нужно построить алгоритм обработки массива, а не первого документа
4 Fedor-1971
 
12.04.24
10:38
(2) примерно так:
Процедура Печать(МассивОбъектов,КоллекцияПечатныхФорм, ОбъектыПечати,  ПараметрыВывода) Экспорт

МассивОбъектов - это все выделенные в списке

Для каждого ОбъектПечати из МассивОбъектов цикл
    СформироватьТабличныйДокумент(ОбъектПечати, ПечатьЭП)
КонецЦикла
5 NIGHTHUNTER
 
12.04.24
10:37
(3)

//
Функция СформироватьТабличныйДокумент(ОбъектПечати, ПечатьЭП) Экспорт
    Сообщить(ОбъектПечати.Количество());

Количество() - не обнаружено!
6 NIGHTHUNTER
 
12.04.24
10:38
ОбъектПечати это ссылка
7 yopQua
 
12.04.24
10:40
крутишь в цикле выделенные строки в списке документов и каждый раз вызываешь это
Функция СформироватьТабличныйДокумент(ОбъектПечати, ПечатьЭП) Экспорт
передаешь ссылку из строки в объект печати
8 NIGHTHUNTER
 
12.04.24
10:40
(4) а как это отладить?
9 Fedor-1971
 
12.04.24
10:40
(5) Смотри чуть раньше или посмотри как в (4)
10 yopQua
 
12.04.24
10:41
(9) ццц еще здравомыслящий ;)
11 NIGHTHUNTER
 
12.04.24
10:41
(7)

Вроде так и сделано, -

Функция Печать(МассивОбъектов = Неопределено, КоллекцияПечатныхФорм = Неопределено, ОбъектыПечати = Неопределено, ПараметрыВывода = Неопределено) Экспорт
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ЭтапПроизводства") Тогда
        Для Каждого ОбъектПечати Из МассивОбъектов Цикл
            УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "ЭтапПроизводства",
            "Этап производства",
            СформироватьТабличныйДокумент(ОбъектПечати,Истина));
        КонецЦикла;
    КонецЕсли;
КонецФункции
12 Fedor-1971
 
12.04.24
10:47
(8) Само просто: поставь Сообщить("Док ....") в цикле, потом подключишь свою функцию

Или поставь точку останова в форме списка  Подключаемый_ВыполнитьКоманду
13 yopQua
 
12.04.24
10:45
что в МассивОбъектов, строки списка или ссылки?
и это судя по названию УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию
только добавляет табдок в коллекцию, надо же еще .Показать() сделать
14 vicof
 
12.04.24
10:48
Вангую еще 40 тупых сообщений про то, какой тип у объекта печати, как их вызывать, про неумение пользоваться отладчиком и как отладить печатную форму, сообщения про поиск в интернетах по простейшему запросу, сообщения про тупость некоторых участников, молчание автора месяц, и еще приход с таким же тупым вопросом. И с такой же реакцией на него.
15 yopQua
 
12.04.24
10:47
в общем, отладчиком смотреть надо, что там происходит
16 yopQua
 
12.04.24
10:48
(14) похоже на то, что такое уже бывало
17 Garykom
 
12.04.24
10:49
(0) Дошло наконец что не стоит бездумно копипастить кривой код с "МассивОбъектов[0]" ?
18 Garykom
 
12.04.24
10:53
(17)+ Еще стоит открыть для себя
ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("ВерсияБСП")

С прочими
ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка()

и
ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКоманды<Тип>()
19 yopQua
 
12.04.24
10:50
гггг ну точно, опыт уже есть
был такой LivingStar кажется, очень похоже
20 Fedor-1971
 
12.04.24
10:50
12+ Вот тут: ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список);
Возможно, надо Элементы.Список.ВыбранныеСтроки (или как-то так)
21 vicof
 
12.04.24
10:51
(19) Это он и есть
22 АгентБезопасной Нацио
 
12.04.24
10:53
(17) а вот спорим, что не дошло?
23 NIGHTHUNTER
 
12.04.24
10:53
При выделении двух документов в списке, они оба идут в сообщить. Но почему на печать идет только последний из них?



Функция Печать(МассивОбъектов = Неопределено, КоллекцияПечатныхФорм = Неопределено, ОбъектыПечати = Неопределено, ПараметрыВывода = Неопределено) Экспорт
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЭтапПроизводства") Тогда
        Для Каждого ОбъектПечати Из МассивОбъектов Цикл
            Сообщить(ОбъектПечати);
            УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "ЭтапПроизводства",
            "Этап производства",
            СформироватьТабличныйДокумент(ОбъектПечати,Истина));
        КонецЦикла;
    КонецЕсли;
КонецФункции
24 yopQua
 
12.04.24
10:53
(21) тогда ждем появления пользователя с ником NightStar
25 vicof
 
12.04.24
10:56
Или LivingHunter
26 Fedor-1971
 
12.04.24
10:56
(23) Сначала подготовь все документы в табДок, потом выводи оный в коллекцию печатных форм
27 yopQua
 
12.04.24
10:56
ага, других вариантов похоже быть не может, не дано)
28 NIGHTHUNTER
 
12.04.24
10:57
(17) где вы это видели?

МассивОбъектов[0]
29 АгентБезопасной Нацио
 
12.04.24
10:58
(23) потому, что у тебя есть ошибка.
30 NIGHTHUNTER
 
12.04.24
10:58
(26) вывод же в (23) идет нормальный, почему на печать идет только последняя ссылка?
31 vicof
 
12.04.24
10:59
(28) Т.е. то, что бездумно копипастишь кривой код, уже не отрицаешь. Это хорошо.
32 NIGHTHUNTER
 
12.04.24
10:59
(29) Где?
33 Garykom
 
12.04.24
10:59
(23) Ну открой уже модуль/код УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию
И изучи его!!!
34 АгентБезопасной Нацио
 
12.04.24
11:00
(32) в ДНК!
35 Garykom
 
12.04.24
11:02
36 NIGHTHUNTER
 
12.04.24
11:03
(33) Я же сюда передаю каждый раз новую ссылку, -

СформироватьТабличныйДокумент(ОбъектПечати,Истина));
        КонецЦикла;
    КонецЕсли;
КонецФункции

В ОбъектПечати
37 NIGHTHUNTER
 
12.04.24
11:08
Почему не работает (11)  ?
38 NIGHTHUNTER
 
12.04.24
11:08
(33) Там все в порядке, как я посмотрел.
39 NIGHTHUNTER
 
12.04.24
11:09
(26) Так и есть, все формируется в таб док , а потом передатеся в печать
40 Гена
 
12.04.24
11:15
Гляньте как это сделано в доке увольнения. Там в меню печати есть опция печати комплекта, открывается диалог в котором можно выбрать формы.
41 Garykom
 
12.04.24
11:15
(38) Ты реально код читать не умеешь?

Что делает Найти?
Что?
Куда вставит "ТабличныйДокумент"?

Еще скажи у тебя имена макетов разные...
42 NIGHTHUNTER
 
12.04.24
11:15
поможете?
43 Garykom
 
12.04.24
11:18
(41)+ Свой код в (11) исправь так чтобы цикл по МассивОбъектов формировал один ТабДок и один раз его (после цикла)
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию
44 Fedor-1971
 
12.04.24
11:17
(38) Плохо посмотрел
(39) ты постоянно передаёшь новый табДок и трёшь уже выведенные данные

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

        Для Каждого ОбъектПечати Из МассивОбъектов Цикл
            Сообщить(ОбъектПечати);

//сначала сделай единый табличный документ для всех ссылок            табДок.Вывести(СформироватьТабличныйДокумент(ОбъектПечати,Истина));
        КонецЦикла;

//потом выводи его
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "ЭтапПроизводства",
            "Этап производства",
табДок);            
    КонецЕсли;
45 NIGHTHUNTER
 
12.04.24
11:18
(41) Один макет, в него нужно вставить и вывести выделенные документы в списке документов.
Пока если я выделил 3, вывкдктся последний.
46 Garykom
 
12.04.24
11:24
(43)+ Не забывай при выводе нескольких ТабДок в один про ВывестиГоризонтальныйРазделительСтраниц()
Вроде есть типовая процедура/функция для этого
47 NIGHTHUNTER
 
12.04.24
11:26
(46) То есть есть причина, почему я выделаю в списке несколько документов , а выводится последний?

Как это быстрее решить?
48 Garykom
 
12.04.24
11:31
(47) Сходи на курсы...
Но лучше бросай программирование - это явно не твое.
49 Fedor-1971
 
12.04.24
11:30
(47) Тебе уже в 44 даже алгоритм написал
Что ещё нужно? куда уж быстрее?
50 yopQua
 
12.04.24
11:30
(40)
Гляньте как это сделано в доке увольнения


Тонко!
51 Builder
 
12.04.24
11:47
Мне кажется эта тема как-то связана с соседней темой автора про атаку фсб :)
52 DrZombi
 
12.04.24
13:10
(0) Ерунда, вот как надо печатать из внешней обработки.

Некий код... печати с диалогом

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    //...............
    пОбъектыНазначения = Параметры.ОбъектыНазначения;
    ИдентификаторКоманды = Параметры.ИдентификаторКоманды;
    
    ОбъектыНазначения = ПоместитьВоВременноеХранилище(пОбъектыНазначения,ЭтаФорма.УникальныйИдентификатор);
    
КонецПроцедуры

&НаСервере
Функция ПолучитьСсылкуНаВнешнююОбработкуПоИмениОбъектаНаСервере(ИмяОбъекта)
    
    //Отключим всякого рода проверки безопасности от 1С... оно тут лишнее...
    УстановитьОтключениеБезопасногоРежима(Истина);
    УстановитьПривилегированныйРежим(Истина);
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ИмяОбъекта", ИмяОбъекта);
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |    ДополнительныеОтчетыИОбработки.Ссылка КАК Ссылка
    |ИЗ
    |    Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки
    |ГДЕ
    |    НЕ ДополнительныеОтчетыИОбработки.ЭтоГруппа
    |    И НЕ ДополнительныеОтчетыИОбработки.ПометкаУдаления
    |    И ДополнительныеОтчетыИОбработки.ИмяОбъекта = &ИмяОбъекта
    |    И ДополнительныеОтчетыИОбработки.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется)
    |
    |УПОРЯДОЧИТЬ ПО
    |    Ссылка";
    
    РезЗапроса = Запрос.Выполнить();
    Если РезЗапроса.Пустой() Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    Выборка = РезЗапроса.Выбрать();
    Выборка.Следующий();
    
    Возврат Выборка.Ссылка;
КонецФункции

Функция ПодготовитьСтруктуруПараметровВывода()
    Возврат УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
КонецФункции

&НаКлиенте
Процедура Печать(Команда)
    
    ОбъектыПечати = ПолучитьИзВременногоХранилища(ОбъектыНазначения);
    ПараметрыПечати = ОбщегоНазначенияБПКлиент.ПолучитьЗаголовокПечатнойФормы(ОбъектыПечати);
    
    Если ПараметрыПечати = Неопределено Тогда
        ПараметрыПечати = Новый Структура();
    КонецЕсли;
    
    СписокМакетов = "ПФ_ОС13_ПринятиеКУчетуНМА"; УчетОСВызовСервера.ПолучитьСписокМакетовОС1(ОбъектыПечати);
    
    Если СписокМакетов <> "" Тогда
        пИдентификаторКоманды = "ПФ_ОС13_ПринятиеКУчетуНМА";
        пИдентификаторОбработки = "СОГ_ОС13_ПринятиеКУчетуНМА";
        ИсточникДанных = ПолучитьСсылкуНаВнешнююОбработкуПоИмениОбъектаНаСервере(пИдентификаторОбработки); //ДополнительныеОтчетыИОбработки
        Если ИсточникДанных = Неопределено Тогда
            ТекстСообщения = "Нет внешней обработки '"+пИдентификаторОбработки+"'";
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
            
            Закрыть();
            Возврат;
        КонецЕсли;
        
        ПараметрыВывода = ПодготовитьСтруктуруПараметровВывода();
        ПараметрыВывода.Вставить("НомерДоговора",Объект.НомерДоговора);
        ПараметрыВывода.Вставить("ДатаДоговора",Объект.ДатаДоговора);
        
        ПараметрыИсточника = Новый Структура;
        ПараметрыИсточника.Вставить("ИдентификаторКоманды", пИдентификаторКоманды);
        ПараметрыИсточника.Вставить("ОбъектыНазначения",    ОбъектыПечати);
        
        ИмяМенеджераПечати = "ВнешняяОбработка."+пИдентификаторОбработки;
        ИменаМакетов     = СписокМакетов;
        МассивОбъектов     = ОбъектыПечати;
        
        //ПараметрыОткрытия = Новый Структура;
        ПараметрыОткрытия = УправлениеПечатьюСлужебныйКлиент.ПараметрыОткрытияФормыПечати();
        ПараметрыОткрытия.ИсточникДанных = ИсточникДанных;
        ПараметрыОткрытия.ПараметрыИсточника = ПараметрыИсточника;
        ПараметрыОткрытия.ПараметрыВывода     = ПараметрыВывода;
        
        ПараметрыОткрытия.ИмяМенеджераПечати = ИмяМенеджераПечати;
        ПараметрыОткрытия.ИменаМакетов         = ИменаМакетов;
        ПараметрыОткрытия.ПараметрКоманды     = МассивОбъектов;
        ПараметрыОткрытия.ПараметрыПечати     = ПараметрыПечати;
        
        ВладелецФормы = ЭтаФорма;
        Если ВладелецФормы = Неопределено Тогда
            ПараметрыОткрытия.УникальныйИдентификаторХранилища = Новый УникальныйИдентификатор;
        Иначе
            ПараметрыОткрытия.УникальныйИдентификаторХранилища = ВладелецФормы.УникальныйИдентификатор;
        КонецЕсли;
        
        СформированныеПечатныеФормы = УправлениеПечатьюВызовСервера.НачатьФормированиеПечатныхФорм(ПараметрыОткрытия);
        ПараметрыОткрытия.ВладелецФормы = ВладелецФормы;
        
        
        РезультатФоновойОперации = Новый Структура;
        РезультатФоновойОперации.Вставить("Статус", "Выполнено");
        РезультатФоновойОперации.Вставить("КраткоеПредставлениеОшибки", "");
        РезультатФоновойОперации.Вставить("ПодробноеПредставлениеОшибки", "");
        РезультатФоновойОперации.Вставить("Сообщения", Новый ФиксированныйМассив(Новый Массив));
        РезультатФоновойОперации.Вставить("АдресРезультата", ПоместитьВоВременноеХранилище(СформированныеПечатныеФормы, ПараметрыОткрытия.УникальныйИдентификаторХранилища));
        
        //УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиПослеФормированияПечатныхФорм(РезультатФоновойОперации, ПараметрыОткрытия);
        УправлениеПечатьюСлужебныйКлиент.ОткрытьФормуПечатьДокументов(РезультатФоновойОперации, ПараметрыОткрытия);
    
    КонецЕсли;
        
    Закрыть();
    
КонецПроцедуры



53 DrZombi
 
12.04.24
13:11
+(52)  Если чего это БП 3.0.150.29
54 Адинэснег
 
12.04.24
15:21
ТС, ну как у тебя, всё в порядке?
55 NIGHTHUNTER
 
12.04.24
17:11
(54) Че у меня все в порядке? Тему забанили!!!!