Добавить колонку в печатную форму 1с
В предыдущей статье мы научились создавать таблицу значений, как в программном модуле, так и на форме, интерактивно.
Но создать таблицу значений, это только малая часть работы, поскольку сама по себе таблица значений нам абсолютно не нужна. Чтобы начать с ней работать, необходимо ее, как минимум, заполнить колонками.
Программное создание колонок таблицы значений в 1С
Программно добавить колонку в таблицу значений 1С просто. Для этого необходимо использовать одно из основополагающих свойств таблиц значений — это свойство Колонки. Данное свойство представляет собой коллекцию значений, в которой хранятся все колонки конкретной таблицы, и имеет тип Коллекция колонок таблицы значений.
У объекта Коллекция колонок таблицы значений существует два метода по созданию новых колонок. Это Добавить и Вставить.
Метод Добавить – добавляет новую колонку в конец коллекции, а метод Вставить – вставляет колонку в нужное место по соответствующему индексу.
ФИО = Новый ТаблицаЗначений ;
ФИО . Колонки . Добавить ( «Фамилия» );
ФИО . Колонки . Добавить ( «Имя» );
ФИО . Колонки . Добавить ( «Отчество» );
В этом примере я использовал самый простой вариант использование метода Добавить: мы указываем только название колонки и всё.
Рассмотрим синтаксис этого метода
Как видно, у данного метода всего четыре параметра.
Параметр Имя — это имя колонки таблицы значений, задается также как и имя переменной. Обязательный параметр.
Параметр Тип имеет тип ОписаниеТипов, задает тип данных, которые будут храниться в колонке, т.е. при помощи этого параметра, мы задаем тип колонки таблицы значений.
Параметр Заголовок имеет тип Строка и задает заголовок колонки, который отобразиться пользователю, если она будет создана программно на форме.
Параметр Ширина имеет тип Число и задает длину колонки(количество символов).
Если мы зададим все параметры, то наше создание колонок будет выглядеть следующим образом.
ОписаниеТиповСтрока = Новый ОписаниеТипов ( «Строка» );
ОписаниеТиповДата = Новый ОписаниеТипов ( «Дата» )
ФИО = Новый ТаблицаЗначений ;
ФИО . Колонки . Добавить ( «Фамилия» , ОписаниеТиповСтрока , «Фамилия» , 50 );
ФИО . Колонки . Добавить ( «Имя» , ОписаниеТиповСтрока , «Имя» , 50 );
ФИО . Колонки . Добавить ( «Отчество» , ОписаниеТиповСтрока , «Отчество» , 50 );
ФИО . Колонки . Добавить ( «ДатаРождения» , ОписаниеТиповДата , «Дата рождения» , 10 );
Метод Вставить имеет следующий синтаксис:
Метод Вставить имеет синтаксис, как и у метода Добавить, но только появился первый параметр Индекс, он указывает тот индекс, на место которого будет вставляться новая колонка.
Доработаем предыдущий код:
ФИО . Колонки . Вставить ( 3 , «ФИО» , ОписаниеТиповСтрока , «ФИО» , 50 );
В нашем случае колонка ФИО встала точно между Отчеством и Датой рождения.
Создание колонок в таблице значений на форме
Если мы создали таблицу значений на управляемой форме 1С 8.3 в виде реквизита формы, то колонки также можно создать интерактивно. Для этого нужно выделить нужный реквизит, и нажать на кнопку «Добавить колонку реквизита».
После этого колонка будет создана, и нам нужно задать ей имя, заголовок и тип.
Если таблица значений размещена на управляемой форме в виде элемента формы Таблица, то вновь созданную колонку можно разместить в таблице двумя способами.
Первый способ – перетащить колонку из реквизитов в элементы.
После этого, колонка появиться под таблицей, а сама таблица отобразиться на форме (таблица без колонок на форме не отображается).
Второй способ – создать новое поле «под» таблицей на форме и привязать к нему нужную колонку таблицы значений 1С.
Для того, чтобы создать новое поле, привязанное к таблице на форме 1С, нужно выделить эту таблицу, нажать на кнопку «Добавить» панели управления дерева Элементы, и в открывшемся окне выбрать тип элемента «Поле».
После этого нужно задать имя нового поля и связать его с колонкой таблицы значений, используя свойство «ПутьКДанным».
После этого колонка сразу же появиться в таблице на форме 1С.
О работе со строками в таблицах значений читайте в статье по ссылке:
Таблице значений 1С: работа со строками
Более подробно о работе с таблицами значений и другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
первые 4 колонки не изменны, а 5 колонка будет повторяться при проверке нового подразделения, т.е. новое подразделение - новая с колонка с параметрами выборки.
Подскажите пожалуйста как это реализовать ? Просто впервые сталкиваюсь с добавлением колонок.
Пытался вот так, но не получается ((
[CODE]Процедура КнопкаВыполнитьНажатие(Кнопка)
Таблица = Новый ТабличныйДокумент ;
// ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
// Таблица.Вывести(ОбластьШапка);
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Секция = Таблица.ПолучитьОбласть("R1C5:R90C5");
Таблица.НачатьАвтогруппировкуКолонок();
Запрос = Новый Запрос;
Запрос.Текст ;
Запрос.УстановитьПараметр("Счет", Счет);
Запрос.УстановитьПараметр("Подразделение", Подразделение);
Запрос.УстановитьПараметр("НачПериода", НачалоДня(НачПериода));
Запрос.УстановитьПараметр("КонПериода", КонецДня(КонПериода));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.СубконтоДт2.Наименование = "Амортизация ОС и НМА" тогда
АБУ1 = АБУ1 + Выборка.Сумма;
Если не Выборка.СчетКт.Код = "20" и не Выборка.СчетКт.Код = "20.01" и не Выборка.СчетКт.Код = "20.02" и не Выборка.СчетКт.Код = "23" и не Выборка.СчетКт.Код = "23.01" и не Выборка.СчетКт.Код = "23.02" тогда
АБУ2 = АБУ2 + Выборка.Сумма;
КонецЕсли;
КонецЕсли;
Если Выборка.ПодразделениеКтСсылка <> NULL тогда
Подр = Выборка.ПодразделениеКтСсылка;
Если Подр <> ПД тогда
ПД=Подр;
// Секция = Таблица.ПолучитьОбласть("R7C5");
Секция.Область().Текст = ПД;
Секция.Область().ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
Секция.Присоединить(Секция,5, ,Истина);
//Таблица.Вывести(Секция,5, ,Истина);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ОбластьСтрока.Параметры.АБУ1 = АБУ1;
ОбластьСтрока.Параметры.АБУ2 = АБУ2;
(1) да, функцией присоединить, пытался ей, вот только не выходит, либо вообще "недостаточно памяти", либо хрень.
Наверное, одинэска окуевает от того, что ее просят присоединить к таблице какой-то огрызок.
Просто понять не может.
(4) Как сделать так чтобы можно было присоединять 5 колонку в цикле ?
Как бы так:
Пока цикл **** если новое подразделение тогда
берем 5 колонку, параметры такие-то (5 колонка.Параметры.ПД= ПД;)
выводим справа. и т.д.
.
выводишь строку. если нужна пятая колонка, присоединяешь к ней пересечение областей (типа "ПятаяКолонка|Строка"). повторяешь итерацию.
PS) Не ругайте сильно, я только узичаю 1ску, с таким вопросом сталкиваюсь впервые.
Основы формирования табличного документа на основе макета
Обычно табличный документ формируется на основе макета как из строительных блоков. Макет представляет собой шаблон для формирования печатной формы. Построение макета производится в конфигураторе в специальном табличном редакторе. Разработчик может создавать области, изменять высоту строк и ширину колонок, задавать форматирование ячеек и всего табличного документа, включать в макет рисунки, диаграммы и сводные таблицы.
Области макета предназначены для однократного или многократного вывода, например, ниже представлен макет для печати расходной накладной:
Некоторые ячейки содержат только текст, который должен быть выведен. Другие ячейки содержат имена параметров (в угловых скобках). Значения этих параметров должны указываться в программном модуле. В отличие от версии 7.7, в ячейку нельзя вписать выражение. В версии 8.0 весь программный код сосредоточен в программных модулях и при выводе секций нет связи с текущим контекстом программного модуля. Назначение параметров табличного документа должно производиться явно из программного модуля через коллекцию "Параметры" объекта "ТабличныйДокумент".
Область может состоять из нескольких расположенных подряд строк или колонок, либо быть прямоугольной областью таблицы. К области можно обратиться по имени или по координатам. Можно также обращаться к пересечению областей, используя вертикальную черту (как в версии 7.7).
Общая схема
Общая схема формирования печатной формы на основе макета:
- Создание макета в табличном редакторе (определение областей, имен параметров, форматирования).
- Создание нового табличного документа (этот пункт не требуется, если отчет выводится в элемент управления ПолеТабличногоДокумента).
- Получение макета в переменную (метод ПолучитьМакет).
- Получение областей макета (метод ПолучитьОбласть).
- Заполнение параметров области (свойство Параметры).
- Вывод области в табличный документ (методы Вывести и Присоединить).
- Установка свойств отображения табличного документа (сетка, заголовки, только просмотр и т.д.).
- Отображение табличного документа на экране (а может быть отправка на принтер или сохранение).
Пример вывода табличного документа
Ниже приведен пример формирования печатной формы расходной накладной из модуля документа:
Процедура Печать(ТабДок) Экспорт
//создание нового табличного документа
ТабДок = Новый ТабличныйДокумент ;//получение макета для печати расходной накладной
Макет = Документы.РасходнаяНакладная. ПолучитьМакет ("Основной");//получим область "Заголовок" как новый табличный документ (!)
Область = Макет. ПолучитьОбласть ("Заголовок");//укажем параметры области
Область. Параметры .НомерДокумента = Номер;
Область.Параметры.От = Дата;
Область.Параметры.Кому = Контрагент;//выведем заполненную область "Заголовок" в табличный документ
ТабДок. Вывести (Область);//выведем область "Шапка" в табличный документ
ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка"));//получение области "Строка"
//обратите внимание, что это можно сделать до цикла по строкам
Область = Макет.ПолучитьОбласть("Строка");//вывод строк документа в печатную форму
Для Каждого СтрСостава Из Состав Цикл
//заполнение параметров области из строки табличной части
Область.Параметры. Заполнить (СтрСостава);
//вывод сформированной области в табличный документ
ТабДок.Вывести(Область);
КонецЦикла;
//вывод области "Подвал"
Область = Макет.ПолучитьОбласть("Подвал");
Область.Параметры.ИтогоКоличество = Состав.Итог("Количество");
Область.Параметры.ИтогоСумма = Состав.Итог("Сумма");
ТабДок.Вывести(Область);
//установим параметры отображения табличного документа
ТабДок.ТолькоПросмотр = Истина;
ТабДок.ОтображатьЗаголовки = Истина;
ТабДок.ОтображатьСетку = Ложь;
//покажем табличный документ на экране
ТабДок. Показать ();
В случае, если необходимо добавить какую-либо печатную форму в систему, то отличным вариантом это сделать является создание дополнительной печатной формы. При использовании дополнительной печатной формы нет никакой необходимости вносить изменения в конфигурацию.
Часто пользователям необходимо внести небольшие изменения в печатную форму, уже существующую. В этом случае также лучше использовать дополнительную форму, а не вносить поправки в стандартную, т.к. при последующих обновлениях системы могут возникнуть серьёзные проблемы.
Для примера возьмём печатную форму «Унифицированная форма №Т-61» или по-другому «Записка-расчет при прекращении (расторжении) трудового договора с работником (увольнении)». Будем использовать конфигурацию 1С Управление производственным предприятием.
Пользователи попросили добавить в документ «Увольнение из организаций» данную печатную форму. Рассмотрим процесс создания печатной формы, заполнение её макета и подключения печатной формы.
Создание и настройка печатной формы в 1С
Для создания новой обработки в 1С необходимо запустить 1С в режиме «Конфигуратор».
В Конфигураторе в меню «Файл» необходимо выбрать пункт «Новый», так же можно воспользоваться комбинацией клавиш Ctrl+N или кнопкой на панели быстрого доступа.
По сути внешняя печатная форма – это внешняя обработка, предназначенная для формирования печатной формы, поэтому в появившемся окне выбираем вариант «Внешняя обработка» и нажимаем «ОК».
В открывшемся окне новой обработки необходимо задать ей имя. Назовём нашу обработку «УвольнениеТ61», автоматически формируется синоним, который будет виден пользователям.
Добавим реквизит «СсылкаНаОбъект» и укажем тип «ДокументСсылка.УвольнениеИзОрганизаций» т.к. мы собираемся подключать обработку именно к данному документу.
Теперь необходимо создать форму для нашей обработки. Выбираем в списке «Формы» и нажимаем «Добавить».
В появившемся окне формы выбираем параметры для формы нашей обработки. Тип формы установим «Форма обработки», проконтролируем флаг «Назначить форму основной». Можно задать форме имя, но мы оставим стандартное. В данном примере оно не играет никакой роли. Нажимаем «Далее».
На данной вкладке установим флаг у реквизита «СсылкаНаОбъект» для того, чтобы он появился на форме, затем нажимаем «Готово».
Нажимаем правой кнопкой мыши на кнопку «Выполнить» и выбираем пункт «КнопкаВыполнитьНажатие».
В процедуру выполнить нажатие добавим следующий код:
Так же нам понадобятся две переменные «ВалютаРегламентированногоУчета» и «ВалютаУправленческогоУчёта».
В модуле формы больше никакого кода писать не нужно. Следующим шагом создадим макет печатной формы. Выберем «Макет» и нажмём кнопку «Добавить»
В появившемся окне необходимо установить имя макета. Назовём макет «Т_61» и установим тип макета «Табличный документ».
Перед нами откроется окно пустого табличного документа, которое необходимо заполнить в соответствии с внешним видом «Унифицированной формы №Т-61». Опустим шаги по заполнению макета, покажем только конечный результат.
Заполнение макета печатной формы
Код для заполнения макета необходимо расположить в «Модуле объекта». Для этого нажмём на кнопку «Действия» нашей обработки и выберем пункт «Открыть модуль объекта».
Процесс написания кода аналогичен процессу заполнения обычного табличного документа, поэтому приведём готовый листинг кода, разобраться в котором начинающим программистам не составит никакого труда.
Запрос = Новый Запрос;
// Установим параметры запроса
Если Режим = «ПоРеквизитамДокумента» Тогда
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
| УвольнениеИзОрганизаций.Номер КАК НомерДок,
| УвольнениеИзОрганизаций.Дата КАК ДатаДок,
| УвольнениеИзОрганизаций.Организация.НаименованиеПолное КАК НазваниеОрганизации,
| УвольнениеИзОрганизаций.Организация.КодПоОКПО КАК КодПоОКПО,
| ОтветственныеЛицаОрганизаций.Должность КАК ДолжностьРуководителя,
| ОтветственныеЛицаОрганизаций.НаименованиеОтветственногоЛица КАК ФИОРуководителя,
| Документ.УвольнениеИзОрганизаций КАК УвольнениеИзОрганизаций
| ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеОбОтветственномЛице КАК ОтветственныеЛицаОрганизаций
| ПО УвольнениеИзОрганизаций.Организация = ОтветственныеЛицаОрганизаций.СтруктурнаяЕдиница
ИначеЕсли Режим = «ПоТабличнойЧастиДокумента» Тогда
| ЕСТЬNULL(ФИОФизЛицСрезПоследних.Фамилия + «» «» + ФИОФизЛицСрезПоследних.Имя + «» «» + ФИОФизЛицСрезПоследних.Отчество, УвольнениеИзОрганизацииРаботники.Сотрудник.Наименование) КАК Работник,
| УвольнениеИзОрганизацииРаботники.Сотрудник.ДатаДоговора КАК ТрудовойДоговорДата,
| УвольнениеИзОрганизацииРаботники.Сотрудник.НомерДоговора КАК ТрудовойДоговорНомер,
| УвольнениеИзОрганизацииРаботники.НомерСтроки КАК НомерСтроки,
| УвольнениеИзОрганизацииРаботники.СтатьяТКРФ.Наименование КАК СтатьяТКРФ,
| УвольнениеИзОрганизацииРаботники.ОснованиеУвольнения КАК ОснованиеУвольнения,
| И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| КОНЕЦ КАК Подразделение,
| И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| КОНЕЦ КАК ОЦРВ_Подразделение,
| И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| КОНЕЦ КАК Должность,
| УвольнениеИзОрганизацииРаботники.Сотрудник.Код КАК ТабельныйНомер,
| УвольнениеИзОрганизацииРаботники.ДнейЧасовКомпенсацииУдержанияОтпуска КАК Компенс,
| Документ.УвольнениеИзОрганизаций.РаботникиОрганизации КАК УвольнениеИзОрганизацииРаботники
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| СписокДат.Сотрудник КАК Сотрудник,
| РаботникиОрганизации.ПодразделениеОрганизации.Наименование КАК ПодразделениеОрганизации,
| РаботникиОрганизации.Должность.Наименование КАК Должность,
| РаботникиОрганизации.ПодразделениеОрганизацииЗавершения.Наименование КАК ПодразделениеОрганизацииЗавершения,
| РаботникиОрганизации.ОЦРВ_ПодразделениеОрганизации.Наименование КАК ОЦРВ_ПодразделениеОрганизации,
| РаботникиОрганизации.ОЦРВ_ПодразделениеОрганизацииЗавершения.Наименование КАК ОЦРВ_ПодразделениеОрганизацииЗавершения,
| РаботникиОрганизации.ДолжностьЗавершения.Наименование КАК ДолжностьЗавершения,
| РаботникиОрганизации.ПериодЗавершения КАК ПериодЗавершения
| РаботникиВнутри.Сотрудник КАК Сотрудник,
| МАКСИМУМ(РаботникиВнутри.Период) КАК ДатаПоследнегоИзменения
| РегистрСведений.РаботникиОрганизаций КАК РаботникиВнутри
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.УвольнениеИзОрганизаций.РаботникиОрганизации КАК Док
| И РаботникиВнутри.Сотрудник = Док.Сотрудник
| РаботникиВнутри.Сотрудник) КАК СписокДат
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизации
| ПО СписокДат.ДатаПоследнегоИзменения = РаботникиОрганизации.Период
| И СписокДат.Сотрудник = РаботникиОрганизации.Сотрудник) КАК Работники
| ПО УвольнениеИзОрганизацииРаботники.Сотрудник = Работники.Сотрудник
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(
| Документ.УвольнениеИзОрганизаций.РаботникиОрганизации КАК УвольнениеИзОрганизацииРаботники
| УвольнениеИзОрганизацииРаботники.Ссылка = &ДокументСсылка)) КАК ФИОФизЛицСрезПоследних
| ПО УвольнениеИзОрганизацииРаботники.Сотрудник.Физлицо = ФИОФизЛицСрезПоследних.ФизЛицо
| И НЕ УвольнениеИзОрганизацииРаботники.Сторно
Функция ПечатьТ61() Экспорт
ТабДокумент = Новый ТабличныйДокумент;
// получаем данные для печати
// Начинаем формировать выходной документ
Пока ВыборкаРаботники.Следующий() Цикл
//Получаем области макета
// выводим данные о руководителях организации
Если ВыборкаДляШапки.Следующий() Тогда
СекцияЛицеваяСторона.Параметры.Заполнить(ВыборкаДляШапки); // Шапка документа.
СекцияПодвал.Параметры.Заполнить(ВыборкаДляШапки); // Для подвала.
ВыводитьДатуОзнакомленияСПриказом = ПроцедурыУправленияПерсоналом.ЗначениеУчетнойПолитикиПоПерсоналуОрганизации(глЗначениеПеременной(«глУчетнаяПолитикаПоПерсоналуОрганизации»), СсылкаНаОбъект.Организация, «ПроставлятьАвтоматическиДатуОзнакомленияВКадровыхПриказах»);
// Каждый приказ на отдельной странице.
Если ТабДокумент.ВысотаТаблицы > 0 Тогда
ПредставлениеДатыДоговора = Формат(ВыборкаРаботники.ТрудовойДоговорДата, «ДЛФ=DD»);
ПредставлениеДатыУвольнения = Формат(ВыборкаРаботники.ДатаУвольнения, «ДЛФ=DD»);
СекцияЛицеваяСторона.Параметры.ДатаУвольнения = ?(ЗначениеЗаполнено(ВыборкаРаботники.ДатаУвольнения), ПредставлениеДатыУвольнения, » «);
СекцияЛицеваяСторона.Параметры.ОснованиеУвольнения = ?(ВыборкаРаботники.СтатьяТКРФ = NULL, «», ВыборкаРаботники.СтатьяТКРФ) + «. » + ВыборкаРаботники.СтатьяТКРФТекстОснования;
Любой документ в 1с имеет определенную форму. Если нам необходимо ее изменить, например добавить для видимости колонку, то сделать это можно следующим способом:
1) Заходим в документ и в правом верхнем углу нажимаем на кнопку «Еще».
2) В появившемся списке выбираем «Изменить форму».
3) В открывшейся окне настройки формы проверяем проставленные «V» — возможно у нужного поля галочка не стоит.
Если ее нет, то проставляем и нажимаем «Ок» (Для примера добавим в «Тип»).
Также можно расположить колонки в нужно порядке. Для этого повторно заходим в «Настройка формы» (п.1, 2) и воспользуемся синими стрелочками. Нужно выделить строчку, которую нужно переместить и нажимаем на нужную стрелочку («Вверх», «Вниз» в зависимости от того куда его нужно переместить колонку на форме- правее или левее).
Для примера переместим «Тип» сразу за колонкой «Номенклатура».
Если в списке нет нужного реквизита, то можно воспользоваться кнопкой «Добавить поля», но это работает не всегда — там где возможно кнопка будет активна.
Для примера выведем на форму «Вид номенклатуры». Для этого открываем «Настройка формы» (п.1, 2), выбираем строчку «Номенклатура» и нажимаем «Добавить поля».
В появившемся списке ставим галочку возле «Вид номенклатуры» и нажимаем «ОК».
В списке «Настройка формы» появится соответствующая строчка. Нажимаем «ОК».
Читайте также: