|
Почему пустая коллекция ПараметрыМакетаТабличногоДокумента? | ☑ | ||
---|---|---|---|---|
0
korchak
20.02.13
✎
17:49
|
Есть табличный документ - ТабДокумент. Хочу перебрать коллекцию ПараметрыМакетаТабличногоДокумента - ТабДокумент.Параметры, а в итоге ТабДокумент.Параметры.Количество() = 0, хотя на печать по
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент,... выводиться табличный документ с заполеннными параметрами. Подскажите как добыть параметры в данном случае. |
|||
1
korchak
20.02.13
✎
17:52
|
Кстати ТабДокумент.Параметры.Области() тоже = 0... странно
|
|||
2
korchak
20.02.13
✎
17:53
|
Прошу прощения, ТабДокумент.Области.Количество()
|
|||
3
korchak
20.02.13
✎
18:10
|
Подскажите хоть в какую сторону копать?
|
|||
4
vicof
20.02.13
✎
18:12
|
Давай весь код
|
|||
5
Утконос
20.02.13
✎
18:12
|
(3) попробуй ОТЛАДЧИК откапать
|
|||
6
korchak
20.02.13
✎
18:22
|
так отладчиком все это и выловил
|
|||
7
korchak
20.02.13
✎
18:46
|
(4) весь код большой... (
|
|||
8
vicof
20.02.13
✎
18:47
|
(7) Ну извини, я не телепат.
|
|||
9
korchak
20.02.13
✎
18:53
|
ТабДокумент = ПечатьСводногоНарядаПослеОтгрузки(Перечисления.Т_ЯзыкиПеревода.Русский, Истина);
|
|||
10
korchak
20.02.13
✎
18:57
|
// Процедура печатает сводный наряд после отгрузки с передаваемым языком печати (переводится весь макет).
// // Параметры: // ЯзыкПечати - перечисление "Языки перевода", один из вариантов языка печати макета. // Непроведенный - булево, признак нажатой кнопки "СводныйНарядНепроведенный" (Истина) или "СводныйНаряд" (Ложь). // Функция ПечатьСводногоНарядаПослеОтгрузки(ЯзыкПечати, Непроведенный = Ложь) // Присвоим значение заголовку печати макета. Если Непроведенный Тогда Заголовок = "Печать макета ""Сводный наряд после отгрузки (новый)"":"; Иначе Заголовок = "Печать макета ""Сводный наряд после отгрузки"":"; КонецЕсли; // Если табл. часть не заполнена - ничего сообщать не будем, просто выведем пустой макет. Если СписокДокументов.Количество() = 0 Тогда Возврат Новый ТабличныйДокумент; КонецЕсли; // Получим список ячеек расхода со всех доступных зон погрузок. СписокЯчеекРасхода = ПолучитьСписокЯчеекРасходаЗонПогрузок(); // 1. Создадим новый запрос и сформируем его текст. Запрос = Новый Запрос; Запрос.УстановитьПараметр("СписокПомеченныхЗаказов" , ПолучитьСписокЗаполненныхДокументов("Заказ")); Запрос.УстановитьПараметр("СписокПомеченныхНарядов" , ПолучитьСписокЗаполненныхДокументов("НарядНаОтгрузку")); Запрос.УстановитьПараметр("СписокЯчеекРасхода" , СписокЯчеекРасхода); Если Непроведенный Тогда Запрос.Текст = СформироватьТекстПервогоНепроведенногоЗапроса(); Иначе Запрос.Текст = СформироватьТекстПервогоЗапроса(); КонецЕсли; // Выгрузим в массив колонку со значением колонки "Сортировочное поле". КэшТаблица = Запрос.Выполнить().Выгрузить(); МассивНаправлений = КэшТаблица.ВыгрузитьКолонку("СортировочноеПоле"); // Получим выборку с запроса по шапке и подвале (по общей группировке). ВыборкаШапкаИПодвал = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); // Получим макет и табличный документ. Макет = ПолучитьМакет("СводныйНаряд"); ТабДокумент = Новый ТабличныйДокумент; // Присвоим табличному документов уникальное имя параметров печати. ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СводныйНаряд_СводныйНаряд"; // Создадим новую таблицу значений с данными заказов и опишем ее колонки. ТаблицаДанныхДокументов = Новый ТаблицаЗначений; ТаблицаДанныхДокументов.Колонки.Добавить("Идентификатор" , Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(40))); ТаблицаДанныхДокументов.Колонки.Добавить("Направление" , Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(10))); ТаблицаДанныхДокументов.Колонки.Добавить("КоличествоРул" , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3))); ТаблицаДанныхДокументов.Колонки.Добавить("КоличествоУпак" , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3))); // Получим все области макета в разрезе горизонтальных и вертикальных группировок. ОбластьЗаголовокОбщая = Макет.ПолучитьОбласть("Заголовок|ОбщиеДанные"); ОбластьЗаголовокЛевая = Макет.ПолучитьОбласть("Заголовок|НарядНаОтгрузку"); ОбластьЗаголовокПравая = Макет.ПолучитьОбласть("Заголовок|РеализацияТоваров"); ОбластьШапкаТаблицыОбщая = Макет.ПолучитьОбласть("ШапкаТаблицы|ОбщиеДанные"); ОбластьШапкаТаблицыЛевая = Макет.ПолучитьОбласть("ШапкаТаблицы|НарядНаОтгрузку"); ОбластьШапкаТаблицыПравая = Макет.ПолучитьОбласть("ШапкаТаблицы|РеализацияТоваров"); ОбластьСтрокаОбщая = Макет.ПолучитьОбласть("СтрокаТаблицы|ОбщиеДанные"); ОбластьСтрокаЛевая = Макет.ПолучитьОбласть("СтрокаТаблицы|НарядНаОтгрузку"); ОбластьСтрокаПравая = Макет.ПолучитьОбласть("СтрокаТаблицы|РеализацияТоваров"); ОбластьСтрокаИтогоОбщая = Макет.ПолучитьОбласть("СтрокаТаблицыИтого|ОбщиеДанные"); ОбластьСтрокаИтогоЛевая = Макет.ПолучитьОбласть("СтрокаТаблицыИтого|НарядНаОтгрузку"); ОбластьСтрокаИтогоПравая = Макет.ПолучитьОбласть("СтрокаТаблицыИтого|РеализацияТоваров"); ОбластьПодвалаОбщая = Макет.ПолучитьОбласть("Подвал|ОбщиеДанные"); ОбластьПодвалаЛевая = Макет.ПолучитьОбласть("Подвал|НарядНаОтгрузку"); ОбластьПодвалаПравая = Макет.ПолучитьОбласть("Подвал|РеализацияТоваров"); // Если есть данные в выборке - обработаем ее и получим количество динамических колонок. Если ВыборкаШапкаИПодвал.Следующий() Тогда КоличествоКолонок = ВыборкаШапкаИПодвал.Номер; Иначе КоличествоКолонок = 0; КонецЕсли; // Заполним области заголовка и шапки таблицы макета по текущим данным. ЗаполнитьОбластиЗаголовкаИШапкиТаблицыМакета(ТабДокумент, ОбластьЗаголовокОбщая, ОбластьЗаголовокЛевая, ОбластьЗаголовокПравая, ОбластьШапкаТаблицыОбщая, КоличествоКолонок, МассивНаправлений, ЯзыкПечати, Заголовок); // Получим выборку с запроса по шапке и подвале по группировке "Заказы покупателей". ЗаказыВыборкиШапкиИПодвала = ВыборкаШапкаИПодвал.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); // Обойдем по циклу выборку с запроса по шапке и подвале по группировке "Заказы покупателей". Пока ЗаказыВыборкиШапкиИПодвала.Следующий() Цикл // Получим выборку с запроса по шапке и подвале без группировок. // Эта группировка нужна для того, чтоб все данный с одного заказа были один возле другого. ЭлементыВыборкиШапкиИПодвала = ЗаказыВыборкиШапкиИПодвала.Выбрать(); // Обойдем по циклу выборку с запроса по шапке и подвале без группировок. Пока ЭлементыВыборкиШапкиИПодвала.Следующий() Цикл // В зависимости какой тип документа в выборке, такую и область мы получим. Если ЭлементыВыборкиШапкиИПодвала.СортировочноеПоле = "Наряд" Тогда ОбластьШапкаТаблицы = ОбластьШапкаТаблицыЛевая; ТипДокумента = "Наряд"; ИначеЕсли ЭлементыВыборкиШапкиИПодвала.СортировочноеПоле = "Реализация" Тогда ОбластьШапкаТаблицы = ОбластьШапкаТаблицыПравая; ТипДокумента = "Погрузка"; Иначе Продолжить; // такого не может быть, но все же.... КонецЕсли; // Заполним данные области наряда на отгрузку или реализации товаров шапки таблицы макета. ОбластьШапкаТаблицы.Параметры.Контрагент = ПеревестиСтроку(ЭлементыВыборкиШапкиИПодвала.Контрагент, ЯзыкПечати, Заголовок, Ложь); ОбластьШапкаТаблицы.Параметры.Номер = ПеревестиСтроку(ТипДокумента, ЯзыкПечати, Заголовок) + " " + ПеревестиСтроку("№", ЯзыкПечати, Заголовок) + ЭлементыВыборкиШапкиИПодвала.Номер; ОбластьШапкаТаблицы.Параметры.Единица = ПеревестиСтроку("од.", ЯзыкПечати, Заголовок); ОбластьШапкаТаблицы.Параметры.Упаковка = ПеревестиСтроку("упак.", ЯзыкПечати, Заголовок); // Присоединим область наряда на отгрузку или реализации товаров шапки таблицы макета. ТабДокумент.Присоединить(ОбластьШапкаТаблицы); // Добавим новую строку в таблицу данных документов и заполним ее. НоваяСтрока = ТаблицаДанныхДокументов.Добавить(); НоваяСтрока.Идентификатор = ПолучитьИдентификаторДокументовДвижений(ЭлементыВыборкиШапкиИПодвала); НоваяСтрока.Направление = ТипДокумента; НоваяСтрока.КоличествоРул = 0; НоваяСтрока.КоличествоУпак = 0; КонецЦикла; КонецЦикла; // 2. Создадим новый запрос и сформируем его текст. Запрос = Новый Запрос; Запрос.УстановитьПараметр("СписокПомеченныхЗаказов" , ПолучитьСписокЗаполненныхДокументов("Заказ")); Запрос.УстановитьПараметр("СписокПомеченныхНарядов" , ПолучитьСписокЗаполненныхДокументов("НарядНаОтгрузку")); Запрос.УстановитьПараметр("СписокЯчеекРасхода" , СписокЯчеекРасхода); //Запрос.Текст = СформироватьТекстВторогоЗапроса(); Если Непроведенный Тогда Запрос.Текст = СформироватьТекстВторогоНепроведенногоЗапроса(); Иначе Запрос.Текст = СформироватьТекстВторогоЗапроса(); КонецЕсли; // Подготовим две таблицы значений по данным таблицы данных документов и определим номер строки. ТаблицаИтоговПоГруппах = ТаблицаДанныхДокументов.Скопировать(); ТаблицаПоНоменклатуре = ТаблицаДанныхДокументов.Скопировать(); НомерСтроки = 0; ВыборкаПервая = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПервая.Следующий() Цикл ВыборкаПоНоменклатурнойГруппе = ВыборкаПервая.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); // Обойдем по циклу выборку с запроса по группировке "Номенклатурная группа". Пока ВыборкаПоНоменклатурнойГруппе.Следующий() Цикл // Получим выборку с запроса по группировке "Номенклатура". ВыборкаПоНоменклатуре = ВыборкаПоНоменклатурнойГруппе.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); // Обойдем по циклу выборку с запроса по группировке "Номенклатура". Пока ВыборкаПоНоменклатуре.Следующий() Цикл // Определим переменные и присвоим им начальные значения. НомерСтроки = НомерСтроки + 1; Номенклатура = ВыборкаПоНоменклатуре.Номенклатура; Артикул = Неопределено; ЕдиницаИзмерения = Неопределено; // Получим выборку с запроса без группировок. Выборка = ВыборкаПоНоменклатуре.Выбрать(); // Обойдем по циклу выборку с запроса без группировок. Пока Выборка.Следующий() Цикл // Получим идентификатор по данным номера и даты документов движений. Идентификатор = ПолучитьИдентификаторДокументовДвижений(Выборка); // Найдем строку по идентификатору и заполним ее данными с запроса (для данных о номенклатуре). СтрокаПоИдентификатору = ТаблицаПоНоменклатуре.Найти(Идентификатор, "Идентификатор"); ЗаполнитьЗначенияСвойств(СтрокаПоИдентификатору, Выборка); // Найдем строку по идентификатору и заполним ее данными с запроса (для данных о группе номенклатуры). СтрокаПоИдентификатору = ТаблицаИтоговПоГруппах.Найти(Идентификатор, "Идентификатор"); СтрокаПоИдентификатору.КоличествоРул = СтрокаПоИдентификатору.КоличествоРул + Выборка.КоличествоРул; СтрокаПоИдентификатору.КоличествоУпак = СтрокаПоИдентификатору.КоличествоУпак + Выборка.КоличествоУпак; // Переприсвоим значения определенным перед этим переменным. Артикул = Выборка.Артикул; ЕдиницаИзмерения = Выборка.ЕдиницаИзмерения + "."; КонецЦикла; // Заполним данные области общих данных строки таблицы макета. ОбластьСтрокаОбщая.Параметры.Заполнить(ВыборкаПоНоменклатуре); ОбластьСтрокаОбщая.Параметры.НомерСтроки = НомерСтроки; ОбластьСтрокаОбщая.Параметры.Артикул = ПеревестиСтроку(Артикул, ЯзыкПечати, Заголовок, Ложь); ОбластьСтрокаОбщая.Параметры.Номенклатура = ПеревестиСтроку(Номенклатура, ЯзыкПечати, Заголовок, Ложь); ОбластьСтрокаОбщая.Параметры.ЕдиницаИзмерения = ПеревестиСтроку(ЕдиницаИзмерения, ЯзыкПечати, Заголовок, Ложь); // Выведем область общих данных строки таблицы макета. ТабДокумент.Вывести(ОбластьСтрокаОбщая); // Обойдем по циклу все строки из таблицы по номенклатуре и заполним их данными макет. Для Каждого СтрокаПоИдентификатору Из ТаблицаПоНоменклатуре Цикл // В зависимости от направления в таблице значений, выберем ту или другую область макета. Если СтрокаПоИдентификатору.Направление = "Наряд" Тогда ОбластьСтрока = ОбластьСтрокаЛевая; ИначеЕсли СтрокаПоИдентификатору.Направление = "Погрузка" Тогда ОбластьСтрока = ОбластьСтрокаПравая; Иначе Продолжить; // такого не может быть, но все же.... КонецЕсли; // Заполним данные области нарядов на отгрузку или реализации товаров строки таблицы макета. ОбластьСтрока.Параметры.Заполнить(СтрокаПоИдентификатору); // Присоединим область нарядов на отгрузку или реализации товаров строки таблицы макета. ТабДокумент.Присоединить(ОбластьСтрока); КонецЦикла; // После полной итерации очистим данный количеств в таблице по номенклатуре. ТаблицаПоНоменклатуре.ЗаполнитьЗначения(0, "КоличествоРул, КоличествоУпак"); КонецЦикла; // Заполним данные области общих данных итоговой строки таблицы макета. ОбластьСтрокаИтогоОбщая.Параметры.Заполнить(ВыборкаПоНоменклатурнойГруппе); ОбластьСтрокаИтогоОбщая.Параметры.НоменклатурнаяГруппа = ПеревестиСтроку("Разом по", ЯзыкПечати, Заголовок) + " " + ПеревестиСтроку(ВыборкаПоНоменклатурнойГруппе.НоменклатурнаяГруппа, ЯзыкПечати, Заголовок, Ложь) + ":"; // Выведем область общих данных итоговой строки таблицы макета. ТабДокумент.Вывести(ОбластьСтрокаИтогоОбщая); // Обойдем по циклу все строки из итоговой таблицы по номенклатурных группах и заполним их данными макет. Для Каждого СтрокаПоИдентификатору Из ТаблицаИтоговПоГруппах Цикл // В зависимости от направления в таблице значений, выберем ту или другую область макета. Если СтрокаПоИдентификатору.Направление = "Наряд" Тогда ОбластьСтрокаИтого = ОбластьСтрокаИтогоПравая; ИначеЕсли СтрокаПоИдентификатору.Направление = "Погрузка" Тогда ОбластьСтрокаИтого = ОбластьСтрокаИтогоПравая; Иначе Продолжить; // такого не может быть, но все же.... КонецЕсли; // Заполним данные области нарядов на отгрузку или реализации товаров итоговой строки таблицы макета. ОбластьСтрокаИтого.Параметры.Заполнить(СтрокаПоИдентификатору); // Присоединим область нарядов на отгрузку или реализации товаров итоговой строки таблицы макета. ТабДокумент.Присоединить(ОбластьСтрокаИтого); КонецЦикла; // После полной итерации очистим данный количеств в итоговой таблице по номенклатурных группах. ТаблицаИтоговПоГруппах.ЗаполнитьЗначения(0, "КоличествоРул, КоличествоУпак"); КонецЦикла; КонецЦикла; // Сбросим выборку по шапке и подвале на первую строку. ВыборкаШапкаИПодвал.Сбросить(); // Обработаем отдельно первую итоговую строку с запроса по шапке и подвале. Если ВыборкаШапкаИПодвал.Следующий() Тогда // Заполним данные области общих данных подвала макета. ОбластьПодвалаОбщая.Параметры.Заполнить(ВыборкаШапкаИПодвал); ОбластьПодвалаОбщая.Параметры.ИтогоПоДокументам = ПеревестиСтроку("Разом по зведеному наряду та погрузках", ЯзыкПечати, Заголовок); ОбластьПодвалаОбщая.Параметры.ОбщийВесНетто = ПеревестиСтроку("Загальна вага нетто, кг.", ЯзыкПечати, Заголовок); ОбластьПодвалаОбщая.Параметры.ОбщийВесБрутто = ПеревестиСтроку("Загальна вага брутто, кг.", ЯзыкПечати, Заголовок); ОбластьПодвалаОбщая.Параметры.ОбщийОбъем = ПеревестиСтроку("Загальний об'єм, м.куб.", ЯзыкПечати, Заголовок); ОбластьПодвалаОбщая.Параметры.Ответственный = ПеревестиСтроку("Відповідальний", ЯзыкПечати, Заголовок); ОбластьПодвалаОбщая.Параметры.Подпись = "(" + ПеревестиСтроку("підпис", ЯзыкПечати, Заголовок) + ")"; // Выведем область общих данных подвала макета. ТабДокумент.Вывести(ОбластьПодвалаОбщая); КонецЕсли; // Получим выборку с запроса по шапке и подвале по группировке "Заказы покупателей". ЗаказыВыборкиШапкиИПодвала = ВыборкаШапкаИПодвал.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); // Обойдем по циклу выборку с запроса по шапке и подвале по группировке "Заказы покупателей". Пока ЗаказыВыборкиШапкиИПодвала.Следующий() Цикл // Получим выборку с запроса по шапке и подвале без группировок. // Эта группировка нужна для того, чтоб все данный с одного заказа были один возле другого. ЭлементыВыборкиШапкиИПодвала = ЗаказыВыборкиШапкиИПодвала.Выбрать(); // Обойдем по циклу выборку с запроса по шапке и подвале без группировок. Пока ЭлементыВыборкиШапкиИПодвала.Следующий() Цикл // В зависимости какой тип документа в выборке, такую и область мы получим. Если ЭлементыВыборкиШапкиИПодвала.СортировочноеПоле = "Наряд" Тогда ОбластьПодвала = ОбластьПодвалаЛевая; ИначеЕсли ЭлементыВыборкиШапкиИПодвала.СортировочноеПоле = "Реализация" Тогда ОбластьПодвала = ОбластьПодвалаПравая; Иначе Продолжить; // такого не может быть, но все же.... КонецЕсли; // Заполним данные области нарядов на отгрузку или реализации товаров подвала макета. ОбластьПодвала.Параметры.Заполнить(ЭлементыВыборкиШапкиИПодвала); // Присоединим область нарядов на отгрузку или реализации товаров подвала макета. ТабДокумент.Присоединить(ОбластьПодвала); КонецЦикла; КонецЦикла; // Установим ориентацию страницы табличного документа в положение "Ландшафт". ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; Возврат ТабДокумент; КонецФункции // ПечатьСводногоНарядаПослеОтгрузки() |
|||
11
vicof
20.02.13
✎
18:59
|
У тебя в макете нет параметров, перебирай области
|
|||
12
korchak
20.02.13
✎
19:01
|
(11) Области тоже пустые
|
|||
13
korchak
20.02.13
✎
19:01
|
ТабДокумент.Области.Количество() = 0
|
|||
14
vicof
20.02.13
✎
19:03
|
А какие-нибудь данные выводятся?
|
|||
15
vicof
20.02.13
✎
19:03
|
в отчете
|
|||
16
korchak
21.02.13
✎
10:04
|
(14) да, все данные в ПФ выводяться
|
|||
17
ScreamSaw
21.02.13
✎
10:17
|
А в чём тогда проблема?)
|
|||
18
ScreamSaw
21.02.13
✎
10:27
|
Из СП:
ТабличныйДокумент (SpreadsheetDocument) Присоединить (Join) Описание: Присоединяет табличный документ к результирующему табличному документу, помещая его в следующей колонке правее самой правой выведенной колонки, начиная со строки, с которой выводился предыдущий табличный документ. Если я правильно понимаю, в твоём ТабДокумент нет ни областей, ни параметров - всё логично. Они есть в макете, заполненные области которого ты присоединяешь к ТабДокумент. А в нём изначально нет ни областей, ни параметров. Откуда им взяться? Хотя я могу ошибаться. |
|||
19
Defender aka LINN
21.02.13
✎
10:29
|
(18) Все правильно
|
|||
20
korchak
21.02.13
✎
10:30
|
(18) логично, а перебрать области макета можно?
|
|||
21
Defender aka LINN
21.02.13
✎
10:37
|
(20) Кто ж тебе запретит
|
|||
22
korchak
21.02.13
✎
10:43
|
всем, спасибо, тема закрыта)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |