Группировка строк в печатной форме счета при отгрузке с разных складов. УТ 11.5

08.10.25

Разработка - Универсальные функции

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

В модуле менеджера для документа "ЗаказКлиента" добавляем в расширение функцию "ПолучитьДанныеДляПечатнойФормыСчетаНаОплату"

Для редактирования РезультатЗапроса выгружается в ТаблицуЗначений, которая сворачивается по нужным полям, а потом преобразуется снова в РезультатЗапроса.

Можно было, конечно, отредактировать процедуру, в которой данные уже в виде ТаблицыЗначений, но мне захотелось вот так. Возможно, есть более удобные и эффективные способы, буду рад почитать комментарии)
 

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

 

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3318    Abysswalker    7    

44

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    6169    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    48208    dimanich70    83    

169

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7257    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    60141    atdonya    31    

69

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9034    ke.92@mail.ru    17    

68
Для отправки сообщения требуется регистрация/авторизация