Помогите добавить отбор по цеху в печатную форму
Подскажите как сделать что бы на печать выводила номенклатуру по цеху Дверной щитовой. В отчет еще попадают с цеха Царговый.
Перем НомерСтрокиНачало;
ШаблонОшибкиТовары = НСтр("ru = 'В документе %1 отсутствуют товары. Печать %2 не требуется';
|en = 'Goods are missing in document %1. Printing of %2 is not required'");
ШаблонОшибкиЭтапы = НСтр("ru = 'В документе %1 отсутствуют этапы оплаты. Печать %2 не требуется';
|en = 'Payment steps are missing in document %1. Printing of %2 is not required'");
ДанныеПечати = ДанныеДляПечати.РезультатПоШапке.Выбрать();
ЭтапыОплаты = ДанныеДляПечати.РезультатПоЭтапамОплаты.Выгрузить();
Товары = ДанныеДляПечати.РезультатПоТабличнойЧасти.Выгрузить();
Товары.Колонки.Добавить("СвойствоОпт");
Товары.Колонки.Добавить("Модель");
Товары.Колонки.Добавить("ДвернойЩитовой");
Товары.Колонки.Добавить("ВидНоменклатурыДляПроизводства");
Товары.Колонки.Добавить("Цех");
Товары.Колонки.Добавить("ПредставлениеНоменклатурыДляПечати");
ТаблицаВидыНоменклатурыДляПроизводства = ДанныеДляПечати.ВидыНоменклатурыДляПроизводства.Выгрузить();
ТаблЦеха = Новый ТаблицаЗначений;
ТаблЦеха.Колонки.Добавить("Цех");
ТаблЦеха.Колонки.Добавить("КоличествоКопий");
ТаблЦеха.Колонки.Добавить("ТипЦех");
СписокСвойств = Новый СписокЗначений;
СписокСвойств.Добавить("Модель");
СписокСвойств.Добавить("ДвернойЩитовой");
ЗапроcСпр = Новый Запрос;
ЗапроcСпр.Параметры.Вставить("ВидСправочника", "СтруктураПредприятия");
ЗапроcСпр.Параметры.Вставить("НаименованиеСправочника", "Эмаль");
ЗапроcСпр.Текст = "ВЫБРАТЬ
| ВидСправочника.Ссылка КАК Ссылка
|ИЗ
| Справочник.ВидСправочника КАК ВидСправочника
|ГДЕ
| ВидСправочника.ПометкаУдаления = ЛОЖЬ И ВидСправочника.Наименование = &НаименованиеСправочника";
ЗапроcСпр.Текст = СтрЗаменить(ЗапроcСпр.Текст,"ВидСправочника","СтруктураПредприятия");
ТабСпр = ЗапроcСпр.Выполнить().Выгрузить();
Если ТабСпр.Количество()=1 Тогда
ЦехЭмаль = ТабСпр[0].Ссылка;
Иначе
ЦехЭмаль = Справочники.СтруктураПредприятия.ПустаяСсылка();
КонецЕсли;
Для Каждого СтрокаТовары Из Товары Цикл
ДополнительныеПараметрыПолученияНаименованияДляПечати = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати();
ДополнительныеПараметрыПолученияНаименованияДляПечати.ВозвратнаяТара = СтрокаТовары.ЭтоВозвратнаяТара;
ДополнительныеПараметрыПолученияНаименованияДляПечати.Содержание = СтрокаТовары.Содержание;
ДополнительныеПараметрыПолученияНаименованияДляПечати.КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
ДополнительныеПараметрыПолученияНаименованияДляПечати.Примечание = СтрокаТовары.Примечание;
СтрокаТовары.ПредставлениеНоменклатурыДляПечати = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(СтрокаТовары.НаименованиеПолное, ?(ЗначениеЗаполнено(СтрокаТовары.Характеристика),СтрокаТовары.Характеристика.НаименованиеПолное,""),,, ДополнительныеПараметрыПолученияНаименованияДляПечати);
ЗначениеСвойстваОпт = "Офис";
Если ЗначениеЗаполнено(СтрокаТовары.Контрагент) Тогда
Для Каждого СтрокаДопРеквКонтрагент Из СтрокаТовары.Контрагент.ДополнительныеРеквизиты Цикл
Если Врег(СтрокаДопРеквКонтрагент.Свойство.Наименование) = "ОПТ" Тогда
ЗначениеСвойстваОпт = СтрокаДопРеквКонтрагент.Значение.Наименование;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
СтрокаТовары.СвойствоОпт = ЗначениеСвойстваОпт;
Для Каждого СтрокаСписокСвойств Из СписокСвойств Цикл
СтрокаТовары[СтрокаСписокСвойств.Значение] = "";
Если ЗначениеЗаполнено(СтрокаТовары.Характеристика) Тогда
МассивДопРеквХаракВидаНоменклатуры = СтрокаТовары.ВидНоменклатуры.РеквизитыДляКонтроляХарактеристик.НайтиСтроки(Новый Структура("ЭтоДопРеквизит,ИмяРеквизита",Истина,СтрокаСписокСвойств.Значение));
Если МассивДопРеквХаракВидаНоменклатуры.Количество()=1 Тогда
МассивМассивДопРеквХаракВидаНоменклатуры = СтрокаТовары.Характеристика.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", МассивДопРеквХаракВидаНоменклатуры[0].Свойство));
Если МассивМассивДопРеквХаракВидаНоменклатуры.Количество()>0 Тогда
СтрокаТовары[СтрокаСписокСвойств.Значение] = СокрЛП(МассивМассивДопРеквХаракВидаНоменклатуры[0].Значение);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
МассивВидыНоменклатурыДляПроизводства = ТаблицаВидыНоменклатурыДляПроизводства.НайтиСтроки(Новый Структура("ВидНоменклатуры", СтрокаТовары.ВидНоменклатуры));
Для Каждого СтрокаМассивВидыНоменклатурыДляПроизводства Из МассивВидыНоменклатурыДляПроизводства Цикл
Если ЗначениеЗаполнено(СтрокаТовары.Модель) Тогда
СписокВариантовУсловия = Новый СписокЗначений;
СписокВариантовУсловияТекст = СтрокаМассивВидыНоменклатурыДляПроизводства.Модель;
Если ЗначениеЗаполнено(СписокВариантовУсловияТекст) Тогда
Пока СтрДлина(СписокВариантовУсловияТекст)>0 Цикл
ПозицияРазделителя = СтрНайти(СписокВариантовУсловияТекст,",");
Если ПозицияРазделителя>0 Тогда
ТекущееЗначениеСписка = СокрЛП(Лев(СписокВариантовУсловияТекст,ПозицияРазделителя-1));
СписокВариантовУсловияТекст = СокрЛП(Прав(СписокВариантовУсловияТекст,СтрДлина(СписокВариантовУсловияТекст)-ПозицияРазделителя));
Иначе
ТекущееЗначениеСписка = СписокВариантовУсловияТекст;
СписокВариантовУсловияТекст = "";
КонецЕсли;
Если СписокВариантовУсловия.НайтиПоЗначению(ТекущееЗначениеСписка)=Неопределено Тогда
СписокВариантовУсловия.Добавить(ТекущееЗначениеСписка);
КонецЕсли;
КонецЦикла;
Если СписокВариантовУсловия.НайтиПоЗначению(СтрокаТовары.Модель)=Неопределено Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
КонецЕсли;
СтрокаТовары.ВидНоменклатурыДляПроизводства = СтрокаМассивВидыНоменклатурыДляПроизводства.ВидНоменклатурыДляПроизводства;
Прервать;
КонецЦикла;
Если ЗначениеЗаполнено(СтрокаТовары.ВидНоменклатурыДляПроизводства) Тогда
Если ЗначениеЗаполнено(СтрокаТовары.ВидНоменклатурыДляПроизводства.Цех) Тогда
Если (СтрокаТовары.ВидНоменклатурыДляПроизводства.Цех.Код="ЕР-000006") Тогда
СтрокаТаблЦеха = ТаблЦеха.Добавить();
СтрокаТаблЦеха.Цех = СтрокаТовары.ВидНоменклатурыДляПроизводства.Цех;
//
// Если СтрокаТаблЦеха.ТипЦеха = "Горячий" Тогда
// СтрокаТовары.Цех = "Горячий " + СтрокаТаблЦеха.Цех.Наименование; // добавляем префикс "Горячий"
// ИначеЕсли ЗначениеЗаполнено(СтрокаТаблЦеха.Цех) Тогда
// СтрокаТовары.Цех = СтрокаТаблЦеха.Цех.Наименование; // если тип не "Горячий", используем только название цеха
// КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
//
// //ВидНоменклатуры_ДП=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Дверное полотно");
//ВидНоменклатуры_Дверноеполотно=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Дверное полотно");
//
//
////только для вида номенклатуры "Дверное полотно"
//Сч = 0;
//Пока Сч < Товары.Количество() Цикл
// СтрокаТаблицы = Товары.Получить(Сч);
// Если СтрокаТаблицы.ВидНоменклатуры <> ВидНоменклатуры_Дверноеполотно
// Тогда
// Товары.Удалить(СтрокаТаблицы);
//
// Иначе
// Сч = Сч + 1;
// КонецЕсли;
//ВидНоменклатуры_ДП=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Дверное полотно");
ВидНоменклатуры_Дверноеполотно=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Дверное полотно");
ВидНоменклатуры_Фрамуга=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Фрамуга");
//только для вида номенклатуры "Стекло"
ПодстрокаВидНоменклатурыПоиск="Фрамуга";
Сч = 0;
Пока Сч < Товары.Количество() Цикл
СтрокаТаблицы = Товары.Получить(Сч);
ТекущаяВидНоменклатурыСтрока=нрег(Строка(СтрокаТаблицы.ВидНоменклатуры));
Если СтрокаТаблицы.ВидНоменклатуры <> ВидНоменклатуры_Фрамуга
И СтрокаТаблицы.ВидНоменклатуры <> ВидНоменклатуры_Дверноеполотно Тогда
Товары.Удалить(СтрокаТаблицы);
ИначеЕсли Найти(ТекущаяВидНоменклатурыСтрока,ПодстрокаВидНоменклатурыПоиск)>0 Тогда
Товары.Удалить(СтрокаТаблицы);
Иначе
Сч = Сч + 1;
КонецЕсли;
КонецЦикла;
ТаблЦеха.Свернуть("Цех","");
ТаблЦеха.Сортировать("Цех");
КолонкаКодов = ФормированиеПечатныхФорм.ДополнительнаяКолонкаПечатныхФормДокументов();
ИмяКолонкиКодов = КолонкаКодов.ИмяКолонки;
ПредставлениеКолонкиКодов = КолонкаКодов.ПредставлениеКолонки;
ВыводитьКоды = Не ПустаяСтрока(ИмяКолонкиКодов);
Пока ДанныеПечати.Следующий() Цикл
Макет = УправлениеПечатью.МакетПечатнойФормы(ИмяМакета);
ПерваяСтраницаВыведена = Ложь;
Если ТаблЦеха.Количество()=0 Тогда
УстановитьПараметр(Макет, "ТекстЗаголовка", ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(
ДанныеПечати,
ДанныеПечати.ПредставлениеДокумента));
// ::: Шапка документа
ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
//ОбластьМакета.Параметры.Цех="Пример"+"87987987"; //123
ТабличныйДокумент.Вывести(ОбластьМакета);
// ::: Табличная часть "Продукция"
ОбластьМакетаШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьМакетаИтого = Макет.ПолучитьОбласть("Итого");
ПараметрыНоменклатуры = Новый Структура;
ПараметрыНоменклатуры.Вставить("Колво", НСтр("ru ='Кол-во'"));
ПараметрыНоменклатуры.Вставить("ЕдИзм", НСтр("ru ='Ед.'"));
ОбластьМакетаСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьМакетаШапкаТаблицы.Параметры.Заполнить(ПараметрыНоменклатуры);
ТабличныйДокумент.Вывести(ОбластьМакетаШапкаТаблицы);
ТабличныйДокумент.Вывести(ОбластьМакетаИтого);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка);
ПерваяСтраницаВыведена = Истина;
Иначе
Для Каждого СтрокаТаблЦеха Из ТаблЦеха Цикл
СтрокаТаблЦехаКоличествоКопий = ?(СтрокаТаблЦеха.Цех.КоличествоКопий=0,СтрокаТаблЦеха.Цех.КоличествоКопий,1);
Для КолвоКопий=1 По СтрокаТаблЦехаКоличествоКопий Цикл
Если ПерваяСтраницаВыведена Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
//::: Заголовок
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
УстановитьПараметр(ОбластьМакета, "ТекстЗаголовка", ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(ДанныеПечати, "Заказ на производство"));
ТабличныйДокумент.Вывести(ОбластьМакета);
// ::: Шапка документа
ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ОбластьМакета.Параметры.Цех=Строка( СтрокаТаблЦеха.Цех)+" (горячий)"; //123
ТабличныйДокумент.Вывести(ОбластьМакета);
// ::: Табличная часть "Продукция"
ОбластьМакетаШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьМакетаИтого = Макет.ПолучитьОбласть("Итого");
ПараметрыНоменклатуры = Новый Структура;
Если СтрокаТаблЦеха.Цех.СортироватьПоНаименованию Тогда
ПараметрыНоменклатуры.Вставить("Колво", НСтр("ru ='Итог'"));
ПараметрыНоменклатуры.Вставить("ЕдИзм", НСтр("ru ='Кол-во'"));
ОбластьМакетаСтрока = Макет.ПолучитьОбласть("Строка1");
Иначе
ПараметрыНоменклатуры.Вставить("Колво", НСтр("ru ='Кол-во'"));
ПараметрыНоменклатуры.Вставить("ЕдИзм", НСтр("ru ='Ед.'"));
ОбластьМакетаСтрока = Макет.ПолучитьОбласть("Строка");
КонецЕсли;
ОбластьМакетаШапкаТаблицы.Параметры.Заполнить(ПараметрыНоменклатуры);
ТабличныйДокумент.Вывести(ОбластьМакетаШапкаТаблицы);
ТаблицаПродукция = Товары.Скопировать(Новый Структура("Ссылка", ДанныеПечати.Ссылка));
ТаблицаПродукцияПоЦеху = ТаблицаПродукция.Скопировать();
ТаблицаПродукцияПоЦехуКолво = ТаблицаПродукцияПоЦеху.Количество();
Пока ТаблицаПродукцияПоЦехуКолво>0 Цикл
ТаблицаПродукцияПоЦехуКолво = ТаблицаПродукцияПоЦехуКолво - 1;
СтрокаТабличнойЧастиПродукция = ТаблицаПродукцияПоЦеху[ТаблицаПродукцияПоЦехуКолво];
ЦехСовпадает=Ложь;
Если ЗначениеЗаполнено(СтрокаТабличнойЧастиПродукция.Цех) Тогда
Если СтрокаТаблЦеха.Цех=СтрокаТабличнойЧастиПродукция.Цех Тогда
ЦехСовпадает = Истина;
КонецЕсли;
Если Не ЦехСовпадает тогда
ТаблицаПродукцияПоЦеху.Удалить(СтрокаТабличнойЧастиПродукция);
Продолжить;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТаблицаПродукцияПоЦехуИтоги = ТаблицаПродукцияПоЦеху.Скопировать();
ТаблицаПродукцияПоЦехуИтоги.Свернуть("ПредставлениеНоменклатурыДляПечати","Количество");
Если СтрокаТаблЦеха.Цех.СортироватьПоНаименованию Тогда
ТаблицаПродукцияПоЦеху.Сортировать("ВидНоменклатурыДляПроизводства, ПредставлениеНоменклатурыДляПечати, СвойствоОпт, Контрагент, ЗаказКлиента");
Иначе
ТаблицаПродукцияПоЦеху.Сортировать("ПредставлениеНоменклатурыДляПечати, СвойствоОпт, Контрагент, ЗаказКлиента, ВидНоменклатурыДляПроизводства");
КонецЕсли;
ПараметрыНоменклатуры = Новый Структура;
ТекПредставлениеНоменклатурыДляПечати = ""; ТекВысотаТаблицы = 0; КоличествоПромИтог = 0; НомерСтроки = 0;
ТаблицаПродукцияПоЦехуКолво = ТаблицаПродукцияПоЦеху.Количество();
Пока ТаблицаПродукцияПоЦехуКолво>0 Цикл
НомерСтроки = НомерСтроки + 1;
ТаблицаПродукцияПоЦехуКолво = ТаблицаПродукцияПоЦехуКолво - 1;
СтрокаТабличнойЧастиПродукция = ТаблицаПродукцияПоЦеху[ТаблицаПродукцияПоЦеху.Количество()-(ТаблицаПродукцияПоЦехуКолво+1)];
ПараметрыНоменклатуры.Очистить();
ПараметрыНоменклатуры.Вставить("НомерСтроки", НомерСтроки);
ПараметрыНоменклатуры.Вставить("ПредставлениеНоменклатурыДляПечати", СтрокаТабличнойЧастиПродукция.ПредставлениеНоменклатурыДляПечати);
ПараметрыНоменклатуры.Вставить("Количество", СтрокаТабличнойЧастиПродукция.Количество);
ПараметрыНоменклатуры.Вставить("ЕдиницаИзмерения", СтрокаТабличнойЧастиПродукция.ЕдиницаИзмерения);
ПараметрыНоменклатуры.Вставить("Контрагент", СтрокаТабличнойЧастиПродукция.СвойствоОпт);
ПараметрыНоменклатуры.Вставить("ЗаказКлиента", "№ "+ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СтрокаТабличнойЧастиПродукция.ЗаказКлиента.Номер,Истина));
ОбластьМакетаСтрока.Параметры.Заполнить(ПараметрыНоменклатуры);
Если СтрокаТаблЦеха.Цех.СортироватьПоНаименованию Тогда
ОбластьМакетаСтрока.Параметры.Итог = "";
МассивТаблицаПродукцияПоЦехуИтоги = ТаблицаПродукцияПоЦехуИтоги.НайтиСтроки(Новый Структура("ПредставлениеНоменклатурыДляПечати",СтрокаТабличнойЧастиПродукция.ПредставлениеНоменклатурыДляПечати));
Если СтрокаТабличнойЧастиПродукция.Количество<>МассивТаблицаПродукцияПоЦехуИтоги[0].Количество Тогда
ОбластьМакетаСтрока.Параметры.Итог = МассивТаблицаПродукцияПоЦехуИтоги[0].Количество;
КонецЕсли;
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьМакетаСтрока);
Если ТекПредставлениеНоменклатурыДляПечати="" Тогда
ТекПредставлениеНоменклатурыДляПечати = СтрокаТабличнойЧастиПродукция.ПредставлениеНоменклатурыДляПечати;
ТекВысотаТаблицы = ТабличныйДокумент.ВысотаТаблицы;
КоличествоПромИтог = СтрокаТабличнойЧастиПродукция.Количество;
Иначе
Если ТекПредставлениеНоменклатурыДляПечати=СтрокаТабличнойЧастиПр одукция.ПредставлениеНоменклатурыДляПечати Тогда
ТекПредставлениеНоменклатурыДляПечати = СтрокаТабличнойЧастиПродукция.ПредставлениеНоменклатурыДляПечати;
КоличествоПромИтог = КоличествоПромИтог + СтрокаТабличнойЧастиПродукция.Количество;
Если СтрокаТаблЦеха.Цех.СортироватьПоНаименованию Тогда
Если ТекВысотаТаблицы<ТабличныйДокумент.ВысотаТаблицы Тогда // объединим ячейки пром.итога по Номенклатура,Характеристика,Партия
ТабличныйДокумент.Область(ТекВысотаТаблицы,23,ТекВысотаТаблицы,23).Текст = КоличествоПромИтог;
ТабличныйДокумент.Область(ТекВысотаТаблицы,23,ТабличныйДокумент.ВысотаТаблицы,23).Объединить(); // количество
ТабличныйДокумент.Область(ТекВысотаТаблицы,4,ТабличныйДокумент.ВысотаТаблицы,22).Объединить(); // номенклатура
КонецЕсли;
КонецЕсли;
//ТекВысотаТаблицы = ТабличныйДокумент.ВысотаТаблицы;
Иначе
КоличествоПромИтог = СтрокаТабличнойЧастиПродукция.Количество;
ТекПредставлениеНоменклатурыДляПечати = СтрокаТабличнойЧастиПродукция.ПредставлениеНоменклатурыДляПечати;
ТекВысотаТаблицы = ТабличныйДокумент.ВысотаТаблицы;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ТекПредставлениеНоменклатурыДляПечати<>"" Тогда
Если СтрокаТаблЦеха.Цех.СортироватьПоНаименованию Тогда
Если ТекВысотаТаблицы<ТабличныйДокумент.ВысотаТаблицы Тогда // объединим ячейки пром.итога по Номенклатура,Характеристика,Партия
ТабличныйДокумент.Область(ТекВысотаТаблицы,23,ТекВысотаТаблицы,23).Текст = КоличествоПромИтог;
ТабличныйДокумент.Область(ТекВысотаТаблицы,23,ТабличныйДокумент.ВысотаТаблицы,23).Объединить(); // количество
ТабличныйДокумент.Область(ТекВысотаТаблицы,4,ТабличныйДокумент.ВысотаТаблицы,22).Объединить(); // номенклатура
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПоказатьПрикрепленные файлы:
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот