Имя: Пароль:
1C
1С v8
Зависает внешняя печатная форма
,
0 ttu174
 
09.01.20
22:36
Доброе время суток уважаемые! Помогите пожалуйста, ни как не могу найти решение, есть внешняя печатная форма ,если ее открываю через Файл-Открыть , то форма выводится, если подключают через дополнительные обработки, и вывожу в документе перемещение товаров, то зависает 1с.
1 ttu174
 
09.01.20
22:38
возможно что то не правильно в сведениях о внешней обработке?

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

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

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;  
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
    
КонецПроцедуры


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

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
     МассивОбъектов = Новый Соответствие();
     МассивОбъектов.Вставить("Документ.ПеремещениеТоваров", МассивОбъектов);
    
    ПечатнаяФорма = ПечатьТребованиеНакладнаяНовая(МассивОбъектов, ОбъектыПечати);
    
    //++    
    Если ПечатнаяФорма = Неопределено Тогда    
        КоллекцияПечатныхФорм[0].ТабличныйДокумент = Новый ТабличныйДокумент();
        Сообщить("Для документа " + ЭтотОбъект.СсылкаНаОбъект + " не удалось сформировать печатную форму");        
        Возврат;    
    КонецЕсли;
    //--
    
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПеремещениеТоваров", "Требование с остатком", ПечатнаяФорма);
    
КонецПроцедуры



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

    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ТребованиеНакладнаяПеремещение";

    //ВалютаПечати = глЗначениеПеременной("ВалютаРегламентированногоУчета");


    ПервыйДокумент = Истина;
    
    Для Каждого Ссылка Из МассивОбъектов Цикл
        
        Если Не ПервыйДокумент Тогда
            ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        
        ПервыйДокумент = Ложь;
        
        НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;

        Запрос       = Новый Запрос;
        Запрос.УстановитьПараметр("Дата",             Ссылка.Дата);
        Запрос.УстановитьПараметр("ДатаДляОстатков",             КонецМинуты(Ссылка.Дата));
        Запрос.УстановитьПараметр("ТекущийДокумент",  Ссылка);
        Запрос.УстановитьПараметр("СкладОтправитель", Ссылка.СкладОтправитель);
        Запрос.УстановитьПараметр("СкладПолучатель",  Ссылка.СкладПолучатель);
        Запрос.Текст = ТекстЗапроса;


        Шапка = Запрос.Выполнить().Выбрать();
        Шапка.Следующий();

        ВыборкаСтрокТовары = Шапка.Товары.Выбрать();
        ВыборкаСтрокТара   = Шапка.ВозвратнаяТара.Выбрать();

        //ЭтоСкладНТТ = (Шапка.ОтправительВидСклада = Перечисления.ВидыСкладов.НТТ
        //              ИЛИ Шапка.ПолучательВидСклада = Перечисления.ВидыСкладов.НТТ);

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

        // ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента));
        // ОбластьМакета.Параметры.НомерДокумента           = ОбщегоНазначения.ПолучитьНомерНаПечать(Ссылка);
        //ОбластьМакета.Параметры.ДатаДокумента            = Шапка.ДатаДокумента;
        ОбластьМакета.Параметры.Отправитель= Шапка.ОтправительПодразделение;
        ОбластьМакета.Параметры.Получатель= Шапка.ПолучательПодразделение;
        ТабДокумент.Вывести(ОбластьМакета);
        
        НомерСтраницы   = 1;
        
    // Получаем результат запроса по номенклатуре
    Результат = ПолучитьРезультатЗапросаПоНоменклатуре(Ссылка, Ссылка.Дата);
        
        
        
        
        // Выводим многострочную часть докмента
        ВыборкаСтрокТовары      = Шапка.Товары.Выбрать();
        
        Ном = 0;
        КоличествоСтрок = ВыборкаСтрокТовары.Количество() + ВыборкаСтрокТара.Количество();
        МассивВыводимыхОбластей = Новый Массив;
        
        ОбластьПодвал = Макет.ПолучитьОбласть("Шапка");
        ТабДокумент.Вывести(ОбластьПодвал);
        
        
         КоличествоВсего = 0;
        
        
        // Выборка товаров
        Пока ВыборкаСтрокТовары.Следующий() Цикл
            
            Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
                Продолжить;
            КонецЕсли;
            
            Ном = Ном + 1;
            
            КоличествоВсего = КоличествоВсего + ВыборкаСтрокТовары.Количество;
            
            ОбластьМакета         = Макет.ПолучитьОбласть("Строка");
            
            ОбластьМакета.Параметры.НомерСтроки   = Строка(Ном);
            ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
            
            КоличествоМест = Формат(ВыборкаСтрокТовары.Количество, "ЧЦ=15; ЧДЦ=3");
            
            Если ВыборкаСтрокТовары.КоличествоМест <> 0 И ЗначениеЗаполнено(ВыборкаСтрокТовары.ЕдиницаИзмеренияМестНаименование) Тогда
                КоличествоМест = КоличествоМест
                                 + Символы.ПС
                                 + " (" + Формат(ВыборкаСтрокТовары.КоличествоМест,"ЧЦ=15; ЧДЦ=0")
                                 + " "
                                 + ВыборкаСтрокТовары.ЕдиницаИзмеренияМестНаименование
                                 + ")";
            КонецЕсли;

            // ОбластьМакета.Параметры.КоличествоМест    = КоличествоМест;
            ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТовары.ТоварНаименование + " / " +
            ВыборкаСтрокТовары.Номенклатура.Родитель.Наименование;
            // + ФормированиеПечатныхФормСервер.ПредставлениеСерий(ВыборкаСтрокТовары);

            //Если ЭтоСкладНТТ Тогда
            //    Сумма = ВыборкаСтрокТовары.Количество * ВыборкаСтрокТовары.Цена;
            //Иначе
            //    Если ВыборкаСтрокТовары.Количество = 0 Тогда
            //        Сумма = 0;
            //        Цена  = 0;
            //    Иначе
            //        Количество = 0;
            //        Сумма = ПолучитьСтоимостьТовара(ТаблицаСтоимости,
            //                                        ВыборкаСтрокТовары.Номенклатура,
            //                                        ВыборкаСтрокТовары.Характеристика,
            //                                        ВыборкаСтрокТовары.Серия,
            //                                        ВыборкаСтрокТовары.ПартионныйУчетПоСериям,
            //                                        Количество);
            //        Цена  = ?(Количество = 0, 0, Сумма / Количество);
            //    КонецЕсли;

            //    Если ВыборкаСтрокТовары.ДокЕдиницаКоэффициент <> 0 Тогда
            //        Количество = Количество * ВыборкаСтрокТовары.ЕдиницаХраненияОстатковКоэффициент / ВыборкаСтрокТовары.ДокЕдиницаКоэффициент;
            //    КонецЕсли;
            //        
            //    Цена = Окр(?(Количество > 0, Сумма / Количество, 0), 2);
            //    Сумма = Цена * ВыборкаСтрокТовары.Количество;
            //    ОбластьМакета.Параметры.Цена = Цена;
            //КонецЕсли;
            //
            //ОбластьМакета.Параметры.Сумма = Сумма;
            
            
            
            ТабДокумент.Вывести(ОбластьМакета);


        КонецЦикла;

        // Выборка возвратная тара
        Пока ВыборкаСтрокТара.Следующий() Цикл

            Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТара.Номенклатура) Тогда
                Продолжить;
            КонецЕсли;

            Ном = Ном + 1;

            КоличествоВсего = КоличествоВсего + ВыборкаСтрокТовары.Количество;
            
            ОбластьМакета         = Макет.ПолучитьОбласть("Строка");
            
            ОбластьМакета.Параметры.НомерСтроки   = Строка(Ном);
            ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТара);

        //    ОбластьМакета.Параметры.КоличествоМест    = Формат(ВыборкаСтрокТара.Количество, "ЧЦ=15; ЧДЦ=3");
            ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТара.ТоварНаименование + " (возвратная тара)";
        //    
        //        
            ТабДокумент.Вывести(ОбластьМакета);

        КонецЦикла;

            ОбластьМакета         = Макет.ПолучитьОбласть("Итого");
            
            ОбластьМакета.Параметры.КоличествоВсего   = КоличествоВсего ;
            ТабДокумент.Вывести(ОбластьМакета);


        // Выводим подвал документа
    //    ФИООтправителя = ФормированиеПечатныхФормСервер.ФамилияИмяОтчество(Шапка.ФизЛицоОтправитель, Шапка.ДатаДокумента);
        //ФИОПолучателя  = ФормированиеПечатныхФормСервер.ФамилияИмяОтчество(Шапка.ФизЛицоПолучатель,  Шапка.ДатаДокумента);
        ОбластьПодвал = Макет.ПолучитьОбласть("Подписи");
        //ОбластьПодвал.Параметры.ДолжностьОтправитель = ПолныеПрава.СведенияОСотруднике(Шапка.ФизЛицоОтправитель, Шапка.ДатаДокумента, Шапка.Организация).Должность;
        //ОбластьПодвал.Параметры.ФИООтправитель       = ОбщегоНазначения.ФамилияИнициалыФизЛица(ФИООтправителя.Фамилия + " " + ФИООтправителя.Имя + " " + ФИООтправителя.Отчество);
        //ОбластьПодвал.Параметры.ДолжностьПолучатель  = ПолныеПрава.СведенияОСотруднике(Шапка.ФизЛицоПолучатель,  Шапка.ДатаДокумента, Шапка.Организация).Должность;
        //ОбластьПодвал.Параметры.ФИОПолучатель        = ОбщегоНазначения.ФамилияИнициалыФизЛица(ФИОПолучателя.Фамилия  + " " + ФИОПолучателя.Имя  + " " + ФИОПолучателя.Отчество);
        ТабДокумент.Вывести(ОбластьПодвал);

        // Зададим параметры макета
//        ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
        
        ЗадатьОбластьПечатиДокумента(ТабДокумент, НомерСтрокиНачало, ОбъектыПечати, Ссылка);

    КонецЦикла;
    Возврат ТабДокумент;
    

КонецФункции // ПечатьТребованиеНакладная()

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    // Вставить содержимое обработчика.
КонецПроцедуры

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

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

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

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

    // Выполнение сформированного запроса и возврат результата    
    
    Возврат Запрос.Выполнить();                              
    
КонецФункции

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

    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ТребованиеНакладнаяПеремещение";

    //ВалютаПечати = глЗначениеПеременной("ВалютаРегламентированногоУчета");


    ПервыйДокумент = Истина;
    
    Для Каждого Ссылка Из МассивОбъектов Цикл
        
        Если Не ПервыйДокумент Тогда
            ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        
        ПервыйДокумент = Ложь;
        
        НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;

        Запрос       = Новый Запрос;
    //    Запрос.УстановитьПараметр("Дата",             Ссылка.Дата);
        Запрос.УстановитьПараметр("ТекущийДокумент",  СсылкаНаОбъект.Ссылка);
        //Запрос.УстановитьПараметр("СкладОтправитель", Ссылка.СкладОтправитель);
        //Запрос.УстановитьПараметр("СкладПолучатель",  Ссылка.СкладПолучатель);
        Запрос.Текст = ТекстЗапроса;


        Шапка = Запрос.Выполнить().Выбрать();
        
        Шапка.Следующий();

        
        
        Запрос       = Новый Запрос;
        //Запрос.УстановитьПараметр("Дата",             Ссылка.Дата);
        Запрос.УстановитьПараметр("ТекущийДокумент",  СсылкаНаОбъект.Ссылка);
        Запрос.УстановитьПараметр("СкладОтправитель", СсылкаНаОбъект.СкладОтправитель);
        Запрос.УстановитьПараметр("ДатаДляОстатков",             КонецМинуты(СсылкаНаОбъект.Дата));
            
    ТекстЗапроса =     "ВЫБРАТЬ
    |    ПеремещениеТовары.Номенклатура,
    |    ПеремещениеТовары.Номенклатура.ВидНоменклатуры как ВидНоменклатуры,
    |        ПеремещениеТовары.Номенклатура.НаименованиеПолное КАК ТоварНаименование,
    |        ПеремещениеТовары.Номенклатура." + ТоварКод + " КАК ТоварКод,
    //|        ПеремещениеТовары.Цена,
    |        ПеремещениеТовары.Количество,
    //|        ПеремещениеТовары.КоличествоМест,
    //|        ПеремещениеТовары.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК ЕдиницаХраненияОстатковКоэффициент,
    //|        ПеремещениеТовары.ЕдиницаИзмерения.Коэффициент КАК ДокЕдиницаКоэффициент,
    //|        ПеремещениеТовары.ЕдиницаИзмерения.Представление               КАК ЕдиницаИзмеренияНаименование,
    //|        ПеремещениеТовары.ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКодПоОКЕИ,
    //|        ПеремещениеТовары.ЕдиницаИзмеренияМест.Представление           КАК ЕдиницаИзмеренияМестНаименование,
//    |        ВЫБОР
//    |            КОГДА ПеремещениеТовары.КоличествоМест > 0 ТОГДА ЕдиницаИзмеренияМест.Коэффициент / Коэффициент
//    |            ИНАЧЕ NULL
//    |        КОНЕЦ                                        КАК КоличествоВОдномМесте,
//    |        ПеремещениеТовары.ХарактеристикаНоменклатуры                   КАК Характеристика,
//    |        ПеремещениеТовары.СерияНоменклатуры                            КАК Серия,
//    |        ПеремещениеТовары.Номенклатура.ВестиПартионныйУчетПоСериям     КАК ПартионныйУчетПоСериям,
    |        ТоварыНаСкладахОстатки.ВНаличииОстаток КАК КоличествоОстаток
    |    
    |ИЗ
    |    Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТовары
    | левое СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаДляОстатков,склад=&СкладОтправитель ) КАК ТоварыНаСкладахОстатки
    |    ПО ПеремещениеТовары.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
    //|    И ПеремещениеТовары.ХарактеристикаНоменклатуры= ТоварыНаСкладахОстаткиКомпании.ХарактеристикаНоменклатуры
    |
    |ГДЕ
    |    ПеремещениеТовары.Ссылка = &ТекущийДокумент
    |
    |УПОРЯДОЧИТЬ ПО
    |    ПеремещениеТовары.НомерСтроки
    |";
        Запрос.Текст = ТекстЗапроса;
    
        ВыборкаСтрокТовары = Запрос.Выполнить().Выбрать();
        
    //    Запрос2       = Новый Запрос;
    //    Запрос2.УстановитьПараметр("Дата",             Ссылка.Дата);
    //    Запрос2.УстановитьПараметр("ДатаДляОстатков",             КонецМинуты(Ссылка.Дата));
    //    Запрос2.УстановитьПараметр("ТекущийДокумент",  Ссылка);
    //    Запрос2.УстановитьПараметр("СкладОтправитель", Ссылка.СкладОтправитель);
    //    
    //    
    //    ТекстЗапроса2 =     "ВЫБРАТЬ
    //|    ПеремещениеТовары.Номенклатура,
    //|    ПеремещениеТовары.Номенклатура.ВидНоменклатуры как ВидНоменклатуры,
    //|        ПеремещениеТовары.Номенклатура.НаименованиеПолное КАК ТоварНаименование,
    //|        ПеремещениеТовары.Номенклатура." + ТоварКод + " КАК ТоварКод,
    ////|        0 КАК Цена,
    //|        ПеремещениеТовары.Количество,
    ////|        0 КАК КоличествоМест,
    ////|    ПеремещениеТовары.Номенклатура.ЕдиницаХраненияОстатков.Представление               КАК ЕдиницаИзмеренияНаименование,
    ////|    ПеремещениеТовары.Номенклатура.ЕдиницаХраненияОстатков.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКодПоОКЕИ,
    ////|    0                                        КАК КоличествоВОдномМесте,
    //|        ТоварыНаСкладахОстатки.ВНаличииОстаток КАК КоличествоОстаток
    //|    
    //|ИЗ
    //|    Документ.ПеремещениеТоваров.ВозвратнаяТара КАК ПеремещениеТовары
    //|   левое СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаДляОстатков,склад=&СкладОтправитель ) КАК ТоварыНаСкладахОстатки
    //|    ПО ПеремещениеТовары.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
    //|
    //|ГДЕ
    //|    ПеремещениеТовары.Ссылка = &ТекущийДокумент
    //|
    //|УПОРЯДОЧИТЬ ПО
    //|    ПеремещениеТовары.НомерСтроки
    //|";
    //    Запрос2.Текст = ТекстЗапроса2;
    //
    //    ВыборкаСтрокТара = Запрос2.Выполнить().Выбрать();
        
        
        
        

        //ЭтоСкладНТТ = (Шапка.ОтправительВидСклада = Перечисления.ВидыСкладов.НТТ
        //              ИЛИ Шапка.ПолучательВидСклада = Перечисления.ВидыСкладов.НТТ);

        //Если НЕ ЭтоСкладНТТ Тогда
        //    //ТаблицаСтоимости        = Неопределено; // ПолучитьТаблицуСтоимостиТоваров(Ссылка);
        //    //Если ТаблицаСтоимости = Неопределено Тогда
        //    //    Продолжить;
        //    //КонецЕсли;    
        //    //ВалютаУпрУчета          = глЗначениеПеременной("ВалютаУправленческогоУчета");
        //    //Параметры               = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаУпрУчета, Ссылка.Дата);
        //    //КурсВалютыУпрУчета      = Параметры.Курс;
        //    //КратностьВалютыУпрУчета = Параметры.Кратность;
        //КонецЕсли;
        
        // Выводим общие реквизиты шапки
        СведенияОбОрганизации = "ООО МОЯ";
        ОбластьМакета         = Макет.ПолучитьОбласть("Заголовок");
        ОбластьМакета.Параметры.Заполнить(Шапка);
        ОбластьМакета.Параметры.Организация=Шапка.Организация;
        ОбластьМакета.Параметры.ТекстЗаголовка     = "ТРЕБОВАНИЕ-НАКЛАДНАЯ";
        ОбластьМакета.Параметры.Отправитель= Шапка.ОтправительПодразделение;
        ОбластьМакета.Параметры.Получатель= Шапка.ПолучательПодразделение;
        ТабДокумент.Вывести(ОбластьМакета);
        
        НомерСтраницы   = 1;
        Ном = 0;
        
        КоличествоВсего = 0;
        
        КоличествоСтрок = ВыборкаСтрокТовары.Количество() ;
        МассивВыводимыхОбластей = Новый Массив;
        
        ОбластьПодвал = Макет.ПолучитьОбласть("Шапка");
        ТабДокумент.Вывести(ОбластьПодвал);
        
        // Выборка товаров
        Пока ВыборкаСтрокТовары.Следующий() Цикл
            
            Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
                Продолжить;
            КонецЕсли;
            
            Ном = Ном + 1;
            
            КоличествоВсего = КоличествоВсего + ВыборкаСтрокТовары.Количество;
            
            ОбластьМакета         = Макет.ПолучитьОбласть("Строка");
            
            ОбластьМакета.Параметры.НомерСтроки   = Строка(Ном);
            ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
            
            //КоличествоМест = Формат(ВыборкаСтрокТовары.Количество, "ЧЦ=15; ЧДЦ=3");
            
            //Если ВыборкаСтрокТовары.КоличествоМест <> 0 И ЗначениеЗаполнено(ВыборкаСтрокТовары.ЕдиницаИзмеренияМестНаименование) Тогда
            //    КоличествоМест = КоличествоМест
            //                     + Символы.ПС
            //                     + " (" + Формат(ВыборкаСтрокТовары.КоличествоМест,"ЧЦ=15; ЧДЦ=0")
            //                     + " "
            //                     + ВыборкаСтрокТовары.ЕдиницаИзмеренияМестНаименование
            //                     + ")";
            //КонецЕсли;

            // ОбластьМакета.Параметры.КоличествоМест    = КоличествоМест;
            ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТовары.ТоварНаименование + " / " +
            ВыборкаСтрокТовары.Номенклатура.Родитель.Наименование;

            //Если ЭтоСкладНТТ Тогда
            //    Сумма = ВыборкаСтрокТовары.Количество * ВыборкаСтрокТовары.Цена;
            //Иначе
            //    Если ВыборкаСтрокТовары.Количество = 0 Тогда
            //        Сумма = 0;
            //        Цена  = 0;
            //    Иначе
            //        Количество = 0;
            //        Сумма = ПолучитьСтоимостьТовара(ТаблицаСтоимости,
            //                                        ВыборкаСтрокТовары.Номенклатура,
            //                                        ВыборкаСтрокТовары.Характеристика,
            //                                        ВыборкаСтрокТовары.Серия,
            //                                        ВыборкаСтрокТовары.ПартионныйУчетПоСериям,
            //                                        Количество);
            //        Цена  = ?(Количество = 0, 0, Сумма / Количество);
            //    КонецЕсли;

            //    Если ВыборкаСтрокТовары.ДокЕдиницаКоэффициент <> 0 Тогда
            //        Количество = Количество * ВыборкаСтрокТовары.ЕдиницаХраненияОстатковКоэффициент / ВыборкаСтрокТовары.ДокЕдиницаКоэффициент;
            //    КонецЕсли;
            //        
            //    Цена = Окр(?(Количество > 0, Сумма / Количество, 0), 2);
            //    Сумма = Цена * ВыборкаСтрокТовары.Количество;
            //    ОбластьМакета.Параметры.Цена = Цена;
            //КонецЕсли;
            //
            //ОбластьМакета.Параметры.Сумма = Сумма;
            
            
            
            ТабДокумент.Вывести(ОбластьМакета);


        КонецЦикла;

        // Выборка возвратная тара
        //Пока ВыборкаСтрокТара.Следующий() Цикл

        //    Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТара.Номенклатура) Тогда
        //        Продолжить;
        //    КонецЕсли;

        //    Ном = Ном + 1;

        //    КоличествоВсего = КоличествоВсего + ВыборкаСтрокТовары.Количество;
        //    
        //    ОбластьМакета         = Макет.ПолучитьОбласть("Строка");
        //    
        //    ОбластьМакета.Параметры.НомерСтроки   = Строка(Ном);
        //    ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТара);

        ////    ОбластьМакета.Параметры.КоличествоМест    = Формат(ВыборкаСтрокТара.Количество, "ЧЦ=15; ЧДЦ=3");
        //    ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТара.ТоварНаименование + " (возвратная тара)";
        ////    
        ////        
        //    ТабДокумент.Вывести(ОбластьМакета);

        //КонецЦикла;

            ОбластьМакета         = Макет.ПолучитьОбласть("Итого");
            
            ОбластьМакета.Параметры.КоличествоВсего   = КоличествоВсего ;
            ТабДокумент.Вывести(ОбластьМакета);

        

        // Выводим подвал документа
        //ФИООтправителя = ФормированиеПечатныхФормСервер.ФамилияИмяОтчество(Шапка.ФизЛицоОтправитель, Шапка.ДатаДокумента);
        //ФИОПолучателя  = ФормированиеПечатныхФормСервер.ФамилияИмяОтчество(Шапка.ФизЛицоПолучатель,  Шапка.ДатаДокумента);
        ОбластьПодвал = Макет.ПолучитьОбласть("Подписи");
        //ОбластьПодвал.Параметры.ДолжностьОтправитель = ПолныеПрава.СведенияОСотруднике(Шапка.ФизЛицоОтправитель, Шапка.ДатаДокумента, Шапка.Организация).Должность;
        //ОбластьПодвал.Параметры.ФИООтправитель       = ОбщегоНазначения.ФамилияИнициалыФизЛица(ФИООтправителя.Фамилия + " " + ФИООтправителя.Имя + " " + ФИООтправителя.Отчество);
        //ОбластьПодвал.Параметры.ДолжностьПолучатель  = ПолныеПрава.СведенияОСотруднике(Шапка.ФизЛицоПолучатель,  Шапка.ДатаДокумента, Шапка.Организация).Должность;
        //ОбластьПодвал.Параметры.ФИОПолучатель        = ОбщегоНазначения.ФамилияИнициалыФизЛица(ФИОПолучателя.Фамилия  + " " + ФИОПолучателя.Имя  + " " + ФИОПолучателя.Отчество);
        ТабДокумент.Вывести(ОбластьПодвал);

        // Зададим параметры макета
//        ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
        
        ЗадатьОбластьПечатиДокумента(ТабДокумент, НомерСтрокиНачало, ОбъектыПечати, Ссылка);

    КонецЦикла;
    Возврат ТабДокумент;
    

КонецФункции // ПечатьТребованиеНакладнаяНовая()
2 ttu174
 
09.01.20
22:40
файл здесь https://yadi.sk/d/1him9pY4bII6rg
помогите пожалуйста разобраться
3 Фрэнки
 
09.01.20
22:54
Судя по тексту в сведениях предположу, что это для старой БСП, не той версии, которая сейчас на актуальных конфигурациях вроде УТ 11

Чтобы кто-то захотел файл испытать, указывай сразу на какой конфигурации это можно открывать. Может завтра кто-то чего и подскажет.
4 ttu174
 
09.01.20
22:57
эта печатная форма для Комплексной автоматизации 2, для документа ПеремещениеТоваров
5 Фрэнки
 
09.01.20
23:19
если меня никто не опередит, сделаю завтра пустышку с ВПФ для этого документа - перенесешь из нее красоту для регистрации
6 Фрэнки
 
09.01.20
23:20
просто сейчас уже ночь и доступа на комп разработчика нету
7 ttu174
 
09.01.20
23:21
Спасибо!
8 Фрэнки
 
10.01.20
09:16


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



вот с этим не виснет на развернутой тестовой
2.4.5.24 - это номер релиза - я обычно в качестве инфы по версиям подставляю инфу о версии конфигурации, чтоб по прошлым понимать, насколько оно соотв. текущему нужному релизу
9 mmmarat
 
10.01.20
09:47
(0) Разберитесь с МассивОбъектов и СсылкаНаОбъект. При запуске подключенной обработки у вас ссылки в МассивОбъектов, а в коде по прежнему используется СсылкаНаОбъект. Ну и перепишите инициализацию на нормальную в (8).
ps: СсылкаНаОбъект - это уже ссылка. не нужно делать СсылкаНаОбъект.Ссылка
10 ttu174
 
10.01.20
12:53
После замены сведений об обработке, ошибка вышла
{ОбщийМодуль.УправлениеПечатью.Модуль(1658)}: В обработчике печати не был сформирован табличный документ для: ВПФ_ПеремещениеТоваров
            ВызватьИсключение(ТекстСообщенияОбОшибке);

еще где то поправить надо да?
11 ttu174
 
10.01.20
12:54
(9) а пример можете подсказать что вместо СсылкаНаОбъект надо указывать?
12 Фрэнки
 
10.01.20
13:15
(10) вот это еще должно быть обязательно заполнено


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт    
    
    ИмяМакета         = "Строка - имя макета";
    СинонимМакета     = "Строка - представление макета";
    ТабличныйДокумент = Новый ТабличныйДокумент;
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, ИмяМакета, СинонимМакета, ТабличныйДокумент);
    
КонецПроцедуры
13 ttu174
 
10.01.20
14:13
(12) что то не помогло, все равно ошибка
{ОбщийМодуль.УправлениеПечатью.Модуль(1658)}: В обработчике печати не был сформирован табличный документ для: ВПФ_ПеремещениеТоваров
            ВызватьИсключение(ТекстСообщенияОбОшибке);
14 unenu
 
10.01.20
14:22
(1) за такие простыни отлучить от сети до пенсии
15 ttu174
 
10.01.20
14:33
теперь выглядит так

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

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

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;  
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
    
КонецПроцедуры


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
     МассивОбъектов = Новый Соответствие();
     МассивОбъектов.Вставить("Документ.ПеремещениеТоваров", МассивОбъектов);
    
    ПечатнаяФорма = ПечатьТребованиеНакладнаяНовая(МассивОбъектов, ОбъектыПечати);
    
    ////++    
    //Если ПечатнаяФорма = Неопределено Тогда    
    //    КоллекцияПечатныхФорм[0].ТабличныйДокумент = Новый ТабличныйДокумент();
    //    Сообщить("Для документа " + ЭтотОбъект.СсылкаНаОбъект + " не удалось сформировать печатную форму");        
    //    Возврат;    
    //КонецЕсли;
    ////--
    //
    //УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ВПФ_ПеремещениеТоваров", "ВПФ Перемещение товаров", ПечатнаяФорма);
    
        
    ИмяМакета         = "ВПФ Перемещение товаров";
    СинонимМакета     = "ВПФ Перемещение товаров - внешняя печатная форма";
    ТабличныйДокумент = Новый ТабличныйДокумент;
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, ИмяМакета, СинонимМакета, ТабличныйДокумент);
    
КонецПроцедуры
16 ttu174
 
10.01.20
14:35
о вижу имя макета нету
17 ttu174
 
10.01.20
14:36
ошибки нет теперь, но все равно зависло при выводе из документа
18 ttu174
 
10.01.20
14:37
Код вот такой получился:




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

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

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;  
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
    
КонецПроцедуры


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
     МассивОбъектов = Новый Соответствие();
     МассивОбъектов.Вставить("Документ.ПеремещениеТоваров", МассивОбъектов);
    
    ПечатнаяФорма = ПечатьТребованиеНакладнаяНовая(МассивОбъектов, ОбъектыПечати);
    
    ////++    
    //Если ПечатнаяФорма = Неопределено Тогда    
    //    КоллекцияПечатныхФорм[0].ТабличныйДокумент = Новый ТабличныйДокумент();
    //    Сообщить("Для документа " + ЭтотОбъект.СсылкаНаОбъект + " не удалось сформировать печатную форму");        
    //    Возврат;    
    //КонецЕсли;
    ////--
    //
    //УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ВПФ_ПеремещениеТоваров", "ВПФ Перемещение товаров", ПечатнаяФорма);
    
        
    ИмяМакета         = "ВПФ Перемещение товаров";
    СинонимМакета     = "ВПФ Перемещение товаров - внешняя печатная форма";
    ТабличныйДокумент = Новый ТабличныйДокумент;
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ВПФ_ПеремещениеТоваров", "ВПФ Перемещение товаров", ТабличныйДокумент);
    
КонецПроцедуры
19 mmmarat
 
10.01.20
14:38
(15)

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

Еще раз внимательно посмотрите что вы пытаетесь сделать с переменной МассивОбъектов, полученной в параметрах процедуры.
20 mmmarat
 
10.01.20
14:39
(18) И удалите ПолучитьТаблицуКоманд и ДобавитьКоманду. Они уже не нужны.

ТабличныйДокумент = Новый ТабличныйДокумент;

А это вам для примера написали. Замените на формирование печатной формы.
21 Фрэнки
 
10.01.20
14:51
(18) ну можно же в конце концов нагуглить уже готовые и статьи и видео и с картинками и как угодно.

вот одна из статей готовых
https://www.1s-up.ru/sozdanie-vneshnej-pechatnoj-formy-v-tipovyh-konfiguracijah-1s-8-3/
22 ttu174
 
10.01.20
14:54
да по одной из таких статей и делали форму, а что приводит к зависанию не понятно, помогите понять пожалуйста
23 ttu174
 
10.01.20
15:02
я просто первый раз форму делаю, поэтому не кидайте тапками
24 Фрэнки
 
10.01.20
15:14
Ну что первый - это понятно. Скорей всего, что без большого опыта в программировании, не только в 1С, но и вообще. Зависание конечно может произойти, т.к. вызываемые процедуры должны содержать корректно заполненные параметры. Вот тот же самый
ТабличныйДокумент = Новый ТабличныйДокумент;

И имена макетов... Там по статье пробежись до конца рассмотри, что в этих параметрах должно быть, чтоб сработало без ошибок.
25 mmmarat
 
10.01.20
15:17
(22)
     МассивОбъектов = Новый Соответствие();
     МассивОбъектов.Вставить("Документ.ПеремещениеТоваров", МассивОбъектов);

Вот это скорее всего приводит к зависанию.
26 ttu174
 
10.01.20
15:33
(25) а если это убрать, то выходит "Печатная форма не доступна"
27 Фрэнки
 
10.01.20
15:37
(26) макет еще нужно указать реальной строкой. Тогда выдаст пустой табличный документ.
28 Фрэнки
 
10.01.20
15:41
например, в статье, что выше ссылку указал

Макет = ПолучитьМакет("ПФ_MXL_СчетЗаказ");

Вот эта строка в параметрах Получить макет - это вставленный в саму обработку макет со своим именем (в статье он так назывался)
29 ttu174
 
11.01.20
21:42
Переписал код , теперь зависания нет, но если подключаю как внешнюю , то из документа выводится просто шаблон, а значения не заполняются, а если через файл-открыть, то заполняются, подскажите пожалуйста в чем может быть причина?

Код теперь такой





#Область ПрограммныйИнтерфейс

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

#КонецОбласти

////////////////////////////////////////////////////////////////////////////////


#Область Печать

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

        
        ТабличныйДокумент = Новый ТабличныйДокумент;
        ТабличныйДокумент = ПечатьТребованиеНакладнаяНовая(МассивОбъектов, ОбъектыПечати);
            
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "ТребованиеНакладнаяПеремещениеСОстатком",
            НСтр("ru = 'Накладная на перемещение'"),
            ТабличныйДокумент);
        
            
    //ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);
        
КонецПроцедуры


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

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

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

    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ТребованиеНакладнаяПеремещениеСОстатком";


    ПервыйДокумент = Истина;
    
    Для Каждого Ссылка Из МассивОбъектов Цикл
        
        Если Не ПервыйДокумент Тогда
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        
        ПервыйДокумент = Ложь;
        
        НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;

        Запрос       = Новый Запрос;
        Запрос.УстановитьПараметр("ТекущийДокумент",  СсылкаНаОбъект.Ссылка);
        Запрос.Текст = ТекстЗапроса;


        Шапка = Запрос.Выполнить().Выбрать();
        
        Шапка.Следующий();

        
        
        Запрос       = Новый Запрос;

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

            
            
            ТабличныйДокумент.Вывести(ОбластьМакета);


        КонецЦикла;

        

            ОбластьМакета         = Макет.ПолучитьОбласть("Итого");
            
            ОбластьМакета.Параметры.КоличествоВсего   = КоличествоВсего ;
            ТабличныйДокумент.Вывести(ОбластьМакета);

        

        
        ОбластьПодвал = Макет.ПолучитьОбласть("Подписи");
        
        ТабличныйДокумент.Вывести(ОбластьПодвал);

                
        ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Ссылка);

    КонецЦикла;
    Возврат ТабличныйДокумент;
    

КонецФункции // ПечатьТребованиеНакладнаяНовая()

#КонецОбласти
30 Фрэнки
 
11.01.20
22:36
(29) Я правильно догадываюсь, что специально под открытие обработки для ее отладки в виде обработки из файла на ее форме установлено поле, в котором нужно вручную выбирать СсылкаНаОбъект ?

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

Для Каждого Ссылка Из МассивОбъектов Цикл

и в этом случае я просто не вижу, где устанавливается СсылкаНаОбъект - получается, что после отладки, перед установкой в базу, нужно переприсвоить

Для Каждого Ссылка Из МассивОбъектов Цикл
    СсылкаНаОбъект = Ссылка;

з.ы не хватает опыта у Вас в программировании - стиля не хватает.
Там где-то на форме был же заполнен МассивОбъектов, так? Тогда в этом модуле не нужно использовать реквизиты обработки, а нужно задавать локальные переменные в контексте модуля, которые не позволят Вам запутаться в том, что откуда и куда берется :-)
Внимательней!
31 ttu174
 
13.01.20
15:34
Вроде получилось!
Не правильно было везде где написал СсылкаНаОбъект.   , поменял на Ссылка  , все заработало.
Спасибо всем большое!