Форум программистов, компьютерный форум, киберфорум
Наши страницы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
Augusto
70 / 70 / 1
Регистрация: 18.12.2012
Сообщений: 390
1

ВПФ для РеализацииТоваровУслуг

10.04.2013, 12:31. Просмотров 3674. Ответов 4
Метки нет (Все метки)

Здравствуйте! Делаю ВПФ для Реализации. Конфа БП 3.0. Раньше никогда не работал с упр. приложением. Вобщем алгоритм переноса макетов во внешние понял, но где-то накосячил. Делал по факу в инете. Вот код.
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
 
 
Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    
    // Теперь зададим имя, под которым ВПФ будет зарегистрирована в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("Наименование", "Транспортная накладная (внешняя)");
    
    // Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
 
    // Следующие два параметра играют больше информационную роль, т.е. это то, что будет видеть пользователь в информации к обработке
    ПараметрыРегистрации.Вставить("Версия", "1.0");    
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма 'Транспортная накладная' к документу Реализация товаров и услуг");
    
    // Создадим таблицу команд (подробнее смотрим ниже)
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    
    // Добавим команду в таблицу
    ДобавитьКоманду(ТаблицаКоманд, "Транспортная накладная", "Транспортная накладная (внешняя)", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    
    // Сохраним таблицу команд в параметры регистрации обработки
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    // Теперь вернем системе наши параметры
    Возврат ПараметрыРегистрации;
КонецФункции
 
Функция ПолучитьТаблицуКоманд()
 
   // Создадим пустую таблицу команд и колонки в ней
   Команды = Новый ТаблицаЗначений;
 
   // Как будет выглядеть описание печатной формы для пользователя
   Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); 
 
   // Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
   Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
 
   // Тут задается, как должна вызваться команда обработки
   // Возможные варианты:
   // - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
   // - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
   // - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
   Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
 
   // Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
   Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
 
   // Для печатной формы должен содержать строку ПечатьMXL 
   Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
   Возврат Команды;
КонецФункции
 
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
  // Добавляем команду в таблицу команд по переданному описанию.
  // Параметры и их значения можно посмотреть в функции ПолучитьТаблицуКоманд
  НоваяКоманда = ТаблицаКоманд.Добавить();
  НоваяКоманда.Представление = Представление;
  НоваяКоманда.Идентификатор = Идентификатор;
  НоваяКоманда.Использование = Использование;
  НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
  НоваяКоманда.Модификатор = Модификатор;
 
КонецПроцедуры
 
 
Функция РазложитьМассивПоТипамОбъектов(МассивОбъектов)
    СтруктураТипов = Новый Структура;
    
    Для Каждого Объект Из МассивОбъектов Цикл
        
        Если ТипЗнч(Объект)     = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
            Если НЕ СтруктураТипов.Свойство("РеализацияТоваровУслуг") Тогда
                МассивРеализаций    = Новый Массив;
                СтруктураТипов.Вставить("РеализацияТоваровУслуг", МассивРеализаций);
            КонецЕсли;
            СтруктураТипов.РеализацияТоваровУслуг.Добавить(Объект);
        ИначеЕсли ТипЗнч(Объект)    = Тип("ДокументСсылка.ПередачаТоваров") Тогда
            Если НЕ СтруктураТипов.Свойство("ПередачаТоваров") Тогда
                МассивПеремещений   = Новый Массив;
                СтруктураТипов.Вставить("ПередачаТоваров", МассивПеремещений);
            КонецЕсли;
            СтруктураТипов.ПередачаТоваров.Добавить(Объект);
        КонецЕсли;
        
    КонецЦикла;
    Возврат СтруктураТипов;
КонецФункции
Тут формируем саму ВПФ:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// Формирует и возвращает текст запроса для выборки данных,
// необходимых для формирования печатной формы транспортной накладной
Функция ПолучитьТекстЗапросаДляФормированияПечатнойФормыТранспортнойНакладной()
    
    ТекстЗапроса =
    "ВЫБРАТЬ
    |   РеализацияТоваровУслуг.Ссылка,
    |   РеализацияТоваровУслуг.Дата,
    |   РеализацияТоваровУслуг.Номер,
    |   РеализацияТоваровУслуг.Организация,
    |   ВЫБОР
    |       КОГДА РеализацияТоваровУслуг.Грузополучатель = &ПустойКонтрагент
    |           ТОГДА РеализацияТоваровУслуг.Контрагент
    |       ИНАЧЕ РеализацияТоваровУслуг.Грузополучатель
    |   КОНЕЦ КАК Грузополучатель,
    |   ВЫБОР
    |       КОГДА РеализацияТоваровУслуг.Грузоотправитель = &ПустойКонтрагент
    |           ТОГДА РеализацияТоваровУслуг.Организация
    |       ИНАЧЕ РеализацияТоваровУслуг.Грузоотправитель
    |   КОНЕЦ КАК Грузоотправитель,
    |   РеализацияТоваровУслуг.Организация КАК Руководители,
    |   РеализацияТоваровУслуг.Контрагент КАК Покупатель,
    |   РеализацияТоваровУслуг.Контрагент КАК Контрагент,
    |   РеализацияТоваровУслуг.Контрагент КАК ЗаказчикПеревозок,
    |   РеализацияТоваровУслуг.ДоговорКонтрагента.Представление КАК Основание,
    |   РеализацияТоваровУслуг.ДатаЗаявки,
    |   РеализацияТоваровУслуг.НаименованиеГруза,
    |   РеализацияТоваровУслуг.УказанияГрузоотправителя,
    |   РеализацияТоваровУслуг.РегистрационныйНомер,
    |   РеализацияТоваровУслуг.Перевозчик,
    |   РеализацияТоваровУслуг.МассаГруза,
    |   РеализацияТоваровУслуг.ГрузПринял,
    |   РеализацияТоваровУслуг.Водитель,
    |   РеализацияТоваровУслуг.СтоимостьУслугПеревозчика,
    |   РеализацияТоваровУслуг.АдресМестаПогрузки
    |ИЗ
    |   Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |ГДЕ
    |   РеализацияТоваровУслуг.Ссылка В(&МассивДокументов)";
        
    Возврат ТекстЗапроса;
КонецФункции
 
// Получить данные объектов для печати транспортной накладной
//
// ВХОДЯЩИЕ:
//   МассивОбъектов  - Массив    - Массив ссылок на объекты которые нужно распечатать
//
// Возвращаемое значение:
//  Структура с данными объектов для печати транспортной накладной.
//
Функция ПолучитьДанныеДляПечатнойФормыТранспортнаяНакладная(МассивОбъектов) Экспорт
    ВалютаРегламентированногоУчета   = Константы.ВалютаРегламентированногоУчета.Получить();
 
    Запрос = Новый Запрос();
    Запрос.УстановитьПараметр("МассивДокументов", МассивОбъектов);
    Запрос.УстановитьПараметр("ПустойКонтрагент", Справочники.Контрагенты.ПустаяСсылка());
    
    Запрос.Текст = ПолучитьТекстЗапросаДляФормированияПечатнойФормыТранспортнойНакладной();
    
    ТаблицаРезультата = Запрос.Выполнить().Выгрузить();
    
    Возврат ТаблицаРезультата;
    
КонецФункции
 
 
// Интерфейс для запуска логики обработки
//
// Параметры
// МассивОбъектов - Массив - массив ссылок на объекты печати
// КоллекцияПечатныхФорм - ТаблицаЗначений - таблица содержащая информацию по печатным формам
// ОбъектыПечати - СписокЗначений - ссылки на объекты печати
// ПараметрыВывода - Структура - дополнительные параметры вывода (печать покомплектно и др.)
//
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ТранспортнаяНакладная") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
                        КоллекцияПечатныхФорм,
                        "ТранспортнаяНакладная", "Транспортная накладная",
                        СформироватьПечатнуюФормуТранспортнойНакладной(МассивОбъектов, ОбъектыПечати));
    КонецЕсли;
КонецПроцедуры
 
 
Функция СформироватьПечатнуюФормуТранспортнойНакладной(МассивОбъектов, ОбъектыПечати)
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.АвтоМасштаб = Истина;
    ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    
    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ТРАНСПОРТНАЯ_НАКЛАДНАЯ";
    
    НомерТипаДокумента = 0;
    СтруктураТипов = РазложитьМассивПоТипамОбъектов(МассивОбъектов);
    
    Для Каждого СтруктураОбъектов Из СтруктураТипов Цикл
        
        ДанныеДляПечати = ПолучитьДанныеДляПечатнойФормыТранспортнаяНакладная(СтруктураОбъектов.Значение);
        
        ЗаполнитьТабличныйДокументТН(
        ТабличныйДокумент,
        ДанныеДляПечати,
        ОбъектыПечати
        );
        
    КонецЦикла;
    
    Возврат ТабличныйДокумент;
КонецФункции
Выдает ошибку {ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(149)}: В обработчике печати не был сформирован табличный документ для: Транспортная накладная (внешняя)
ВызватьИсключение(ТекстСообщенияОбОшибке);

Я так понял, косяк где-то тут
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Функция СформироватьПечатнуюФормуТранспортнойНакладной(МассивОбъектов, ОбъектыПечати)
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.АвтоМасштаб = Истина;
    ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    
    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ТРАНСПОРТНАЯ_НАКЛАДНАЯ";
    
    НомерТипаДокумента = 0;
    СтруктураТипов = РазложитьМассивПоТипамОбъектов(МассивОбъектов);
    
    Для Каждого СтруктураОбъектов Из СтруктураТипов Цикл
        
        ДанныеДляПечати = ПолучитьДанныеДляПечатнойФормыТранспортнаяНакладная(СтруктураОбъектов.Значение);
        
        ЗаполнитьТабличныйДокументТН(
        ТабличныйДокумент,
        ДанныеДляПечати,
        ОбъектыПечати
        );
        
    КонецЦикла;
    
    Возврат ТабличныйДокумент;
КонецФункции
либо в сведениях о внешней обработке
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2013, 12:31
Ответы с готовыми решениями:

Из модуля ВПФ открыть форму ВПФ
Добрый день. Подскажите каким макаром открыть форму внешней печтаной формы (далее ВПФ) из модуля...

ВПФ для ПТУ
Здравствуйте, уважаемые форумчане. Такой вопрос - надо сделать доп форму в 11 УТ, чтобы там были и...

Создание ВПФ Счет на оплату для УТ 11
Тренируюсь на создании ВПФ. Делаю Счет на оплату для УТ 11 под УП. Дошел до момента //Вывести...

Нужна помощь в создании ВПФ для УТ 8.1 ред.10.3 - Расходная накладная
Необходимо создать для УТ 8.1 (версия 10.3.1.17) внешнюю печатную форму для документа «Реализация...

ВПФ Счет-фактуры
Проблема с печатной формой. Выводится на 2-ую страницу шапка таблицы после строки (на скрине...

4
duk337
2950 / 1762 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
10.04.2013, 13:58 2
отладчик у Вас, а не здесь
0
Augusto
70 / 70 / 1
Регистрация: 18.12.2012
Сообщений: 390
10.04.2013, 14:08  [ТС] 3
а как ВПФ отлаживать? пробовал качать обработку для отладки - она косячная оказалась
0
duk337
2950 / 1762 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
10.04.2013, 15:30 4
уберите косяки. Если система ругается, это не значит, что она не откроет обработку. Синтакс-контроль - и вперёд
0
Augusto
70 / 70 / 1
Регистрация: 18.12.2012
Сообщений: 390
10.04.2013, 17:13  [ТС] 5
все, решил проблему
0
10.04.2013, 17:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2013, 17:13

ВПФ Счет-Фактура для Бух 3
Нужна внешняя форма-счет-фактура выданная с договором покупателя в шапке документа конфигурация...

ВПФ
теперь нужно тоже самое но только на 8.3. Кто может помочь? Добавлено через 7 часов 10 минут...

УТ 11, создание ВПФ ТТН
Всем привет! Помогите пожалуйста сделать внешнюю печатную форму "Товарно-транспортная...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru