Добрый день. подскажите пожалуйста, есть печатная форма которая собирает табличные части из нескольких документ и выводит на печать "АКТ Списания", подскажите как вывести на печатную форму эти строки с условием, если номенклатура одинаковая то складывать ее в одну строку.
ДвиженияДокументов = РезультатЗапроса[1].Выгрузить();
ВыборкаДокументы = РезультатЗапроса[2].Выбрать();
ВыборкаМатериалы = РезультатЗапроса[3].выбрать();
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДокумент.Автомасштаб = Истина;
ТабДокумент.ПолеСлева = 5;
ТабДокумент.ПолеСправа = 0;
ТабДокумент.ИмяПараметровПечати = "ПараметрыПечати_АктСписанияМЗ_0504230";
Макет = ПолучитьМакет("ПФ_MXL_АктСписанияМЗ0504230_52н");;
ОбластьМакетаЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьМакетаШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьМакетаСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьМакетаИтого = Макет.ПолучитьОбласть("Итого");
ОбластьМакетаПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьМакетаКомиссия = Макет.ПолучитьОбласть("Комиссия");
ОбластьМакетаДата = Макет.ПолучитьОбласть("Дата");
ОбластьМакетаЗаключение1 = Макет.ПолучитьОбласть("Заключение1");
ОбластьМакетаЗаключение2 = Макет.ПолучитьОбласть("Заключение2");
ЕстьДопОбластиКомиссия = Макет.Области.Найти("Комиссия1") <> Неопределено;
МассивДопОбластейКомиссия = Новый Массив;
Если ЕстьДопОбластиКомиссия Тогда
МассивДопОбластейКомиссия.Добавить(Макет.ПолучитьОбласть("Комиссия1"));
МассивДопОбластейКомиссия.Добавить(Макет.ПолучитьОбласть("Комиссия2"));
МассивДопОбластейКомиссия.Добавить(Макет.ПолучитьОбласть("Комиссия3"));
МассивДопОбластейКомиссия.Добавить(Макет.ПолучитьОбласть("Комиссия4"));
МассивДопОбластейКомиссия.Добавить(ОбластьМакетаКомиссия);
Иначе
МассивДопОбластейКомиссия.Добавить(ОбластьМакетаКомиссия);
КонецЕсли;
ПервыйДокумент = Истина;
СтруктураОтбора = Новый Структура("Номенклатура, СчетКт, КПСКт, Количество");
ВыборкаДокументы.Следующий();
Если Не ПервыйДокумент Тогда
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;
ОбластьМакетаЗаголовок.Параметры.Заполнить(ВыборкаДокументы);
ДанныеДиректора = Новый Структура("СсылкаНаОбъект, Период, Фамилия, Имя, Отчество",
ВыборкаДокументы.ДиректорСсылка, ВыборкаДокументы.ТекстДата);
Справочники.Контрагенты.ПолучитьДанныеКонтрагента(ДанныеДиректора, Истина);
ДанныеЦМО = Новый Структура("СсылкаНаОбъект, Период, Фамилия, Имя, Отчество",
ВыборкаДокументы.ЦМО, ВыборкаДокументы.ТекстДата);
Справочники.Контрагенты.ПолучитьДанныеКонтрагента(ДанныеЦМО, Истина);
ГлавныйБухгалтер = ОрганизационнаяСтруктураКлиентСервер.ОтветственноеЛицоОрганизации(
Перечисления.ОтветственныеЛицаОрганизаций.ГлавныйБухгалтер, ВыборкаДокументы.Организация,
ВыборкаДокументы.ТекстДата, ВыборкаДокументы.ПодразделениеОтправитель);
ДанныеГлБухгалтера = Новый Структура("СсылкаНаОбъект, Период, Фамилия, Имя, Отчество",
ГлавныйБухгалтер.ОтветственноеЛицоСсылка, ВыборкаДокументы.ТекстДата);
Справочники.Сотрудники.ПолучитьДанныеСотрудника(ДанныеГлБухгалтера, Истина);
ПараметрыОтметкиБухгалтерии = Новый Структура;
ПараметрыОтметкиБухгалтерии.Вставить("Дата", Формат(ВыборкаДокументы.ТекстДата,"ДФ='MMMM yyyy'"));
ПараметрыОтметкиБухгалтерии.Вставить("ФИОГлавныйБухгалтер",
КорреспондентыКлиентСервер.ФИО(ДанныеГлБухгалтера));
Для каждого ТекОбластьКомиссия Из МассивДопОбластейКомиссия Цикл
ТекОбластьКомиссия.Параметры.Заполнить(ПараметрыОтметкиБухгалтерии);
КонецЦикла;
СтрокаКомиссия = "";
ВыборкаКомиссия = ВыборкаДокументы.СоставКомиссии.Выбрать();
ОбластьКомиссия = СформироватьОбластьКомиссия(
ВыборкаДокументы, ВыборкаКомиссия, МассивДопОбластейКомиссия, 3, СтрокаКомиссия, Истина);
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("Директор", КорреспондентыКлиентСервер.ФИО(ДанныеДиректора, Истина));
СтруктураПараметров.Вставить("МОЛ", "" + ДанныеЦМО.Фамилия + " " + ДанныеЦМО.Имя + " "
+ ДанныеЦМО.Отчество);
СтруктураПараметров.Вставить("ДатаПриказа", ?(ЗначениеЗаполнено(ВыборкаДокументы.ТекстДатаПриказа),
Формат(ВыборкаДокументы.ТекстДатаПриказа, "ДЛФ=DD"),
"_______________"));
СтруктураПараметров.Вставить("НомерПриказа", ?(ЗначениеЗаполнено(ВыборкаДокументы.ТекстНомерПриказа),
СокрЛП(ВыборкаДокументы.ТекстНомерПриказа),
"_______________"));
СтруктураПараметров.Вставить("Номер", РегистрыСведений.НастройкиПечатиПрефиксаНомера
.ПолучитьНомерДляПечатиПоСсылкеИдентификаторуДокумента(
"АктСписанияМЗ", ВыборкаДокументы.ТекстНомер));
СтруктураПараметров.Вставить("Дата", Формат(ВыборкаДокументы.ТекстДата, "ДЛФ=D"));
СтруктураПараметров.Вставить("пДатаЗаголовка1", Формат(ЭтотОбъект.ДатаНачало, "ДЛФ=DD"));
СтруктураПараметров.Вставить("пДатаЗаголовка2", Формат(ЭтотОбъект.ДатаКонец, "ДЛФ=DD"));
//СтруктураПараметров.Вставить("ДатаЗаголовка", Формат(ВыборкаДокументы.ТекстДата, "ДЛФ=DD"));
СтруктураПараметров.Вставить("ЧленыКомиссии", СтрокаКомиссия);
ОбластьМакетаЗаголовок.Параметры.Заполнить(СтруктураПараметров);
ТабДокумент.Вывести(ОбластьМакетаЗаголовок);
ТабДокумент.Вывести(ОбластьМакетаШапка);
ОбластьЗаключение = Новый ТабличныйДокумент;
ВыведеноСтрокЗаключения = ВывестиДлиннуюСтроку(ВыборкаДокументы.ЗаключениеКомиссии,
ОбластьЗаключение,
ОбластьМакетаЗаключение1,
ОбластьМакетаЗаключение2,
"ЗаключениеЯчейка1",
"ЗаключениеЯчейка2");
Для Счетчик = ВыведеноСтрокЗаключения + 1 По 3 Цикл
ПустаяОбластьМакетаЗаключение2 = Макет.ПолучитьОбласть("Заключение2");
ОбластьЗаключение.Вывести(ПустаяОбластьМакетаЗаключение2);
КонецЦикла;
//Ошибка начинается отсюдаа
//СтрокиДвижений = ДвиженияДокументов.НайтиСтроки(Новый Структура("Регистратор", ВыборкаДокументы.Ссылка));
ТаблицаДвижений = ДвиженияДокументов.Скопировать();
//ВыборкаМатериалы = ВыборкаДокументы.Материалы.Выбрать();
СуммаИтого = 0;
КоличествоИтого = 0;
КоличествоСтрок = ВыборкаМатериалы.Количество();
Пока ВыборкаМатериалы.Следующий() Цикл
ОбластьМакетаСтрока.Параметры.Заполнить(ВыборкаМатериалы);
СтруктураПараметров = Новый Структура("Цена, Сумма, СчетДебета, СчетКредита");
Цена = 0;
Сумма = 0;
СтруктураОтбора.Номенклатура = ВыборкаМатериалы.НоменклатураСсылка;
СтруктураОтбора.СчетКт = ВыборкаМатериалы.СчетУчета;
СтруктураОтбора.КПСКт = ВыборкаМатериалы.КПС;
СтруктураОтбора.Количество = ВыборкаМатериалы.Количество;
//ЗаполнитьЗначенияСвойств(СтруктураОтбора, ВыборкаМатериалы);
//Ошибка начинается отсюдаа-----------------------------------------------------------------------------------------------
//ТекущиеДвижения = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаДвижений);
ТекущиеДвижения = ТаблицаДвижений.НайтиСтроки(СтруктураОтбора);//////////не работает отбор!!!!!!!!!!!!!!!
Если ТекущиеДвижения.Количество() > 0 Тогда
ТекущееДвижение = ТекущиеДвижения[0];
Если ТекущееДвижение.Количество <> 0 Тогда
Цена = Окр(ТекущееДвижение.Сумма / ТекущееДвижение.Количество, 2);
Иначе
Цена = 0;
КонецЕсли;
Если ВыборкаМатериалы.Количество = ТекущееДвижение.Количество Тогда
Сумма = ТекущееДвижение.Сумма;
ИначеЕсли ВыборкаМатериалы.Количество < ТекущееДвижение.Количество Тогда
Сумма = ВыборкаМатериалы.Количество * Цена;
Иначе
Сумма = 0;
КонецЕсли;
УчтенноеКоличество = Мин(ТекущееДвижение.Количество, ВыборкаМатериалы.Количество);
ТекущееДвижение.Количество = ТекущееДвижение.Количество - УчтенноеКоличество;
ТекущееДвижение.Сумма = ТекущееДвижение.Сумма - Сумма;
Если ЗначениеЗаполнено(ТекущееДвижение.СчетДт) Тогда
СтруктураПараметров.СчетДебета = УправлениеПечатьюБГУ.ПредставлениеРабочегоСчета(
ТекущееДвижение.КПСДт, ТекущееДвижение.КФО, ТекущееДвижение.СчетДт, ТекущееДвижение.КЭКДт,,)
КонецЕсли;
СтруктураПараметров.СчетКредита = УправлениеПечатьюБГУ.ПредставлениеРабочегоСчета(
ТекущееДвижение.КПСКт, ТекущееДвижение.КФО, ТекущееДвижение.СчетКт, ТекущееДвижение.КЭККт,,);
КонецЕсли;
СтруктураПараметров.Цена = Формат(Цена, "ЧДЦ=2");
СтруктураПараметров.Сумма = Формат(Сумма, "ЧДЦ=2");
ОбластьМакетаСтрока.Параметры.Заполнить(СтруктураПараметров);
Если ВыборкаМатериалы.НомерСтроки <> КоличествоСтрок Тогда
Если Не ТабДокумент.ПроверитьВывод(ОбластьМакетаСтрока) Тогда
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ТабДокумент.Вывести(ОбластьМакетаШапка);
КонецЕсли;
Иначе
Области = Новый Массив;
Области.Добавить(ОбластьМакетаСтрока);
Области.Добавить(ОбластьМакетаИтого);
Области.Добавить(ОбластьМакетаПодвал);
Области.Добавить(ОбластьЗаключение);
Области.Добавить(ОбластьКомиссия);
Области.Добавить(ОбластьМакетаДата);
Если Не ТабДокумент.ПроверитьВывод(ОбластьМакетаСтрока) Тогда
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ТабДокумент.Вывести(ОбластьМакетаШапка);
КонецЕсли;
КонецЕсли;
СуммаИтого = СуммаИтого + Сумма;
КоличествоИтого = КоличествоИтого + ВыборкаМатериалы.Количество;
ТабДокумент.Вывести(ОбластьМакетаСтрока);
КонецЦикла;
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("КоличествоИтого", КоличествоИтого);
СтруктураПараметров.Вставить("СуммаИтого", Формат(СуммаИтого, "ЧДЦ=2"));
СтруктураПараметров.Вставить("СуммаИтогоПрописью",
ОбщегоНазначенияБГУ.СформироватьСуммуПрописью(СуммаИтого, Неопределено));
ОбластьМакетаИтого.Параметры.Заполнить(СтруктураПараметров);
ТабДокумент.Вывести(ОбластьМакетаИтого);
ОбластьМакетаПодвал.Параметры.Заполнить(СтруктураПараметров);
ТабДокумент.Вывести(ОбластьМакетаПодвал);
ТабДокумент.Вывести(ОбластьЗаключение);
МассивОбластейПроверки = Новый Массив;
МассивОбластейПроверки.Добавить(ОбластьКомиссия);
МассивОбластейПроверки.Добавить(ОбластьМакетаДата);
Если Не ТабДокумент.ПроверитьВывод(МассивОбластейПроверки) Тогда
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабДокумент.Вывести(ОбластьКомиссия);
ТабДокумент.Вывести(ОбластьМакетаДата);
// В табличном документе зададим имя области, в которую был
// выведен объект. Нужно для возможности печати покомплектно.
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДокумент,
НомерСтрокиНачало, ОбъектыПечати, ВыборкаДокументы.Ссылка);
//Для каждого ТекДвижение Из ТаблицаДвижений Цикл
//
// ДвиженияДокументов.Удалить(ТекДвижение);
//
//КонецЦикла;
Возврат ТабДокумент;
ПоказатьПо теме из базы знаний
- Универсальный передаточный документ для Управление торговлей релиза 10.3.21.1 (бета для УТ 10.3.30.2) - печатная форма 2 в 1 альтернатива счету фактуре и расходной накладной.
- Печатная форма ИНВ-8а "Инвентаризационная опись драгоценных металлов, содержащихся..." для неуправляемых (обычных) приложений
- Формирование комплекта печатных форм в типовых конфигурациях для разнотипных документов
- Шаблон разработки печатных форм и подключения к конфигурациям на БСП 2.х и БСП 3.0
- Конструктор печатных форм (PrintWizard). Часть 1: Печатные формы. А что, собственно, не так?
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
сложно что-то смотреть по коду без конкретных данных и без отладки.
Если речь про вот это
если тут, то тут вообще что-то странное написано. Даже если отбор сработал, мы получили строку какой-то ТЗ, которая потом не используется нигде, поправили эту строку, и продолжили выполнять код, как ни в чем не бывало нигде больше не используя эти данные, которые мы правили. Это достаточно бесполезно. Ну а если действительно не работает поиск то возможно потому, что по другому называются столбцы в таблице или там действительно нет таких строк. Тоже без реальных структур и ТЗ не разберешь. Если нужно просто сгруппировать строки, то действительно воспользуйтесь не выборкой, а таблицей значений, и функцией ТаблицаЗначений.Свернуть(), а потом обход делайте не по выборке, а по этой ТЗ.
Если речь про вот это
СтруктураОтбора.Номенклатура = ВыборкаМатериалы.НоменклатураСсылка;
СтруктураОтбора.СчетКт = ВыборкаМатериалы.СчетУчета;
СтруктураОтбора.КПСКт = ВыборкаМатериалы.КПС;
СтруктураОтбора.Количество = ВыборкаМатериалы.Количество;
//ЗаполнитьЗначенияСвойств(СтруктураОтбора, ВыборкаМатериалы);
//Ошибка начинается отсюдаа-----------------------------------------------------------------------------------------------
//ТекущиеДвижения = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаДвижений);
ТекущиеДвижения = ТаблицаДвижений.НайтиСтроки(СтруктураОтбора);//////////не работает отбор!!!!!!!!!!!!!!!
Если ТекущиеДвижения.Количество() > 0 Тогда
ТекущееДвижение = ТекущиеДвижения[0];
Если ТекущееДвижение.Количество <> 0 Тогда
Цена = Окр(ТекущееДвижение.Сумма / ТекущееДвижение.Количество, 2);
Иначе
Цена = 0;
КонецЕсли;
Если ВыборкаМатериалы.Количество = ТекущееДвижение.Количество Тогда
Сумма = ТекущееДвижение.Сумма;
ИначеЕсли ВыборкаМатериалы.Количество < ТекущееДвижение.Количество Тогда
Сумма = ВыборкаМатериалы.Количество * Цена;
Иначе
Сумма = 0;
КонецЕсли;
УчтенноеКоличество = Мин(ТекущееДвижение.Количество, ВыборкаМатериалы.Количество);
ТекущееДвижение.Количество = ТекущееДвижение.Количество - УчтенноеКоличество;
ТекущееДвижение.Сумма = ТекущееДвижение.Сумма - Сумма;
Если ЗначениеЗаполнено(ТекущееДвижение.СчетДт) Тогда
СтруктураПараметров.СчетДебета = УправлениеПечатьюБГУ.ПредставлениеРабочегоСчета(
ТекущееДвижение.КПСДт, ТекущееДвижение.КФО, ТекущееДвижение.СчетДт, ТекущееДвижение.КЭКДт,,)
КонецЕсли;
СтруктураПараметров.СчетКредита = УправлениеПечатьюБГУ.ПредставлениеРабочегоСчета(
ТекущееДвижение.КПСКт, ТекущееДвижение.КФО, ТекущееДвижение.СчетКт, ТекущееДвижение.КЭККт,,);
КонецЕсли;
Показатьесли тут, то тут вообще что-то странное написано. Даже если отбор сработал, мы получили строку какой-то ТЗ, которая потом не используется нигде, поправили эту строку, и продолжили выполнять код, как ни в чем не бывало нигде больше не используя эти данные, которые мы правили. Это достаточно бесполезно. Ну а если действительно не работает поиск то возможно потому, что по другому называются столбцы в таблице или там действительно нет таких строк. Тоже без реальных структур и ТЗ не разберешь. Если нужно просто сгруппировать строки, то действительно воспользуйтесь не выборкой, а таблицей значений, и функцией ТаблицаЗначений.Свернуть(), а потом обход делайте не по выборке, а по этой ТЗ.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот