Акт выполненных работ за поставщика для документа Поступление товаров и услуг для Бухгалтерия предприятия 2.0 (2.0.65.30) с оптимизацией для пакетной печати

31.05.16

Задачи пользователя - Пакетная печать

По служебной необходимости пришлось делать с нуля ВПФ Акт за поставщика для БП 2.0.65 с условием оптимизации - а именно пакетный запрос, никаких обращений к базе через точку и прочим. Прилагаю первоначальную версию кода. Буду рад любым замечаниям и предложениям по оптимизации запроса и прочей критике.

Скачать файлы

Наименование Файл Версия Размер
Акт за поставщика для ПТУ
.epf 13,04Kb
19
.epf 1.0.0.0 13,04Kb 19 Скачать

Предлагаю начальную версию оптимального запроса и кода (из источника взят только макет). Начнем с того, что стандартные алгоритмы типовых конфигураций не оптимальны. Единственное, что пока не переписаны функции из модуля общего назначения для номера докмента и прочая мелочь в коде. Так, думаю, что для больших документов и тем более пачкой отправляемых на печать (в процессе разработки) многократные обращения к базе нежелательны:

Функция Печать() Экспорт
	// упрощенно
	Таб = Новый ТабличныйДокумент;
	Таб.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
	Таб.АвтоМасштаб = Ложь;
	Таб.МасштабПечати = 100;	
	
	
	Таб.ИмяПараметровПечати = "Акт_за_поставщика_ВПФ";
	Таб.ПолеСлева  = 10;
	Таб.ПолеСправа = 10;
	Таб.ПолеСверху = 10;
	Таб.ПолеСнизу  = 10;
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("ДокСсылка", СсылкаНаОбъект);
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Док.Номер,
	|	Док.Дата,
	|	ЕСТЬNULL(Док.Контрагент.НаименованиеПолное, ""<НЕ ЗАПОЛНЕН>"") КАК Исполнитель,
	|	ЕСТЬNULL(Док.Организация.НаименованиеПолное, ""<НЕ ЗАПОЛНЕН>"") КАК Заказчик,
	|	Док.СуммаДокумента
	|ИЗ
	|	Документ.ПоступлениеТоваровУслуг КАК Док
	|ГДЕ
	|	Док.Ссылка = &ДокСсылка
	|	И Док.Проведен
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ТЧДок.НомерСтроки КАК НомерСтроки,
	|	ВЫРАЗИТЬ(ТЧДок.Содержание КАК СТРОКА(1000)) КАК Товар,
	|	ТЧДок.Цена,
	|	ТЧДок.Сумма КАК Сумма,
	|	ТЧДок.СуммаНДС КАК СуммаНДС,
	|	ТЧДок.Количество КАК Количество,
	|	ЕСТЬNULL(ТЧДок.Номенклатура.БазоваяЕдиницаИзмерения.НаименованиеПолное, ""<НЕ УКАЗАНА>"") КАК ЕдиницаИзмерения,
	|	ВЫБОР
	|		КОГДА ТЧДок.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.БезНДС)
	|			ТОГДА 0
	|		ИНАЧЕ 1
	|	КОНЕЦ КАК ПометкаНДС
	|ИЗ
	|	Документ.ПоступлениеТоваровУслуг.Услуги КАК ТЧДок
	|ГДЕ
	|	ТЧДок.Ссылка = &ДокСсылка
	|
	|УПОРЯДОЧИТЬ ПО
	|	НомерСтроки
	|ИТОГИ
	|	МАКСИМУМ(НомерСтроки),
	|	СУММА(Сумма),
	|	СУММА(СуммаНДС),
	|	СУММА(Количество),
	|	МАКСИМУМ(ПометкаНДС)
	|ПО
	|	ОБЩИЕ";
	РезультатПакетногоЗапроса = Запрос.ВыполнитьПакет();
	РезультатШапкаДокумента = РезультатПакетногоЗапроса[0];
	РезультатТЧДокумента = РезультатПакетногоЗапроса[1];
	Если РезультатШапкаДокумента.Пустой() Тогда
		Сообщить("Ошибка при печати документа "+СсылкаНаОбъект+". Возможно, документ не проведен или помечен на удаление", СтатусСообщения.Важное);
		Возврат Таб;
	КонецЕсли;	
	Если РезультатТЧДокумента.Пустой() Тогда
		Сообщить("Ошибка при печати документа "+СсылкаНаОбъект+". Документ АКТ должен содержать хотя бы одну услугу (таб. часть 'Услуги')", СтатусСообщения.Важное);
		Возврат Таб;
	КонецЕсли;	
	
	Макет = ПолучитьМакет("Акт");
	ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ВыборкаШапкаДокумента = РезультатШапкаДокумента.Выбрать();
	ВыборкаШапкаДокумента.Следующий();
	ОбластьЗаголовок.Параметры.ТекстЗаголовка = "Акт № "+
	ОбщегоНазначения.ПолучитьНомерНаПечать(СсылкаНаОбъект)+
	" от "+Формат(ВыборкаШапкаДокумента.Дата, "ДЛФ=DD");
	Таб.Вывести(ОбластьЗаголовок);
	
	ОбластьИсполнитель = Макет.ПолучитьОбласть("Поставщик");
	ОбластьИсполнитель.Параметры.ПредставлениеПоставщика = ВыборкаШапкаДокумента.Исполнитель; // Исполнитель
	Таб.Вывести(ОбластьИсполнитель);
	
	ОбластьЗаказчик = Макет.ПолучитьОбласть("Покупатель");
	ОбластьЗаказчик.Параметры.ПредставлениеПолучателя = ВыборкаШапкаДокумента.Заказчик; // Заказчик
	Таб.Вывести(ОбластьЗаказчик);
	
	ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
	Таб.Вывести(ОбластьШапкаТаблицы);
	
	ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
	ВыборкаИтоги = РезультатТЧДокумента.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	ВыборкаИтоги.Следующий();
	
	Выборка = ВыборкаИтоги.Выбрать();
	Пока Выборка.Следующий() Цикл
		Если НЕ Таб.ПроверитьВывод(ОбластьСтрока) Тогда
			Таб.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		ОбластьСтрока.Параметры.Заполнить(Выборка);
		Таб.Вывести(ОбластьСтрока);
	КонецЦикла;
	
	ОбластьИтого = Макет.ПолучитьОбласть("Итого");
	ОбластьИтого.Параметры.Всего = ""+ Формат(ВыборкаШапкаДокумента.СуммаДокумента, "ЧЦ=15; ЧДЦ=2");	
	Таб.Вывести(ОбластьИтого);
	
	ОбластьИтогоНДС = Макет.ПолучитьОбласть("ИтогоНДС");	
	Если ВыборкаИтоги.ПометкаНДС = 0 Тогда
		ОбластьИтогоНДС.Параметры.НДС = "Без НДС"; // В документе по всем строкам установлено БезНДС
	Иначе
		ОбластьИтогоНДС.Параметры.НДС = "В том числе НДС";
		ОбластьИтогоНДС.Параметры.ВсегоНДС = ""+ Формат(ВыборкаИтоги.СуммаНДС, "ЧЦ=15; ЧДЦ=2");
	КонецЕсли;	
	Таб.Вывести(ОбластьИтогоНДС);
	
	ОбластьСуммаПрописью = Макет.ПолучитьОбласть("СуммаПрописью");
	ОбластьСуммаПрописью.Параметры.ИтоговаяСтрока = "Всего оказано услуг "+ВыборкаИтоги.Количество+" на сумму "+
	Формат(ВыборкаШапкаДокумента.СуммаДокумента, "ЧЦ=15; ЧДЦ=2")+" руб.";
	ОбластьСуммаПрописью.Параметры.СуммаПрописью = ""+ПолучитьДеньгиПрописью(ВыборкаШапкаДокумента.СуммаДокумента);
	Таб.Вывести(ОбластьСуммаПрописью);
	
	ОбластьПодписи = Макет.ПолучитьОбласть("Подписи");
	ОбластьПодписи.Параметры.ДолжностьИНазваниеОрганизации = ""+ВыборкаШапкаДокумента.Исполнитель;
	Таб.Вывести(ОбластьПодписи);
	
	Возврат Таб;
	
КонецФункции

Функция ПолучитьДеньгиПрописью(парСумма)
	ФормСтрока = "Л = ru_RU; ДП = Истина";
	ПарПредмета="рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2";    
	Возврат ЧислоПрописью(парСумма, ФормСтрока, ПарПредмета);
КонецФункции

Исходный документ ПТУ для тестирования, где все строки табличной части услуги без НДС:

 

Внешний вид печатной формы акта и документ для тестирования следующие (без НДС):

 

 

Буду рад замечаниям и предложениям тех, кто тоже занялся оптимизацией запросов и кода.

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

ВПФ Акт выполненных работ Бухгалтерия предприятия 2.0 оптимизация запросов пакетная печать как сделать ВПФ пакетный запрос печатная форма Акт акт за поставщика БП 2.0 Бухгалтерия 2.0.65

См. также

Конфигурация "Весовая ред. 3.0" для Платформы 8.3

Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Учет ОС и НМА Логистика, склад и ТМЦ Торговля и логистика Платформа 1С v8.3 Сельское хозяйство и рыболовство Строительство Горнодобывающая промышленность Розничная и сетевая торговля (FMCG) Транспорт, автопарки, такси Оптовая торговля, дистрибуция, логистика Лесное и деревообрабатывающее хозяйство Управленческий учет Платные (руб)

Позволяет автоматизировать процесс взвешивания ТМЦ в организациях, осуществляющих приемку и отгрузку различным транспортом, для ведения складского учета и контроля остатков на складах. Конфигурация позволяет фиксировать вес вручную, напрямую с весов, а также управлять дополнительным оборудованием и контролировать движение транспорта.

30000 руб.

24.03.2015    119958    57    111    

127

Обмен с системой Меркурий через Web + Ветис.API для любых конфигураций (универсальная конфигурация Хамелеон Меркурий)

Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Обмен с ГосИС Платформа 1С v8.3 Конфигурации 1cv8 Сельское хозяйство и рыболовство Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Пищевая промышленность Россия Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная конфигурация Хамелеон Меркурий для взаимодействия с системой Меркурий(тестовый+рабочий+демо контур) может использоваться для интеграции в любую конфигурацию на базе 1С, версии ПРОФ и выше. Основное отличие от других решений - работа через веб-интерфейс и API 2.0(API 2.1). Для удобства реализован общий интерфейс в виде обработки, схожей с интерфейсом Меркурий, но возможностей гораздо больше, т.к. при интеграции в Вашу учетную систему, можно на основании Ваших справочников и документов, создавать соответствующие документы и справочники в системе Меркурий и наоборот.

104000 руб.

08.11.2017    119570    287    135    

390

УТ 11, КА 2, ERP 2: Настраиваемые под каждую организацию печать и подпись ответственных лиц в печатных формах (ТОРГ-12, Счёт-фактура, УПД, УКД, Заказ клиента, Акт сверки, М-15 и др.)

Печатные формы Взаиморасчеты Оптовая торговля Производство готовой продукции (работ, услуг) Акт сверки Оперативный учет Управляемые формы 1С:Управление торговлей 11 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Задайте для каждой организации свою печать и для каждого физического лица свою подпись. Выберите в документе печатную форму "... с печатью и подписью" - и автоматически сформируется табличный документ с печатью и подписями той организации и ответственных лиц, которые указаны в документе.

12000 руб.

13.03.2018    53870    168    74    

100

Универсальная печать по шаблонам Word (Печать договоров из 1С БП 3, УНФ 1.6, ЗУП 3, УТ 11, КА 2, ERP 2)

Печатные формы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Научите вашу 1C печатать из 1С в файл Word (Например: трудовые договоры, договоры с контрагентами, спецификации, дополнительные соглашения, приказы, коммерческие предложения, акты, накладные, карточки партнера или любого справочника и многие другие). Универсальная печать предназначена для формирования печатных форм на основе шаблонов в формате Word из любой конфигурации 1С. С помощью данного инструмента можно самостоятельно заполнить шаблон реквизитами справочника или документа 1С и сформировать печатные формы на основании ссылки на любой объект.

5400 руб.

08.10.2019    40182    130    86    

120

Путевой лист грузового автомобиля в 1С:Бухгалтерия 3.0

Печатные формы Учет рабочего времени Платформа 1С v8.3 Бухгалтерский учет Оперативный учет 1С:Бухгалтерия 3.0 Транспорт, автопарки, такси Россия Бухгалтерский учет Платные (руб)

Путевой лист грузового автомобиля в 1С:Бухгалтерия 3.0 - заполнить, распечатать, сохранить. Вы можете не только внести всю информацию и распечатать путевой лист грузового автомобиля в 1С, но и повторно использовать ранее введенные данные спустя любое время - данные путевого листа сохраняются в "1С:Бухгалтерия 3.0" без каких-либо доработок.

3600 руб.

23.08.2019    50819    149    61    

138
Оставьте свое сообщение