В этой статье научимся работать с областями табличного документа в 1С 8.3. Вы узнаете, как создать и вывести вертикальные области, как создать и вывести горизонтальные области, а также как работать с пересечением областей.
Создадим обработку 1С, в которой будем разрабатывать макеты для демонстрации работы с разными областями табличных документов 1С.
И начнем с вертикальных областей.
Вертикальные области табличного документа 1С 8.3
Выполним небольшую задачу: будем выводить в табличном документе пронумерованные колонки, количество которых задается с формы.
Для реализации, создадим у обработки макет табличного документа, который так и назовем «ВертикальныеОбласти».
Нам нужно создать вертикальную область в этом макете. Для этого выделим те колонки макета табличного документа, в которых мы хотим создать область, и выполним команду «Назначить имя», которая находится по пути «Главное меню – Таблица – Имена».
В открывшемся окне введем имя области.
После того, как мы зададим имя, на макете будет создана область: в поле сверху появится название области, а также отобразятся вертикальные полосы, которые будут эту область ограничивать.
Немного доработаем макет. Объединим ячейки во второй строке. Для этого необходимо их выделить, вызвать контекстное меню, и применить команду «Объединить» этого меню.
В объединенных ячейках установим в свойство Заполнение значение Параметр. У нас в этих ячейках будет выходить какой-то параметр, назовем его НомерКолонки, а также в свойство Горизонтальное положение установим значение Центр.
И увеличим размер шрифта.
Всё, с макетом мы закончили.
Следующим шагом, разработаем основную форму обработки. На этой управляемой форме создадим реквизит «Количество колонок» (тип целое и неотрицательно число), а также команду формы «Вывести вертикальные области».
У команды формы создадим клиентский обработчик, который будет вызывать серверную бесконтекстную функцию.
&НаСервереБезКонтекста Функция ПолучитьТабличныйДокументВертикальныеОбласти(КоличествоОбластей) ТабличныйДокумент = Новый ТабличныйДокумент; Возврат ТабличныйДокумент; КонецФункции // ПолучитьТабличныйДокументВертикальныеОбласти() &НаКлиенте Процедура ВывестиВертикальныеОбласти(Команда) Если КоличествоКолонок = 0 Тогда Возврат; КонецЕсли; ТабДок = ПолучитьТабличныйДокументВертикальныеОбласти(КоличествоКолонок); ТабДок.Показать("Вертикальные области"); КонецПроцедуры
В функции ПолучитьТабличныйДокументВертикальныеОбласти мы получим макет обработки, получим область макета «Колонка», создадим простой цикл от 1 до значения реквизита формы количество колонок, а потом в теле цикла будет в табличном документе присоединять область при помощи метода Присоединить(), который добавляет ячейки области по горизонтали, как бы присоединяя их.
&НаСервереБезКонтекста Функция ПолучитьТабличныйДокументВертикальныеОбласти(КоличествоОбластей) ТабличныйДокумент = Новый ТабличныйДокумент; Макет = Обработки.ПримерТабличныхДокументов.ПолучитьМакет("ВертикальныеОбласти"); ВертикальнаяОбласть = Макет.ПолучитьОбласть("Колонка"); Для н = 1 по КоличествоОбластей Цикл ВертикальнаяОбласть.Параметры.НомерКолонки = "Колонка №" + Строка(н); ТабличныйДокумент.Присоединить(ВертикальнаяОбласть); КонецЦикла; Возврат ТабличныйДокумент; КонецФункции // ПолучитьТабличныйДокументВертикальныеОбласти()
И у нашей обработки будет следующий результат работы.
Горизонтальные области табличного документа 1С 8.3
В этой задаче будем выводить в табличном документе пронумерованные строки. Для этого создадим макет обработки, который назовем «Горизонтальные области». В этом макете выделим строки, и выполним уже знакомую команду «Назначить имя» («Главное меню – Таблица – Имена»).
В результате выполнения команды, выйдет окно, где нужно ввести название области, после того, как введем название области, макет табличного документа изменится: в поле слева появится название области, а также отобразятся горизонтальные полосы, которые будут эту область ограничивать.
Также как и с предыдущим макетом (вертикальные области), объединим ячейки, сделаем их параметром, увеличим шрифт и выполним центрирование.
На основной форме обработки создадим новый реквизит КоличествоКолонок (тип Число) и команду ВывестиГоризонтальныеОбласти.
Далее, мы создаем обработчик события команды формы и функцию, которая возвращает табличный документ с горизонтальными областями. В этом коде будет все точно также, как и в коде, который формировал табличный документ с вертикальными областями, но только вместо метода Присоединить будет использоваться метод Вывести, который добавляет ячейки области по вертикали.
&НаСервереБезКонтекста Функция ПолучитьТабличныйДокументГоризонтальныеОбласти(КоличествоОбластей) ТабличныйДокумент = Новый ТабличныйДокумент; Макет = Обработки.ПримерТабличныхДокументов.ПолучитьМакет("ГоризонтальныеОбласти"); ГоризонтальнаяОбласть = Макет.ПолучитьОбласть("Строки"); Для н = 1 по КоличествоОбластей Цикл ГоризонтальнаяОбласть.Параметры.НомерСтроки = "Строка №" + Строка(н); ТабличныйДокумент.Вывести(ГоризонтальнаяОбласть); КонецЦикла; Возврат ТабличныйДокумент; КонецФункции // ПолучитьТабличныйДокументГоризонтальныеОбласти() &НаКлиенте Процедура ВывестиГоризонтальныеОбласти(Команда) Если КоличествоСтрок = 0 Тогда Возврат; КонецЕсли; ТабДок = ПолучитьТабличныйДокументГоризонтальныеОбласти(КоличествоСтрок); ТабДок.Показать("Горизонтальные области"); КонецПроцедуры
И результат работы этого кода.
Таким образом. Метод Присоединить табличного документа добавляет области по горизонтали таблицы, а метод Вывести – по вертикали.
Научимся выводить таблицу.
Пересечение областей табличного документа 1С 8.3
Сделаем возможность вывода таблицы с определенным количеством строк и колонок, которое будет задаваться из реквизитов формы, созданных ранее.
Для этого создадим новый макет табличного документа, с пересекающимися вертикальными и горизонтальными областями.
В пересечении областей объединим ячейки, зададим параметр, отцентрируем, а также обведем объединенную ячейку.
На форме обработки создадим команду ВывестиТаблицу.
Создадим обработчик команды и функцию, которая будет формировать таблицу.
&НаСервереБезКонтекста Функция ПолучитьТабличныйДокументТаблицу(КоличествоКолонок, КоличествоСтрок) ТабличныйДокумент = Новый ТабличныйДокумент; Макет = Обработки.ПримерТабличныхДокументов.ПолучитьМакет("ПересечениеОбластей"); ОбластиЯчейки = Макет.ПолучитьОбласть("Строки|Колонки"); Для н = 1 по КоличествоСтрок Цикл ОбластиЯчейки.Параметры.Область = Строка(н) + ".1"; ТабличныйДокумент.Вывести(ОбластиЯчейки); Для к = 2 по КоличествоКолонок Цикл ОбластиЯчейки.Параметры.Область = Строка(н) + "." + Строка(к); ТабличныйДокумент.Присоединить(ОбластиЯчейки); КонецЦикла; КонецЦикла; Возврат ТабличныйДокумент; КонецФункции &НаКлиенте Процедура ВвестиТаблицу(Команда) Если КоличествоСтрок = 0 или КоличествоКолонок = 0 Тогда Возврат; КонецЕсли; ТабДок = ПолучитьТабличныйДокументТаблицу(КоличествоКолонок, КоличествоСтрок); ТабДок.Показать("Таблица"); КонецПроцедуры
Пересечение областей на табличной документе задается таким способом: «Строки|Колонки». Пишем название одной области, вертикальную черту и название другой области, которая с ней пересекается. Так мы получим именно пересечение областей, с которым дальше и будем работать: выводить и присоединять.
В этой функции делаем два цикла. В первом цикле обходим и создаем строки. Первую ячейку строки (она же первая ячейка колонки) мы выводим в табличный документ методом Вывести, а потом начинаем делать цикл по колонкам и уже присоединяем области по горизонтали, с помощью метода Присоединить. Когда колонки заканчиваются мы выходим из цикла по колонками и начинаем следующую итерацию цикла по строкам, выводя опять новую ячейку ниже по таблице с помощью метода Вывести. И так далее.
В этот раз у нас будет следующий результат.
Видео ниже почти повторяет статью, но в нем есть БОНУС. В конце видео я показываю, как добавить в таблицу вывод шапки и боковика, а также вывожу табличный документ на управляемой форме 1С.
Смотрите в этом видео:
Другие статьи про табличные документы в 1С:
Создание макета табличного документа в 1С 8.3
Вывод на печать табличного документа в 1С 8.3
Табличный документ на управляемой форме 1С 8.3
Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы:
Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009
12 – 20.06.13 – 18:07
(4)(5) Внимательно смотрел?
КоллекцияОбластейТабличногоДокумента (SpreadsheetDocumentAreaCollection)
Найти (Find)
Синтаксис:
Найти(<НаименованиеОбласти>)
Параметры:
<НаименованиеОбласти> (обязательный)
Тип: Строка.
Имя области ячеек табличного документа или рисунка.
Возвращаемое значение:
Тип: ОбластьЯчеекТабличногоДокумента; РисунокТабличногоДокумента, Неопределено.
Если указанная область отсутствует, то возвращается значение Неопределено.
Описание:
Осуществляет поиск области ячеек табличного документа или рисунка табличного документа по имени.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Пример:
Макет = ЭтотОбъект.ПолучитьМакет(“СоставПоказателей”);
ТекОбласть = Макет.Области.Найти(ИмяОбласти);
18 – 20.06.13 – 18:29
(17) Ну как не судить строго, если лентяй, а?
ТабличныйДокумент (SpreadsheetDocument)
НайтиТекст (FindText)
Синтаксис:
НайтиТекст(<Строка>, <Начало>, <Где>, <ИскатьПоСтрокам>, <ЯчейкаЦеликом>, <ИскатьВперед>, <ИгнорироватьРегистр>)
Параметры:
<Строка> (обязательный)
Тип: Строка.
Искомый текст.
<Начало> (необязательный)
Тип: ОбластьЯчеекТабличногоДокумента.
Область, после которой начинать поиск. Если параметр не указан, поиск будет выполнен с начала табличного документа.
<Где> (необязательный)
Тип: ОбластьЯчеекТабличногоДокумента.
Область, в которой осуществляется поиск. Если параметр не указан, поиск будет выполнен по всем ячейкам табличного документа.
<ИскатьПоСтрокам> (необязательный)
Тип: Булево.
Определяет последовательность обхода ячеек при поиске.
Истина – искать по текущей строке, затем переходить на следующую и т.д. в общем направлении поиска, Ложь – искать по текущей колонке, затем переходить на следующую и т.д. в общем направлении поиска.
Значение по умолчанию: Истина
<ЯчейкаЦеликом> (необязательный)
Тип: Булево.
Истина – искать только такие ячейки, в которых с искомым текстом совпадает весь текст ячейки, Ложь – искать часть текста ячейки.
Значение по умолчанию: Ложь
<ИскатьВперед> (необязательный)
Тип: Булево.
Определяет направление поиска: Истина – искать вперед; Ложь – искать назад.
Значение по умолчанию: Истина
<ИгнорироватьРегистр> (необязательный)
Тип: Булево.
Истина – без учета регистра, Ложь – поиск с учетом регистра.
Значение по умолчанию: Ложь
Возвращаемое значение:
Тип: ОбластьЯчеекТабличногоДокумента; РисунокТабличногоДокумента.
Область, содержащая искомый текст. Если текст не найден, то возвращается значение Неопределено.
Описание:
Осуществляет поиск текста в ячейках табличного документа.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Пример:
// чтобы посмотреть работу данного метода, добавьте
// следующие строки в конец примера метода НачатьГруппуСтрок()
Отдел = “Итого2”;
Область=ТабДок.НайтиТекст(Отдел);
Если ТипЗнч(Область)=Тип(“Неопределено”) Тогда
Сообщить(“Значение не найдено!”);
Иначе
Поз = Найти(Область.Имя,”C”);
Имя= Лев(Область.Имя,Поз)+
Строка(Число(Прав(Область.Имя,СтрДлина(Область.Имя)-Поз))+1);
Сообщить(“Итог по отделу 2 = “+ТабДок.Область(Имя).Текст);
КонецЕсли;
19 – 20.06.13 – 18:30
Никаких лишних попыток – лично меня они достали в режиме “Остановка по ошибке” останавливать код, где не надо.
(0) К слову, альтернативно, если бы не было метода (12) можно было бы проверить есть ли в объекте поле с определенным именем, это делается так:
ИдентификаторНезаполненности = Новый УникальныйИдентификатор;
СтруктураПроверки = Новый Структрура(“ТвояОбласть”, ИдентификаторНезаполненности);
ЗаполнитьЗначенияСвойств(СтруктураПроверки, ТвойОбъектСИменамиОбластей);
Если СтруктураПроверки.ТвояОбласть <> ИдентификаторНезаполненности Тогда
// такая область есть
Иначе
// такой области нет
КонецЕсли;
Понятен смысл кода выше? Он помог мне избавиться от бесчисленного множества блоков Попытка – Исключение в партнерских тиражниках. Это так, на будущее…
- Раздел
- Общие объекты
- Подразделы
- Табличный документ
- ТипСтатьи
- Методы
Синтаксис:
Найти(<НаименованиеОбласти>)
Параметры:
<НаименованиеОбласти> (обязательный)
Тип: Строка.
Имя области ячеек табличного документа или рисунка.
Возвращаемое значение:
Тип: ОбластьЯчеекТабличногоДокумента; РисунокТабличногоДокумента; Неопределено.
Если указанная область отсутствует, то возвращается значение Неопределено.
Описание:
Осуществляет поиск области ячеек табличного документа или рисунка табличного документа по имени.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Пример:
Макет = ЭтотОбъект.ПолучитьМакет("СоставПоказателей");
ТекОбласть = Макет.Области.Найти(ИмяОбласти);
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
2017-12-19T18:34:15+00:00<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент
Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Как создать табличный макет в 1С.
Оглавление (нажмите, чтобы раскрыть)
&НаКлиенте Процедура ФормируемПечатнуюФормуИзТабличногоМакета(Команда) // В макетах обработки у нас определен макет с именем // ТабличныйМакет и типом ТабличныйДокумент. // Вот как создаются такие макеты: // helpme1s.ru/kak-sozdat-tablichnyj-maket-v-1s // Сформируем печатную форму на основе этого макета. // Важно понимать, что сама печатная форма - это тоже // табличный документ, просто составленный из кусочков других // документов (макетов). // Печатная форма формируется на сервере, а затем // возвращается обратно на клиент... ПечатнаяФорма = СформироватьПечатнуюФормуИзТабличногоДокумента(); НастроитьКолонтитулы(ПечатнаяФорма); НастроитьПараметрыПечати(ПечатнаяФорма); // ... чтобы вывести её пользователю в виде отдельного окна ПечатнаяФорма.Показать( "Наш отчёт" // заголовок окна с отчётом ); // после показа пользователь может сам и распечатать // и сохранить эту форму, но ... // .. мы можем программно сами сохранить форму в файл в нужном формате //ПечатнаяФорма.Записать( // СлужебныйНаКлиенте.СоздатьПапкуДляЭкспериментов() + "Наш отчёт.xls", // ТипФайлаТабличногоДокумента.XLS //); // .. или сразу отправить её на принтер //ПечатнаяФорма.Напечатать( // РежимИспользованияДиалогаПечати.НеИспользовать); КонецПроцедуры /// Как сформировать печатную форму из табличного документа в 1с 8.3, 8.2 &НаСервере Функция СформироватьПечатнуюФормуИзТабличногоДокумента() // Получаем макет, сохраненный в нашей обработке. Макет = Обработки.ОбработкаДляИспытаний.ПолучитьМакет("ТабличныйМакет"); // Вот так можно изменить табличный макет программно, // уже после его создания. МеняемТабличныйДокументПрограммно(Макет); ПечатнаяФорма = Новый ТабличныйДокумент; // # Шапка документа # // Получаем область "Шапка" из макета. Шапка = Макет.ПолучитьОбласть("Шапка"); // Заполняем её параметры. Шапка.Параметры.Номер = 1; Шапка.Параметры.Дата = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy"); // Выводим её в нашу печатную форму. ПечатнаяФорма.Вывести(Шапка); // # Заголовок табличной части # ТабличнаяЧастьЗаголовок = Макет.ПолучитьОбласть("ТабличнаяЧастьЗаголовок"); ПечатнаяФорма.Вывести(ТабличнаяЧастьЗаголовок); // # Строки табличной части # // Если при выводе строк наша таблица не поместится на страницу - // будем повторять заголовок таблицы в начале страницы. // Выводим с 3 по 4 строки - это как раз заголовок таблицы. // Использовать область "ТабличнаяЧастьЗаголовок" не получится, // так как нужны именно строки целиком. ПечатнаяФорма.ПовторятьПриПечатиСтроки = Макет.Область(3,,4); ТабличнаяЧастьСтрока = Макет.ПолучитьОбласть("ТабличнаяЧастьСтрока"); СсылкаНаКлубнику = Справочники.Номенклатура.НайтиПоНаименованию("Клубника"); // Сгруппируем строки таблицы в сворачивающийся блок. ПечатнаяФорма.НачатьГруппуСтрок("Товар", Истина); Для Шаг = 1 По 100 Цикл ТабличнаяЧастьСтрока.Параметры.Номенклатура = СсылкаНаКлубнику; ТабличнаяЧастьСтрока.Параметры.Количество = Шаг; // В макете мы выделили ячейку с номенклатурой и прописали // её параметр расшифровки "РасшифровкаНоменклатуры". // Заполним этот параметр, чтобы когда пользователь кликнет // два раза по товару - открылась его форма. // Дополнительный пример обработки расшифровки - см. ниже, // когда мы выводим табличный документ в поле формы. ТабличнаяЧастьСтрока.Параметры.РасшифровкаНоменклатуры = СсылкаНаКлубнику; ПечатнаяФорма.Вывести(ТабличнаяЧастьСтрока); КонецЦикла; // Закончим начатую группировку. ПечатнаяФорма.ЗакончитьГруппуСтрок(); Возврат ПечатнаяФорма; КонецФункции /// Как настроить колонтитулы печатной формы в 1с 8.3, 8.2 &НаКлиенте Процедура НастроитьКолонтитулы(ПечатнаяФорма) // Верхний колонтитул. ПечатнаяФорма.ВерхнийКолонтитул.Выводить = Истина; ПечатнаяФорма.ВерхнийКолонтитул.НачальнаяСтраница = 1; ПечатнаяФорма.ВерхнийКолонтитул.ТекстВЦентре = "Этот отчёт сделан нами для тестов"; ПечатнаяФорма.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Центр; // Нижний колонтитул. ПечатнаяФорма.НижнийКолонтитул.Выводить = Истина; ПечатнаяФорма.НижнийКолонтитул.ТекстСправа = "[&НомерСтраницы] из [&СтраницВсего]"; ПечатнаяФорма.НижнийКолонтитул.ТекстВЦентре = "[&Дата][&Время]"; // Использованные выше конструкции [&НомерСтраницы] и т.п. предопределены // платформой. КонецПроцедуры /// Как настроить параметры печати табличного документа в 1с 8.3, 8.2 &НаКлиенте Процедура НастроитьПараметрыПечати(ПечатнаяФорма) // Можно установить конкретный масштаб: ПечатнаяФорма.МасштабПечати = 60; // 60% // Или указать вариант "по ширине страницы" ПечатнаяФорма.АвтоМасштаб = Истина; // Поля страницы ПечатнаяФорма.ПолеСлева = 10; ПечатнаяФорма.ПолеСверху = 10; ПечатнаяФорма.ПолеСправа = 10; ПечатнаяФорма.ПолеСнизу = 10; // Партрет или альбом (ландшафт). ПечатнаяФорма.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; // Двусторонняя печать позволяет очень экономить бумагу. ПечатнаяФорма.ДвусторонняяПечать = ТипДвустороннейПечати.Нет; // Количество страниц на листе при выводе документа на печать. // 1 - одна страницы, 2 - две, 0 - автоматическое определение. ПечатнаяФорма.ЭкземпляровНаСтранице = 1; // Количество копий документа, которое нужно напечатать. ПечатнаяФорма.КоличествоЭкземпляров = 1; // Если печатаем несколько экземпляров - очень удобная галка. ПечатнаяФорма.РазборПоКопиям = Истина; // Не будем отображать сетку пользователю. ПечатнаяФорма.ОтображатьСетку = Ложь; // А также запретим редактирование ячеек отчёта. ПечатнаяФорма.ТолькоПросмотр = Истина; // Зафиксируем верхние 4 строки таблицы, чтобы // пользователю было удобно прокручивать // вниз печатную форму. ПечатнаяФорма.ФиксацияСверху = 4; ПечатнаяФорма.ФиксацияСлева = 0; КонецПроцедуры /// Как изменить табличный документ программно в 1с 8.3, 8.2 &НаСервере Процедура МеняемТабличныйДокументПрограммно(Макет) ОбластьЯчеек = Макет.Область("Шапка"); ОбластьЯчеек.ЦветТекста = Новый Цвет(255, 0, 0); ОбластьЯчеек.ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.БольшойПунктир, 2); ОбластьЯчеек.ГраницаСлева = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.БольшойПунктир, 2); ОбластьЯчеек.ГраницаСправа = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.БольшойПунктир, 2); ОбластьЯчеек.ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.БольшойПунктир, 2); ОбластьЯчеек.Примечание.Текст = "Привет"; // и т.д. и т.п. КонецПроцедуры /// Как в обработать расшифровку в отчёте в 1с 8.3, 8.2 &НаКлиенте Процедура ПолеСПечатнойФормойОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) // Дополнительная обработка расшифровки возможна только // для табличного документа, который выведен на форму. // Это событие мы прописали для элемента формы, который связан // с реквизитом, имеющим тип "ТабличныйДокумент". Сообщить("Обработка расшифровки"); Сообщить(Элемент.ТекущаяОбласть.Имя); Сообщить(Расшифровка); // Мы не хотим, чтобы открывалось значение расшифровки, // которое мы программно прописали в печатной форме. // Остановим дальнейшую обработку расшифровки. СтандартнаяОбработка = Ложь; КонецПроцедуры /// Как вывести табличный документ на форму в 1с 8.3, 8.2 &НаКлиенте Процедура ВыводимТабличныйДокументНаФорму(Команда) // Предварительно создаём на форме реквизит с именем // "ПолеСПечатнойФормой" и типом ТабличныйДокумент, // а затем перетаскиваем его в элементы формы. ВыводимТабличныйДокументНаФормуНаСервере(); КонецПроцедуры &НаСервере Процедура ВыводимТабличныйДокументНаФормуНаСервере() // Формируем табличный документ. ПечатнаяФорма = СформироватьПечатнуюФормуИзТабличногоДокумента(); // Выводим его в соотв. реквизит формы. ПолеСПечатнойФормой.Очистить(); ПолеСПечатнойФормой.Вывести(ПечатнаяФорма); // После этого он автоматически отобразится // в поле формы, с которым он связан. КонецПроцедуры /// Как использовать табличный документ для ввода данных в 1с 8.3, 8.2 &НаКлиенте Процедура НастраиваемТаблицуДляВводаДанных(Команда) // В начале выводим в поле формы табличный документ // из макета с именем "ТабличныйМакетДляВвода" НастраиваемТаблицуДляВводаДанныхНаСервере(); // После этого пользователь должен ввести значение, // а мы его получим в коде ниже. КонецПроцедуры &НаСервере Процедура НастраиваемТаблицуДляВводаДанныхНаСервере() ПолеСПечатнойФормой.Очистить(); Макет = Обработки.ОбработкаДляИспытаний.ПолучитьМакет("ТабличныйМакетДляВвода"); Форма = Макет.ПолучитьОбласть("ФормаВвода"); ПолеСПечатнойФормой.Вывести(Форма); КонецПроцедуры &НаКлиенте Процедура УзнатьКакойЖеТоварВыбралПользователь(Команда) // Имя ячейки ввода мы задали в макете. ПолеВвода = ПолеСПечатнойФормой.Область("ПолеТовар"); Если ПолеВвода.Значение.Пустая() Тогда Сообщить("Укажите товар в табличной форме ввода!"); Иначе Сообщить("Вы выбрали " + ПолеВвода.Значение); КонецЕсли; КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере
Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Как создать табличный макет в 1С.
Работа с табличным документом в языке 1С 8.3, 8.2 (в примерах)
<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
Сделав недавно подряд с десяток отчетов с макетами в виде табличного документа, задумался о том, что было бы неплохо сократить часть кода, отвечающего за описание областей макета. Возникла идея набросать функционал, позволяющий собрать все именованные области макета в коллекцию, нежели каждый раз объявлять для этого переменные. В итоге получилось довольно простое решение. Оно позволяет получать как перечень областей макета, так и пересечения горизонтальных и вертикальных областей. К тому же, при добавлении по мере разработки отчета новых именованных областей в макет нет необходимости дополнительно описывать их в коде.
Основной код вынесен в общий модуль ОбластиМакета:
Функция ЭтоСтрока(Область) Возврат Область.Лево = 0 И Область.Право = 0; КонецФункции Функция ЭтоСтолбец(Область) Возврат Область.Верх = 0 И Область.Низ = 0; КонецФункции Функция ПолучитьОбласти(Макет, ПересечениеОбластей = Ложь) Экспорт Перем мПересечения; Если ПересечениеОбластей Тогда мПересечения = Новый Массив; Для Каждого Область Из Макет.Области Цикл Если ЭтоСтолбец(Область) Тогда мПересечения.Добавить(Область.Имя); КонецЕсли; КонецЦикла; КонецЕсли; СтруктураОбластей = Новый Структура; Для Каждого Область Из Макет.Области Цикл Если ПересечениеОбластей Тогда Если ЭтоСтолбец(Область) Тогда Продолжить; КонецЕсли; Если ЭтоСтрока(Область) Тогда Для Каждого Пересечение Из мПересечения Цикл СтруктураОбластей.Вставить(Область.Имя + Пересечение, Макет.ПолучитьОбласть(Область.Имя + "|" + Пересечение)); КонецЦикла; Иначе СтруктураОбластей.Вставить(Область.Имя, Макет.ПолучитьОбласть(Область.Имя)); КонецЕсли; Иначе СтруктураОбластей.Вставить(Область.Имя, Макет.ПолучитьОбласть(Область.Имя)); КонецЕсли; КонецЦикла; Возврат СтруктураОбластей; КонецФункции
Теперь достаточно передать в функцию ПолучитьОбласти необходимый макет и мы получим коллекцию его областей в виде структуры, в которой имена ключей соответствуют именам областей.
Набросаем для теста простую обработку, макет которой содержит как горизонтальные, так и вертикальные области, а так же добавим именованную ячейку.
Процедура КнопкаСформироватьНажатие(Кнопка) Макет = ПолучитьМакет("Макет"); Обл = ОбластиМакета.ПолучитьОбласти(Макет, ПолучитьПересечения); КонецПроцедуры
Теперь посмотрим в отладчике, какие данные попадают в структуру при разных значениях флага “ПолучитьПересечения”.
ПолучитьПересечения = Ложь |
ПолучитьПересечения = Истина |
Привычный код
ОблСтрока1 = Макет.ПолучитьОбласть("Строка1"); //.. прочий код ОблСтрока1.Параметры.ПП = 1;
при использовании моего способа аналогичен
Обл.Строка1.Параметры.ПП = 1;
где Обл – структура областей, полученная через функцию ПолучитьОбласти.