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

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

  1. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Доброго всем времени суток!
    Подскажите как программно добавлять колонку в отчет. Делаю отчет задача вывести все заказы и дни визитов, дней визитов может быть от 1 до 7, для каждого дня визита должна быть своя колонка те от 1-7 колонок может быть. :unsure:
  2. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    метод присоеденить()


    Пример:
    Код:
    ТабДок = Новый ТабличныйДокумент;
    Секция = ТабДок.ПолучитьОбласть("R1C1");
    ТабДок.НачатьАвтогруппировкуКолонок();
    Секция.Область("R1C1").Текст = "Параметр";
    ТабДок.Вывести(Секция,1,"Группа 1",Ложь);
    Для К=1 По 10 Цикл
    Секция = ТабДок.ПолучитьОбласть("R1C1");
    Секция.Область().Текст = "А"+К;
    Секция.Область().ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
    ТабДок.Присоединить(Секция,2,"Группа 2",Истина);
    КонецЦикла;
    Секция.Область("R1C1").Текст = "Итого:";
    ТабДок.Присоединить(Секция,1,"Группа 2",Ложь);
    Секция.Область("R1C1").Текст = "Значение";
    ТабДок.Вывести(Секция,1,"Группа 2",Ложь);
    Цена = 10; Итог = Цена;
    Для К=1 По 10 Цикл
    Секция = ТабДок.ПолучитьОбласть("R1C1");
    Секция.Область().Текст = Цена;
    ТабДок.Присоединить(Секция,2,"Группа 2",Истина);
    Цена = Цена + 10;
    Итог = Итог + Цена;
    КонецЦикла;
    Секция.Область("R1C1").Текст = Итог;
    ТабДок.Присоединить(Секция,1,"Группа 2",Ложь);
    ТабДок.ЗакончитьАвтогруппировкуКолонок();
    ТабДок.ИтогиСправа = Истина;
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.Показать("Пример использования гор. автогруппировки");
    
  3. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Я так делаю почему то не может найти область, что то делаю не так
    Секция = ТабДок.ПолучитьОбласть("ДВ"); она есть в макете.
  4. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    PrinScreen можно макета?
  5. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26

    Вложения:

    • макет.jpg
      макет.jpg
      Размер файла:
      53,7 КБ
      Просмотров:
      342
  6. Доктор Руфус Бейли
    Offline

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

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

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Секция = ТабДок.ПолучитьОбласть("СтрокаДанных|ДВ");

    СтрокаДанных - это название области строки, на макете до конца не видно, наугад написал.

    И это, не зОголовок а зАголовок... глаз режет..
  8. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    А почему нет? Это же не макет, область не по наименованию тягается, а по адресу ячеек. Они в любом случае есть.
  9. Доктор Руфус Бейли
    Offline

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

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Тогда, кажется, я понял, в чём проблема, из-за которой выдаётся ошибка при получении области - я так понимаю, что в конструкции

    Код:
    Секция = ТабДок.ПолучитьОбласть("ДВ"); 
    
    
    "ТабДок" - тоже табличный документ. (поправьте меня, если я ошибаюсь - я ведь не весь код видел) Но ведь "ДВ" - это не адрес ячеек. Отсюда и ошибка.
  10. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Да вроде как макет, судя по скриншоту. Хотя я код тоже не видел.
    Он пытается получить наименование вертикальной области, без указания имени горизонтальной. Выше я написал код.
  11. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Поправляю

    Видишь "Имя области или адрес в формате "R1C1:R2C2", " так что не обязательно адрес
  12. Доктор Руфус Бейли
    Offline

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

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

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

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Можно нескромный вопрос: а каким образом будет происходить поиск по наименованию области? Я сунулся в синтаксис-помощник и (если скажете, что я слепой - поверю) не нашёл там описания ассоциации табличного документа с макетом, потому и спрашиваю.
  14. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Да, наверно вы правы. Дождемся пояснений от автора.
  15. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Я соглашусь с shurikvz. пусть напишет Секция = ТабДок.ПолучитьОбласть("СтрокаДанных|ДВ");
    Потому как просто я так понимаю, без "|" он ишет горизонтальную область и не находит ее
  16. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Да тут не в макете дело, в 1с значения RC - используются как имена ячейки. Ну т.е. R1C1 - как предопределенное имя ячейки 1-1. Так что-ли.
  17. Gfdtk
    Offline

    Gfdtk Опытный в 1С

    Регистрация:
    28 апр 2008
    Сообщения:
    158
    Симпатии:
    0
    Баллы:
    26
    ТабДок это что?
    Код:
    если ТабДок = Новый ТабличныйДокумент;
    
    
    то там именнованных секций не будет, они есть в:
    Код:
    Макет = ЭтотОбъект.ПолучитьМакет("ИмяМакет");
    
    
    или
    Код:
    Макет = ПолучитьОбщийМакет("ИмяМакет");
    
    
    Вообще можно что-то вроде этого:
    Код:
    ОбластьНачала = Макет.ПолучитьОбласть("Строка|Начало");//часть строки перед колонками дней
    ОбластьДня = Макет.ПолучитьОбласть("Строка|ДВ");//колонки дней
    ТабДок.ВЫВВЕСТИ(ОбластьНачала);
    Для ы = 1 по КоличествоДнейДляВывода Цикл
    ТабДок.ПРИСОЕДИНИТЬ(ОбластьДня);
    КонецЦикла;
    
    
  18. Доктор Руфус Бейли
    Offline

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

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Не в этом вопрос. Цитирую: "Имя области или адрес в формате "R1C1:R2C2". "R1C1", всё же, я так понимаю, адрес. "Имя области", это, как раз какое-нибудь "ОбластьСтрока". А каким образом абстрактный табличный документ (полученный, скажем, топорным "ТабДокумент = Новый ТабличныйДокумент") поймёт, что возвращать, если от него потрбуют

    Код:
    Область = ТабДокумент.ПолучитьОбласть("ОбластьСтрока");
    
    Если нет ассоциации с макетом, откуда он поймёт, что за зверь такой - "ОбластьСтрока"?
  19. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Секция = ТабДок.ПолучитьОбласть("СтрокаДанных|ДВ"); Данная конструкция не работает, не знаю почему, а вот R1C12 срабатывает
  20. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Так если написать "ОбластьСтрока" он и не поймет. Когда пишите R1C1 - это все равно если бы вы не для табличного документа, а для макета написали ПолучитьОбласть("R1|C1") (при условии конечно что эти области у нас заданы в макете). Ну, то есть то, что мы в макете именуем сами, в табличном документе каждая ячейка "проименована" по-умолчанию что-ли.
Похожие темы
  1. Andrey_Tkach
    Ответов:
    8
    Просмотров:
    669
Загрузка...

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