8.х добавление колонки в отчет

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Dmitrij, 18 май 2010.

  1. Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    "ТабДок" - это у вас табличный документ или макет? Получайте данные из макета - с табличным документом и возможностью получать из него данные по именнованным областям у нас сейчас разбор полётов. Лично я склоняюсь к тому, что проблема в том, что в пустом табличном документе этих областей просто нет.

    Иными словами, если у Дмития "ТабДок" - это не макет, а табличный документ, ему ничего возвратить и не должно? (с чего, собственно, и начинался разговор).
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Вас 2 человека попросили уже - приведите полностью ваш код, не понятно что у вас такое ТабДок - табличный документ или макет.
  3. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ну как бы так. Получается ваше предположение уже этом посте (вобщем 9 пост) было правильным. Однако меня интересует тогда - а как же автор получил свою область "Шапка"? (по логике сначала то должны работать с ней).
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    НУ просто там на макете не видно как полностью Область называется. Там СтрокаДан... а потом не видно

    НУ да Весь код не видно по этому не понятно что из Себя ТабДокПредставляет. Но согласен с Доктором что скорее не макет, т.к предпологаю что код писали по примеру, а там макета то не получают
  5. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Вот часть кода:
    Код:
    Макет = ПолучитьМакет("СистемностьОтгрузок"); 
    
    ТабДокумент = Новый ТабличныйДокумент; 
    Шапка = Макет.ПолучитьОбласть("Шапка"); 
    ТабДокумент.Вывести(Шапка);   
    СтрокаДанных = Макет.ПолучитьОбласть("СтрокаДанных"); 
    Для Каждого Стр Из Результат Цикл
    Логистика=0;
    СтрокаДанных.Параметры.Заполнить(Стр);
    ДеньЗаказа=ДеньНедели(Стр.ДатаЗаказа);
    СтрокаДанных.Параметры.ДеньЗаказа = кпкАгентПлюс.ДеньНеделиСтр(ДеньЗаказа);
    Попытка
    ТТ=Стр.ТорговаяТочка.ПолучитьОбъект();
    КолВизит=0;
    Если ТТ.пдбПонедельник Тогда
    КолВизит=КолВизит+1;
    ДВ1="Пн";
    
    СекцияШапка = Макет.ПолучитьОбласть("R1C12");
    Макет.НачатьАвтогруппировкуКолонок();
    
    СекцияШапка.Область().Текст = "ДВ"+КолВизит;
    СекцияШапка.Область().ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
    ТабДокумент.Присоединить(СекцияШапка);
    КонецЕсли;
    
    
    Я ошибся просто сообщений об ошибке не стало показалось что заработало, во общем вопрос актуален.
  6. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    А зачем вы каждый раз получаете в цикле область?

    давайте сделаем так :

    Перенесем СекцияШапка = Макет.ПолучитьОбласть("R1C12");
    и изменим
    вот сюда
    Код:
    ТабДокумент = Новый ТабличныйДокумент;
    Шапка = Макет.ПолучитьОбласть("Шапка");
    ТабДокумент.Вывести(Шапка);
    СтрокаДанных = Макет.ПолучитьОбласть("СтрокаДанных");
    СекцияШапка = Макет.ПолучитьОбласть("СтрокаДанных|ДВ");
    
    А из цикла уберем. Что получится?
  7. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    А мне кажется - фигня получится. Шапку он выводит за 1 раз, а потом в цикле пытается к области строка еще присоеденить часть области "СтрокаДанных|ДВ". А шапку то соответственно не надо раздвигать на такое же количество областей "Шапка|ДВ"?
  8. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    И потом, зачем вы в вывод вставили "Попытка"? Поэтому наверно и не видите ошибок. Далее данные "ТТ.пдбПонедельник" - разве нельзя получить в запросе? Зачем вы объект получаете? (хотя тут я полностью кода не вижу). КолВизит=КолВизит+1; - тоже возможно в запросе можно вычислить.
    "Макет.НачатьАвтогруппировкуКолонок();" - мне кажется не на своем месте стоит.
  9. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Не проходит, все тоже самое.
  10. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Я хочу чтоб если есть визиты тогда выводились колонки, а кол колонок зависит от кол визитов, а если нет тогда вообще не выводить максимум кол визитов 7 заголовки: дв1 дв2 дв3 и тд
  11. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Вам надо знать количество визитов до того как вы начнете выводить шапку. Посчитайте их заранее.
    Далее проименуйте вертикальные области (те что на вашем макете слева и справа от "ДВ"), чтобы было понятнее, допустим "СлеваОтДВ" и "СправаОтДВ" (название уж осмысленное сами придумайте).
    В итоге перед началом вывода макета вам нужно будет получить 6 областей макета:
    Область1 = ПолучитьОбласть("Шапка|СлеваОтДВ")
    Область2 = ПолучитьОбласть("Шапка|ДВ")
    Область3 = ПолучитьОбласть("Шапка|СправаОтДВ")
    Область4 = ПолучитьОбласть("СтрокаДанных|СлеваОтДВ")
    Область5 = ПолучитьОбласть("СтрокаДанных|ДВ")
    Область6 = ПолучитьОбласть("СтрокаДанных|СправаОтДВ")
    Далее, выводите область Область1, присоединяете к ней нужное количество Область2, присоединяете Область3.
    Аналогичные действия с Область4, Область5, Область6 в цикле по строкам.
  12. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Код:
    	Запрос=Новый Запрос;
    Запрос.УстановитьПараметр("ДатаНач",ДатаНач);
    Запрос.УстановитьПараметр("ДатаКон",ДатаКон);
    Запрос.Текст=
    "ВЫБРАТЬ
    |	ЗаказПокупателя.Дата КАК ДатаЗаказа,
    |	ЗаказПокупателя.Контрагент КАК ЮрЛицо,
    |	ЗаказПокупателя.ДоговорКонтрагента,
    |	ЗаказПокупателя.ДоговорКонтрагента.пдбТипТТ КАК Сегмент,
    |	ЗаказПокупателя.ДоговорКонтрагента.пдбТерритория КАК Территория,
    |	ЗаказПокупателя.ДоговорКонтрагента.пдбНаселенныйПункт КАК НаселенныйПункт,
    |	ЗаказПокупателя.ДоговорКонтрагента.пдбРайон КАК АдРайон,
    |	ЗаказПокупателя.ДоговорКонтрагента.пдбСВКоманда КАК СВКоманда,
    |	ЗаказПокупателя.ДоговорКонтрагента.пдбРайонТП КАК РайонТП,
    |	ЗаказПокупателя.ДоговорКонтрагента.пдбСостояниеТТ КАК СостояниеТТ,
    |	РеализацияТоваровУслуг.Дата КАК ДатаДоставки,
    |	ЗаказПокупателя.СуммаДокумента КАК СуммаЗаказа,
    |	РеализацияТоваровУслуг.Номер КАК НомерНакладной,
    |	кпкТорговыеТочки.НаименованиеПолное КАК ТорговаяТочка,
    |	кпкТорговыеТочки.Адрес КАК АдрТТ,
    |	кпкСведенияАгента.Ассортимент КАК ФокусГруппа,
    |	РеализацияТоваровУслуг.СуммаДокумента КАК СуммаДоставки,
    |	кпкТорговыеТочки.Ссылка КАК ТТ
    |ИЗ
    |	Документ.ЗаказПокупателя КАК ЗаказПокупателя
    |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |		ПО ЗаказПокупателя.Контрагент = РеализацияТоваровУслуг.Контрагент
    |			И ЗаказПокупателя.ДоговорКонтрагента = РеализацияТоваровУслуг.ДоговорКонтрагента
    |			И ЗаказПокупателя.Ссылка = РеализацияТоваровУслуг.Сделка
    |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.кпкТорговыеТочки КАК кпкТорговыеТочки
    |			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.кпкСведенияАгента КАК кпкСведенияАгента
    |			ПО кпкТорговыеТочки.Агент = кпкСведенияАгента.Агент
    |		ПО ЗаказПокупателя.Контрагент = кпкТорговыеТочки.Владелец
    |			И ЗаказПокупателя.ДоговорКонтрагента = кпкТорговыеТочки.ДоговорКонтрагента
    |ГДЕ
    |	ЗаказПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон";
    
    
    
    
    Результат=Запрос.Выполнить().Выгрузить();
    
    Макет = ПолучитьМакет("СистемностьОтгрузок"); 
    
    ТабДокумент = Новый ТабличныйДокумент; 
    
    Шапка = Макет.ПолучитьОбласть("Шапка"); 
    ТабДокумент.Вывести(Шапка);   
    СтрокаДанных = Макет.ПолучитьОбласть("СтрокаДанных"); 
    СекцияШапка = Макет.ПолучитьОбласть("Шапка|ДВ");	 
    
    Для Каждого Стр Из Результат Цикл
    Логистика=0;
    СтрокаДанных.Параметры.Заполнить(Стр);
    ДеньЗаказа=ДеньНедели(Стр.ДатаЗаказа);
    СтрокаДанных.Параметры.ДеньЗаказа = кпкАгентПлюс.ДеньНеделиСтр(ДеньЗаказа);
    //СекцияШапка = Макет.ПолучитьОбласть("R1C12");
    Если ТипЗнч(Стр.ТТ)<>Тип("Null") Тогда
    ТТ=Стр.ТТ.ПолучитьОбъект();
    КолВизит=0;
    Если ТТ.пдбПонеденик Тогда
    КолВизит=КолВизит+1;
    ДВ1="Пн";
    
    СекцияШапка.Параметры.Заголовок=  "ДВ"+КолВизит;
    ТабДокумент.Присоединить(СекцияШапка);
    
    КонецЕсли;
    КонецЕсли;
    
    Попытка
    
    Логистика=Число(Стр.СуммаДоставки)-Число(Стр.СуммаЗаказа);
    СтрокаДанных.Параметры.КачествоЛогистики = Логистика;
    СтрокаДанных.Параметры.Неделя=НеделяГода(Стр.ДатаДоставки);
    Если СтрокаДанных.Параметры.ДеньЗаказа = СтрокаДанных.Параметры.ДВ1 Тогда
    СтрокаДанных.Параметры.СистемныйЗаказ ="СЗ";
    Иначе
    СтрокаДанных.Параметры.СистемныйЗаказ ="НЗ";
    КонецЕсли;
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/исключение')">Исключение	</span> 
    СтрокаДанных.Параметры.КачествоЛогистики = "";
    КонецПопытки;
    
    ТабДокумент.Вывести(СтрокаДанных);  
    КонецЦикла;
    
    
    я вроде так и делаю, покажите пример пожалуйста
  13. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Плохо.. :unsure:
    У вас конфа нестандартная, сам запрос построить не смогу, рассказываю что вижу не так:
    В запросе следующие 2 строки:
    | ЗаказПокупателя.СуммаДокумента КАК СуммаЗаказа,
    | РеализацияТоваровУслуг.СуммаДокумента КАК СуммаДоставки,
    перепишите на
    | ЕстьNULL(ЗаказПокупателя.СуммаДокумента, 0) КАК СуммаЗаказа,
    | ЕстьNULL(РеализацияТоваровУслуг.СуммаДокумента, 0) КАК СуммаДоставки,
    после этого выкинте вашу попытка-исключение, а также преобразование к типу Число() в соответствующем выражении.

    Далее:
    Код:
    Если ТипЗнч(Стр.ТТ)<>Тип("Null") Тогда
    ТТ=Стр.ТТ.ПолучитьОбъект();
    КолВизит=0;
    Если ТТ.пдбПонеденик Тогда
    КолВизит=КолВизит+1;
    ДВ1="Пн";
    
    СекцияШапка.Параметры.Заголовок=  "ДВ"+КолВизит;
    ТабДокумент.Присоединить(СекцияШапка);
    
    КонецЕсли;
    КонецЕсли;
    
    Это все нафиг убирайте, я правда исходя из этого участка кода не совсем понял как у вас вычисляется количиство визитов (почему ТТ.пдбПонеденик?) вобщем структуру базы не вижу, но убирайте отсюда, думайте над запросом, чтобы у вас в запросе уже вычислялось количество визитов, и на выходе было число. Как вариант если уж слишком сложно - сделайте отдельным запросом.

    Конкретно по выводу: не так делаете, как я вам говорю. Где у вас те 6 областей что я вам назвал?
    Получите 6 областей после "Макет = ПолучитьМакет("СистемностьОтгрузок");", до первого "Вывести", сначала получите области чтобы у вас были, потом уж будете выводить-присоединять.
    Вот этой строки "ТабДокумент.Вывести(Шапка);" не должно там быть. Вы не выводите полностью область-строка "Шапка", а выводите ее по частям, в зависимости от количества визитов.
    Т.е. У вас будет 2 цикла один за другим, первый - просто выведет шапку, с необходимым количеством областей "Шапка|ДВ", а второй уже непосредственно будет работать с результатом вашего запроса и выводить собственно данные (включая "СтрокаДанных|ДВ");

    Следующее небольшое замечание: по ДатаНач и ДатаКон, поставьте НачалоДня(ДатаНач) и КонецДня(ДатаКон), когда передаете параметры в запрос.
  14. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Код:
    ОбластьНомера = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
    ОбластьКодов  = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
    ОбластьТовар   = Макет.ПолучитьОбласть("ШапкаТаблицы|Товар");
    ОбластьМест   = Макет.ПолучитьОбласть("ШапкаТаблицы|Мест");
    ОбластьДанных = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные1");
    ОбластьСкидок = Макет.ПолучитьОбласть("ШапкаТаблицы|Скидка");
    ОбластьСуммы  = Макет.ПолучитьОбласть("ШапкаТаблицы|Сумма");
    
    ТабДокумент.Вывести(ОбластьНомера);
    Если ВыводитьКоды Тогда
    ОбластьКодов.Параметры.ИмяКолонкиКодов = Колонка;
    ТабДокумент.Присоединить(ОбластьКодов);
    КонецЕсли;
    ТабДокумент.Присоединить(ОбластьТовар);
    Если флВыводитьМест Тогда
    ТабДокумент.Присоединить(ОбластьМест);
    КонецЕсли;
    
    ТабДокумент.Присоединить(ОбластьДанных);
    Если ЕстьСкидки Тогда
    ТабДокумент.Присоединить(ОбластьСкидок);
    КонецЕсли;
    ТабДокумент.Присоединить(ОбластьСуммы);
    
    ОбластьКолонкаТовар = Макет.Область("Товар");
    Если Не ВыводитьКоды Тогда
    ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки + 
    Макет.Область("КолонкаКодов").ШиринаКолонки;
    КонецЕсли;
    Если НЕ ЕстьСкидки Тогда
    ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки + 
    Макет.Область("СуммаБезСкидки").ШиринаКолонки +
    Макет.Область("СуммаСкидки").ШиринаКолонки;
    КонецЕсли;
    
    Если не флВыводитьМест Тогда
    ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки + 
    ФормированиеПечатныхФорм.РасчетШириныОбластиМакета("Мест", Макет);
    КонецЕсли;
    
    ОбластьНомера = Макет.ПолучитьОбласть("Строка|НомерСтроки");
    ОбластьКодов  = Макет.ПолучитьОбласть("Строка|КолонкаКодов");
    ОбластьТовар  = Макет.ПолучитьОбласть("Строка|Товар");
    ОбластьМест  = Макет.ПолучитьОбласть("Строка|Мест");
    ОбластьДанных = Макет.ПолучитьОбласть("Строка|Данные1");
    ОбластьСкидок = Макет.ПолучитьОбласть("Строка|Скидка");
    ОбластьСуммы  = Макет.ПолучитьОбласть("Строка|Сумма");
    
    
    Для каждого ВыборкаСтрокТовары из ЗапросТовары Цикл 
    
    Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
    Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
    Продолжить;
    КонецЕсли;
    
    ОбластьНомера.Параметры.НомерСтроки = ЗапросТовары.Индекс(ВыборкаСтрокТовары) + 1;
    ТабДокумент.Вывести(ОбластьНомера);
    
    Если ВыводитьКоды Тогда
    Если Колонка = "Артикул" Тогда
    ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Артикул;
    Иначе
    ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Код;
    КонецЕсли;
    ТабДокумент.Присоединить(ОбластьКодов);
    КонецЕсли;
    
    
    и т.д.
    ...
    КонецЦикла;
    
    
    
    Ну вот вам для примера кусок из типовой. Видите сначала выводится шапка. В цикле присоединяются нужные области.
    Затем уже выводятся строки документа.
  15. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Вообще все визиты хранятся в справочнике ТТ и тип булево это как то можно вытащить через запрос, просто я не разу не вытаскивал такого формата данные через запрос, в какой ТТ будет больше истин столько колонок и надо будет добавить.
    Мне бы с одной разобраться
  16. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    У вас не получится с одной. У вас ведь переменное число колонок. Пробуйте функции запросов МАКСИМУМ или КОЛИЧЕСТВО и отбор где ТТ.какойтотамреквизит=ИСТИНА. В консоли запросов стройте запрос, чтобы получить данные.
    Когда получите в консоли запросов данные - перенесете уже в отчет, и будете работать над выводом.
    Пока все, вечер пятницы - пора пиво пить. :unsure:
  17. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Спасибо у меня все получилось даже лучше чем хотел
Похожие темы
  1. Andrey_Tkach
    Ответов:
    8
    Просмотров:
    670
Загрузка...

Поделиться этой страницей