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

31.05.16

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Акт за поставщика для ПТУ
.epf 13,04Kb ver:1.0.0.0
19
19 Скачать (1 SM) Купить за 1 850 руб.

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

Функция Печать() Экспорт
	// упрощенно
	Таб = Новый ТабличныйДокумент;
	Таб.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
	Таб.АвтоМасштаб = Ложь;
	Таб.МасштабПечати = 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

См. также

Производство готовой продукции (работ, услуг) Программист Пользователь Платформа 1С v8.3 Оперативный учет 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Управленческий учет Платные (руб)

Разработка “Пульт управления производством для 1С:УНФ” содержит цифровые инструменты и средства для производственного и технологического программного обеспечения автоматизации производства - подсистему Технологического контроля с АРМ Контролёра, Учет рекламации, АРМ Начальника производства, АРМ Рабочего цеха

36000 руб.

22.02.2022    19226    15    2    

28

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

22200 руб.

06.10.2023    16706    41    9    

75

Производство готовой продукции (работ, услуг) Учет доходов и расходов Бухгалтер Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Комплексная автоматизация 2.х Бухгалтерский учет Налоговый учет Платные (руб)

Данный отчет показывает себестоимость реализованной продукции в разузлованном виде, как с выделением входящих в нее полуфабрикатов любых уровней, так и свернутый до статей затрат и материалов, видов работ. Отчет работает независимо от метода оценки стоимости товаров и подходит для любых производственных компаний с многопередельным производством. Отчет можно использовать как в типовой 1С:ERP, так и в отраслевых решениях на ее базе (например, 1С:ERP Управление птицеводческим предприятием, Молокозавод и т.д.).Отчет подходит для анализа затрат на гособоронзаказы ГОЗ.

70000 руб.

30.11.2022    16476    25    28    

26

SALE! 20%

Загрузка и выгрузка в Excel Оптовая торговля Печатные формы Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы Платформа 1C v8.2 Конфигурации 1cv8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С одним нажатием. Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.). Не требует MS Office. Для поиска таблиц используются методы эвристического поиска. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д. Содержит модуль работы с электронной почтой и api-загрузчик отчетов о продажах маркетплейсов.

6000 5100 руб.

09.11.2016    237435    1072    904    

1010

Производство готовой продукции (работ, услуг) Учет доходов и расходов Бухгалтер Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Комплексная автоматизация 2.х Бухгалтерский учет Управленческий учет Платные (руб)

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

70000 руб.

08.12.2021    27433    26    73    

36

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

Автоматический обмен данными с системой ФГИС Меркурий из 1С через ВетИС API: загрузка данных по хозяйствующим субъектам, предприятиям; типов, групп, видов, наименований продукции, сопоставление данных и запись их в базу данных; создание на основании расходных документов транспортных партий, отправка на сервер, печать полученных ветеринарных свидетельств, запрос остатков складского журнала, проведение инвентаризаций, оформление производственных партий.

11500 руб.

08.12.2017    104944    237    110    

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