Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 05:12

Печать по алфавиту

Автор Анастасия Мякишева, 24 мая 2017, 09:39

0 Пользователей и 1 гость просматривают эту тему.

Анастасия Мякишева

Добрый день друзья. Подскажите, как сделать , что бы при печате (на печатной форме)  ИнвентаризацииБСО,  СоставБСО был расположен в алфавитном порядке.


Функция ПечатьИнвентаризацияБСО()
//ТабДокументШапка = ПечатьИнвентаризацияБСО_Титул();

Макет = ПолучитьОбщийМакет("ИнвентаризацияБСОиДД_0504086");

ОбластьМакетаШапка           = Макет.ПолучитьОбласть("Шапка");
ОбластьМакетаСтрока          = Макет.ПолучитьОбласть("Строка");
ОбластьМакетаСтрокаНомеров   = Макет.ПолучитьОбласть("СтрокаНомеров1");
ОбластьМакетаНомерСтраницы   = Макет.ПолучитьОбласть("НомерСтраницы");
ОбластьМакетаИтогоПоСтранице = Макет.ПолучитьОбласть("ИтогоПоСтранице");
ОбластьМакетаИтогПрописью_1  = Макет.ПолучитьОбласть("ИтогПрописью_1");
ОбластьМакетаИтого           = Макет.ПолучитьОбласть("Итого");

ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПечатьТаблицы0504086";
ТабДокумент.ОриентацияСтраницы  = ОриентацияСтраницы.Ландшафт;
ТабДокумент.ПолеСлева           = 5;
ТабДокумент.ПолеСправа          = 0;

пНомерСтраницы  = 2;
ОбластьМакетаНомерСтраницы.Параметры.пНомерСтраницы = пНомерСтраницы;
ТабДокумент.Вывести(ОбластьМакетаНомерСтраницы);
ТабДокумент.Вывести(ОбластьМакетаШапка);

ВсегоПоСтраницеБУ = 0;
ВсегоПоСтраницеФУ = 0;
Нпп = 1;
КоличествоНомеровНаСтранице = 0;
КоличествоНомеровВсего = 0;

ВсегоНедостач = 0;
ВсегоИзлишков = 0;

ДеревоБСО = УправлениеМатериальнымиЗапасами.ПолучитьДанныеИнвентаризацииДляПечати(Ссылка);

СтруктураПоискаБУ = Новый Структура("ВидУчета", "БУ");
СтруктураПоискаФУ = Новый Структура("ВидУчета", "ФУ");

Для каждого СтрокаВидаБСО из ДеревоБСО.Строки Цикл
ТекДлинаНомера = СтрокаВидаБСО.ДлинаНомера;
ТекМаска       = УправлениеМатериальнымиЗапасами.ПолучитьМаскуВводаНомеровБСО(ТекДлинаНомера);
Для каждого СтрокаСерииБСО из СтрокаВидаБСО.Строки Цикл
МассивБУ = СтрокаСерииБСО.Строки.НайтиСтроки(СтруктураПоискаБУ);
МассивФУ = СтрокаСерииБСО.Строки.НайтиСтроки(СтруктураПоискаФУ);

Если МассивБУ.Количество() = 0 И МассивФУ.Количество() = 0 Тогда
Продолжить;
КонецЕсли;

// Проверку вывода делаем по всей серии БСО, с учетом всех диапазонов номеров в серии.
// Если серия вся не помещается, то ее переносим полностью.
МассивВыведенныхОбластей = Новый Массив;
МассивВыведенныхОбластей.Добавить(ОбластьМакетаСтрока);
МаксКоличество = Макс(МассивБУ.Количество(), МассивФУ.Количество());
Для п = 1 по (МаксКоличество - 1) Цикл
МассивВыведенныхОбластей.Добавить(ОбластьМакетаСтрокаНомеров);
КонецЦикла;
МассивВыведенныхОбластей.Добавить(ОбластьМакетаИтогоПоСтранице);
МассивВыведенныхОбластей.Добавить(ОбластьМакетаИтогПрописью_1);
Если НЕ ТабДокумент.ПроверитьВывод(МассивВыведенныхОбластей) Тогда
ЗаврешитьСтраницуТабличногоДокументаа(ТабДокумент, ОбластьМакетаИтогоПоСтранице, ВсегоПоСтраницеБУ, ВсегоПоСтраницеФУ, Ложь);
ВывестиИтогиПрописью(ТабДокумент, ОбластьМакетаИтогПрописью_1, КоличествоНомеровНаСтранице,, ВсегоПоСтраницеФУ);
НачатьСтраницуТабличногоДокументаа(ТабДокумент, ОбластьМакетаНомерСтраницы, ОбластьМакетаШапка, пНомерСтраницы);
КоличествоНомеровНаСтранице = 0;
ВсегоПоСтраницеБУ           = 0;
ВсегоПоСтраницеФУ           = 0;
КонецЕсли;

ОбластьМакетаСтрока.Параметры.пНомерСтроки  = Нпп;
ОбластьМакетаСтрока.Параметры.пВидДокумента = СтрокаСерииБСО.БСОПредставление;
ОбластьМакетаСтрока.Параметры.пЕдиница      = СтрокаСерииБСО.ЕдиницаИзмерения;

КолСтрокВСерии = 0;

Если МассивБУ.Количество() > 0 Тогда
ОбластьМакетаСтрока.Параметры.пСерияБУ = СтрокаСерииБСО.СерияБСОПредставление;
ОбластьМакетаСтрока.Параметры.пЦенаБУ  = 1;
ОбластьМакетаСтрока.Параметры.пКоличествоБУ = СтрокаСерииБСО.КоличествоБУ;
ОбластьМакетаСтрока.Параметры.пСуммаБУ      = СтрокаСерииБСО.КоличествоБУ;
ВсегоПоСтраницеБУ = ВсегоПоСтраницеБУ + СтрокаСерииБСО.КоличествоБУ;

Для каждого СтрокаНомеров из МассивБУ Цикл
Если КолСтрокВСерии = 0 Тогда
ОбластьМакетаСтрока.Параметры.пНомерБУ = ДиапазонНомеровСтрокой(СтрокаНомеров, СтрокаВидаБСО.ДлинаНомера);
ТабДокумент.Вывести(ОбластьМакетаСтрока);
НачВысотаТабПоСерии = ТабДокумент.ВысотаТаблицы;
Иначе
ОбластьМакетаСтрокаНомеров.Параметры.пНомерБУ = ДиапазонНомеровСтрокой(СтрокаНомеров, СтрокаВидаБСО.ДлинаНомера);
ТабДокумент.Вывести(ОбластьМакетаСтрокаНомеров);
КонецЕсли;

КолСтрокВСерии = КолСтрокВСерии + 1;
КонецЦикла;
КонецЕсли;

ОбластьМакетаСтрока.Параметры.пСерияБУ      = "";
ОбластьМакетаСтрока.Параметры.пЦенаБУ       = 0;
ОбластьМакетаСтрока.Параметры.пКоличествоБУ = 0;
ОбластьМакетаСтрока.Параметры.пСуммаБУ      = 0;
ОбластьМакетаСтрока.Параметры.пНомерБУ      = 0;

ОбластьМакетаСтрокаНомеров.Параметры.пНомерБУ = 0;

к = 0;
Для каждого СтрокаНомеров из МассивФУ Цикл
Если КолСтрокВСерии <= к Тогда
Если к = 0 Тогда
ОбластьМакетаСтрока.Параметры.пСерияФУ = СтрокаСерииБСО.СерияБСОПредставление;
ОбластьМакетаСтрока.Параметры.пЦенаФУ  = 1;
ОбластьМакетаСтрока.Параметры.пКоличествоФУ = СтрокаСерииБСО.КоличествоФУ;
ОбластьМакетаСтрока.Параметры.пСуммаФУ      = СтрокаСерииБСО.КоличествоФУ;
ВсегоПоСтраницеФУ = ВсегоПоСтраницеФУ + СтрокаСерииБСО.КоличествоФУ;

ОбластьМакетаСтрока.Параметры.пНомерФУ = ДиапазонНомеровСтрокой(СтрокаНомеров, СтрокаВидаБСО.ДлинаНомера);
ТабДокумент.Вывести(ОбластьМакетаСтрока);
НачВысотаТабПоСерии = ТабДокумент.ВысотаТаблицы;
Иначе
ОбластьМакетаСтрокаНомеров.Параметры.пНомерФУ = ДиапазонНомеровСтрокой(СтрокаНомеров, СтрокаВидаБСО.ДлинаНомера);
ТабДокумент.Вывести(ОбластьМакетаСтрокаНомеров);
КонецЕсли;
КолСтрокВСерии = КолСтрокВСерии + 1;

Иначе
Если к = 0 Тогда
ТабДокумент.Область(НачВысотаТабПоСерии + к, 8).Текст = СтрокаСерииБСО.СерияБСОПредставление;
ТабДокумент.Область(НачВысотаТабПоСерии + к, 12).Текст  = 1;
ТабДокумент.Область(НачВысотаТабПоСерии + к, 14).Текст = СтрокаСерииБСО.КоличествоФУ;
ТабДокумент.Область(НачВысотаТабПоСерии + к, 16).Текст = СтрокаСерииБСО.КоличествоФУ;
ВсегоПоСтраницеФУ = ВсегоПоСтраницеФУ + СтрокаСерииБСО.КоличествоФУ;
КонецЕсли;

ТабДокумент.Область(НачВысотаТабПоСерии + к, 10).Текст = ДиапазонНомеровСтрокой(СтрокаНомеров, СтрокаВидаБСО.ДлинаНомера);
КонецЕсли;
к = к + 1;
КонецЦикла;

к = 0;
ТаблицаНомеров = СтрокаСерииБСО.ОстаткиНомеров;
ВсегоНедостачПоСерии = 0;
Для каждого СтрокаНомеров из ТаблицаНомеров Цикл
Если СтрокаНомеров.Количество < 0 Тогда
Продолжить;
ИначеЕсли СтрокаНомеров.НомерНачальный = 0 И СтрокаНомеров.НомерКонечный = 0 Тогда
Продолжить;
КонецЕсли;

Если к = 0 Тогда
ТабДокумент.Область(НачВысотаТабПоСерии + к, 28).Текст = СтрокаСерииБСО.СерияБСОПредставление;
ТабДокумент.Область(НачВысотаТабПоСерии + к, 32).Текст  = 1;
КонецЕсли;
Если к >= КолСтрокВСерии Тогда
ТабДокумент.Вывести(ОбластьМакетаСтрокаНомеров);
КолСтрокВСерии = КолСтрокВСерии + 1;
КонецЕсли;
ТабДокумент.Область(НачВысотаТабПоСерии + к, 30).Текст = ДиапазонНомеровСтрокой(СтрокаНомеров, СтрокаВидаБСО.ДлинаНомера);

ВсегоНедостач = ВсегоНедостач + СтрокаНомеров.Количество;
ВсегоНедостачПоСерии = ВсегоНедостачПоСерии + СтрокаНомеров.Количество;
к = к + 1;
КонецЦикла;
ТабДокумент.Область(НачВысотаТабПоСерии, 34).Текст = ВсегоНедостачПоСерии;
ТабДокумент.Область(НачВысотаТабПоСерии, 36).Текст = ВсегоНедостачПоСерии;

к = 0;
ТаблицаНомеров = СтрокаСерииБСО.ОстаткиНомеров;
ВсегоИзлишковПоСерии = 0;
Для каждого СтрокаНомеров из ТаблицаНомеров Цикл
Если СтрокаНомеров.Количество >= 0 Тогда
Продолжить;
ИначеЕсли СтрокаНомеров.НомерНачальный = 0 И СтрокаНомеров.НомерКонечный = 0 Тогда
Продолжить;
КонецЕсли;

Если к = 0 Тогда
ТабДокумент.Область(НачВысотаТабПоСерии + к, 38).Текст = СтрокаСерииБСО.СерияБСОПредставление;
ТабДокумент.Область(НачВысотаТабПоСерии + к, 42).Текст  = 1;
КонецЕсли;
Если к >= КолСтрокВСерии Тогда
ТабДокумент.Вывести(ОбластьМакетаСтрокаНомеров);
КолСтрокВСерии = КолСтрокВСерии + 1;
КонецЕсли;
ТабДокумент.Область(НачВысотаТабПоСерии + к, 40).Текст = ДиапазонНомеровСтрокой(СтрокаНомеров, СтрокаВидаБСО.ДлинаНомера);

ВсегоИзлишков = ВсегоИзлишков + (- СтрокаНомеров.Количество);
ВсегоИзлишковПоСерии = ВсегоИзлишковПоСерии + (- СтрокаНомеров.Количество);
к = к + 1;
КонецЦикла;
ТабДокумент.Область(НачВысотаТабПоСерии, 44).Текст = ВсегоИзлишковПоСерии;
ТабДокумент.Область(НачВысотаТабПоСерии, 46).Текст = ВсегоИзлишковПоСерии;

Нпп = Нпп + 1;
КоличествоНомеровНаСтранице = КоличествоНомеровНаСтранице + 1;
КоличествоНомеровВсего = КоличествоНомеровВсего + 1;
КонецЦикла;
КонецЦикла;


ЗаврешитьСтраницуТабличногоДокументаа(ТабДокумент, ОбластьМакетаИтогоПоСтранице, ВсегоПоСтраницеБУ, ВсегоПоСтраницеФУ, Ложь);
ВсегоБУ = ДеревоБСО.Строки.Итог("КоличествоБУ");
ОбластьМакетаИтого.Параметры.пИтогКоличествоБУ = ВсегоБУ;
ОбластьМакетаИтого.Параметры.пИтогСуммаБУ      = ВсегоБУ;

ВсегоФУ = ДеревоБСО.Строки.Итог("КоличествоФУ");
ОбластьМакетаИтого.Параметры.пИтогКоличествоФУ = ВсегоФУ;
ОбластьМакетаИтого.Параметры.пИтогСуммаФУ      = ВсегоФУ;

ОбластьМакетаИтого.Параметры.пИтогКоличествоНедостача = ВсегоНедостач;
ОбластьМакетаИтого.Параметры.пИтогСуммаНедостача      = ВсегоНедостач;
ОбластьМакетаИтого.Параметры.пИтогКоличествоИзлишки   = ВсегоИзлишков;
ОбластьМакетаИтого.Параметры.пИтогСуммаИзлишки        = ВсегоИзлишков;

ОбластьМакетаИтого.Параметры.пТекстИтого     = "Итого по ведомости ";
ТабДокумент.Вывести(ОбластьМакетаИтого);
ВывестиИтогиПрописью(ТабДокумент, ОбластьМакетаИтогПрописью_1, КоличествоНомеровВсего, Истина, ВсегоФУ);

ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();

МассивТабДокументов = Новый Массив;
МассивТабДокументов.Добавить(ТабДокумент);

Возврат МассивТабДокументов;
КонецФункции



wise

Цитата: Анастасия Мякишева от 24 мая 2017, 09:39ДеревоБСО = УправлениеМатериальнымиЗапасами.ПолучитьДанныеИнвентаризацииДляПечати(Ссылка);

посмотри {ДеревоБСО} отладчиком, ТАМ и сортируй...
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

Анастасия Мякишева

Туплю пардон, а где это дерево найти ? В документе на сколько я понимаю?
Если да, то в документе у меня все рассортировано как положено, а на печать все равно идет не по порядку.

wise

(2)
Цитата: Анастасия Мякишева от 24 мая 2017, 10:25Туплю пардон, а где это дерево найти ? В документе на сколько я понимаю?

в ОТЛАДЧИКЕ..!
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

Анастасия Мякишева

я совсем еще мелкий программист ,можно поподробнее, как туда попасть и что там делать

wise

(4) в конфигураторе ЕСТЬ меню "Отладка"
ТАМ.
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

Похожие темы (5)

Рейтинг@Mail.ru

Поиск