Как найти ячейку в макете 1с

В этой статье я покажу, как работать с ячейками табличного документа. Мы создадим табличный документ и заполним его какими-нибудь данными, не обращаясь при этом к макету табличного документа, как мы это делали раньше, а получая напрямую доступ к ячейкам табличного документа.

Также, как и во всех предыдущих статьях, для демонстрации создадим обработку и основную форму обработки, на которую поместим команду.

Обработка и форма обработки

Создадим обработчик команды в клиентском контексте, и функцию тоже в клиентском контексте, в которой создадим табличный документ, и этот табличный документ функция вернет. А в обработчике команды покажем возвращаемый функцией табличный документ.

&НаКлиенте
Функция ВозвратТабличногоДокумента()
	ТабличныйДокумент = Новый ТабличныйДокумент;
	Возврат ТабличныйДокумент;
КонецФункции // ВозвратТабличногоДокумента()

&НаКлиенте
Процедура Вывести(Команда)	
	ТабличныйДокумент = ВозвратТабличногоДокумента();
	ТабличныйДокумент.Показать("Пример работы с ячейками");	
КонецПроцедуры

В дальнейшем весь код будет из метода ВозвратТабличногоДокумента(). В этом коде мы будем обращаться к ячейкам табличного документа по их наименованию. А для удобства работы с именами ячеек табличного документа создадим пустой макет табличного документа. Он нам нужен только как вспомогательный инструмент. Для вывода табличного документ этот макет не требуется.

Макет табличного документа 1С

Макет табличного документа 1С

Если необходимо узнать имя ячейки или группы ячеек (области), следует выделить ячейку, открыть палитру свойств этой ячейки, и в этой палитре свойств интересует одно свойство Имя.

Имя ячейки табличного документа 1С

Зная имя ячейки или области ячеек, мы можем получить эту область из уже созданного документа при помощи метода Область().

ОбластьШапка = ТабличныйДокумент.Область("R2C1:R3C5");
ОбластьШапка.Объединить();
ОбластьШапка.Текст = "Шапка примера табличного документа";
ОбластьШапка.Примечание.Текст = "Это примечание";
ОбластьШапка.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
ОбластьШапка.ВертикальноеПоложение   = ВертикальноеПоложение.Центр;

В коде выше мы получили область ячеек табличного документа по имени, которое определили при помощи пустого макета табличного документа (он и нужен только для выяснения названий ячеек). Потом, мы объединили область ячеек в одну ячейку, указали текст ячейки, примечание, и отцентрировали текст в объединенной ячейке.

Если мы попробуем выполнить команду обработки, то как результат будет показан табличный документ.

Табличный документ 1С

Пойдем дальше. Создадим таблицу в нашем табличном документе. Сначала сделаем шапку таблицы из ячеек, которые идут после области, из которой сделали шапку отчета. У нас будет две колонки у шапки таблицы.

Ячейки первой колонки.

Ячейки табличного документа 1С

Получим область для этих ячеек, объединим ячейки этой области, напишем какой-нибудь текст и обведем эту область, используя метод Обвести табличного документа.

ЛинияОбвода = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,1);
	
ОбластьШапкаТаблицы1 = ТабличныйДокумент.Область("R4C1:R4C2");
ОбластьШапкаТаблицы1.Объединить();
ОбластьШапкаТаблицы1.Текст = "Номер";
ОбластьШапкаТаблицы1.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
ОбластьШапкаТаблицы1.Обвести(ЛинияОбвода,ЛинияОбвода,ЛинияОбвода,ЛинияОбвода);

Точно также получим область для соседней колонки.

Первым делом узнаем имя ячеек. Ячейки второй колонки.

Ячейки табличного документа 1С

А потом получим область, и выполним над ней те же самые манипуляции, что и над соседней областью.

ОбластьШапкаТаблицы2 = ТабличныйДокумент.Область("R4C3:R4C5");
ОбластьШапкаТаблицы2.Объединить();
ОбластьШапкаТаблицы2.Текст = "Номер (строка)";
ОбластьШапкаТаблицы2.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
ОбластьШапкаТаблицы2.Обвести(ЛинияОбвода,ЛинияОбвода,ЛинияОбвода,ЛинияОбвода);

 А дальше, для вывода таблицы сделаем цикл от 0 до 9, в котором в каждой итерации цикла будем обращаться к областям табличного документа, но в этот раз мы будем использовать не имена областей, а номера ячеек.

Для н = 0 По 9 Цикл
	
	ОбластьСтрока1 = ТабличныйДокумент.Область(5 + н,1,5 + н,2);
	ОбластьСтрока1.Объединить();
	ОбластьСтрока1.Текст = Строка(н + 1);
	ОбластьСтрока1.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
        ОбластьСтрока1.Обвести(ЛинияОбвода,ЛинияОбвода,ЛинияОбвода,ЛинияОбвода);
	 
	ОбластьСтрока2 = ТабличныйДокумент.Область(5 + н,3, 5 + н, 5);  		 
	ОбластьСтрока2.Объединить();
	ОбластьСтрока2.Текст = ЧислоПрописью(н + 1,"НП = Ложь",",,,,,,,,0");
	ОбластьСтрока2.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
	ОбластьСтрока2.Обвести(ЛинияОбвода,ЛинияОбвода,ЛинияОбвода,ЛинияОбвода);	 
	 
КонецЦикла;	

На этом мы закончим изменять табличный документ. Полная версия кода в функции ВозвратТабличногоДокумента будет следующей:

&НаКлиенте
Функция ВозвратТабличногоДокумента()

	ТабличныйДокумент = Новый ТабличныйДокумент;
	
	ОбластьШапка = ТабличныйДокумент.Область("R2C1:R3C5");
	ОбластьШапка.Объединить();
	ОбластьШапка.Текст = "Шапка примера табличного документа";
	ОбластьШапка.Примечание.Текст = "Это примечание";
	ОбластьШапка.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
	ОбластьШапка.ВертикальноеПоложение   = ВертикальноеПоложение.Центр;
	
	ЛинияОбвода = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,1);
	
	ОбластьШапкаТаблицы1 = ТабличныйДокумент.Область("R4C1:R4C2");
	ОбластьШапкаТаблицы1.Объединить();
	ОбластьШапкаТаблицы1.Текст = "Номер";
	ОбластьШапкаТаблицы1.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
	ОбластьШапкаТаблицы1.Обвести(ЛинияОбвода,ЛинияОбвода,ЛинияОбвода,ЛинияОбвода);
	
	ОбластьШапкаТаблицы1 = ТабличныйДокумент.Область("R4C3:R4C5");
	ОбластьШапкаТаблицы1.Объединить();
	ОбластьШапкаТаблицы1.Текст = "Номер (строка)";
	ОбластьШапкаТаблицы1.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
	ОбластьШапкаТаблицы1.Обвести(ЛинияОбвода,ЛинияОбвода,ЛинияОбвода,ЛинияОбвода);
	
	Для н = 0 По 9 Цикл
	
		 ОбластьСтрока1 = ТабличныйДокумент.Область(5 + н,1,5 + н,2);
		 ОбластьСтрока1.Объединить();
		 ОбластьСтрока1.Текст = Строка(н + 1);
		 ОбластьСтрока1.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
		 ОбластьСтрока1.Обвести(ЛинияОбвода,ЛинияОбвода,ЛинияОбвода,ЛинияОбвода);
		 
		 ОбластьСтрока2 = ТабличныйДокумент.Область(5 + н,3, 5 + н, 5);  
		 ОбластьСтрока2.Объединить();
		 ОбластьСтрока2.Текст = ЧислоПрописью(н + 1,"НП = Ложь",",,,,,,,,0");
		 ОбластьСтрока2.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
		 ОбластьСтрока2.Обвести(ЛинияОбвода,ЛинияОбвода,ЛинияОбвода,ЛинияОбвода);
		 
	КонецЦикла;	
	
	Возврат ТабличныйДокумент;

КонецФункции // ВозвратТабличногоДокумента() 

Проверим, что у нас выведет табличный документ.

Табличный документ 1С

Таким образом, обращаясь напрямую к областям (ячейкам) табличного документа, мы можем изменять этот табличный документ без использования макета.

Другие статьи про табличные документы в 1С:

Создание макета табличного документа 1С

Вывод на печать табличного документа в 1С 8.3

Области табличного документа 1С 8.3

Табличный документ на управляемой форме 1С 8.3

Группировка в табличном документе 1С 8.3

Расшифровка табличного документа 1С 8.3

Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»

Это изображение имеет пустой атрибут alt; его имя файла - 1C-в-желтом-цвете-3D-221x300.png

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Это изображение имеет пустой атрибут alt; его имя файла - 1_в-желтом-цвете-3D-маленькая-221x300.jpg

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 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

Получить ячейку табл. документа.

Я
   Cumpuciy

19.01.07 – 12:15

Вручную изменяется значение в одной из ячеек. После этого, в процедуре ПолеТабличногоДокументаПриИзмененииСодержимогоОбласти(Элемент, Область), надо в получить значение из другой ячейки, которая в этой же строке, зная её имя.

Как получить её, и соответсна вытянуть значение?

Спасибо.

   Рэйв

1 – 19.01.07 – 12:20

(0)

ТабличныйДокумент (SpreadsheetDocument)

ПолучитьОбласть (GetArea)

Вариант синтаксиса: По имени

Синтаксис:

ПолучитьОбласть(<Имя области>)

Параметры:

<Имя области> (обязательный)

Тип: Строка. Имя области или адрес в формате “R1C1:R2C2”, где число после “R” обозначает номер строки, число после “C” – номер колонки, символом “:” (двоеточие) разделены координаты левого верхнего и правого нижнего угла области. В качестве имени также можно передавать пересечение двух областей, записываемое как “<Имя области 1> | <Имя области 2>”.

Описание:

Получает область табличного документа как табличный документ. Область может состоять из нескольких расположенных подряд строк или колонок, либо прямоугольной областью таблицы. Используется для получения области табличного документа по имени.

Вариант синтаксиса: По адресу

Синтаксис:

ПолучитьОбласть(<Номер первой строки>, <Номер первой колонки>, <Номер последней строки>, <Номер последней колонки>)

Параметры:

<Номер первой строки> (необязательный)

Тип: Число. Номер первой строки области таблицы.

<Номер первой колонки> (необязательный)

Тип: Число. Номер первой колонки области таблицы.

<Номер последней строки> (необязательный)

Тип: Число. Номер последней строки области таблицы.

<Номер последней колонки> (необязательный)

Тип: Число. Номер последней колонки области таблицы.

Описание:

Получает область табличного документа как табличный документ. Область может состоять из нескольких расположенных подряд строк или колонок, либо прямоугольной областью таблицы. Используется для получения области табличного документа по номерам строк и колонок.

Если последняя строка и последняя колонка отсутствуют, то область задана единственной ячейкой. Если строки или колонки отсутствуют, то область задана диапазоном строк или колонок соответственно. Если метод вызван без параметров, то область задана всей таблицей.

Возвращаемое значение:

Тип: ТабличныйДокумент. Область, как новый табличный документ.

Пример:

Макет = Документы.РасходнаяНакладная.ПолучитьМакет(“Накладная”);

Шапка = Макет.ПолучитьОбласть(“Шапка”);

См. также:

ТабличныйДокумент, метод Область

   Cumpuciy

2 – 19.01.07 – 12:43

К примеру у меня имя текущей ячейки:

ТекущийЭлемент.ТекущаяОбласть.Имя = R5C16

Соответственно мне надо получить значение из ячейки R5C2.

Т.е. надо обращаться как

ЭлементыФормы.ПолеТабличногоДокумента.ПолучитьОбласть(5,2,5,2);

   Scooter

3 – 19.01.07 – 12:45

можно

.ПолучитьОбласть(“R5C2”);

   Cumpuciy

4 – 19.01.07 – 12:49

(3) Я так же думал, но у меня что то ругался, что такая область не обнаружена.

А вот так нормально получает.

ЭлементыФормы.ПолеТабличногоДокумента.ПолучитьОбласть(5,2,5,2);

  

Scooter

5 – 19.01.07 – 12:56

(4)точно могу сказать что метод .Область(“R5C2″) работает номально /”С” – латиницей должна быть/

ПолучитьОбласть не тестировал)

TurboConf — расширение возможностей Конфигуратора 1С

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 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;
 

где Обл – структура областей, полученная через функцию ПолучитьОбласти.

В этой статье подробно будет рассказано, как новичку, плохо знающему 1С 8 создать печатную форму. Для примера возьмем одну из самых распространенных конфигураций 1С 8 — Бухгалтерию 2.0. Создание печатной формы 1С этапы написания:

  • Создание файла внешней печатной формы;
  • Создание макета печатной формы;
  • Написание программного кода для вывода данных печатной формы на экран;
  • Создание параметров авторегистрации печатной формы;
  • Подключение внешней печатной формы к базе 1С Предприятия.

Создание печатной формы 1С. Постановка задачи

От нас требуется в конфигурации Бухгалтерия 2.0 создать печатную форму к документу Поступление товаров и услуг. В шапке печатной формы вывести следующие данные:

  • Организацию;
  • Контрагента;
  • Договор контрагента;
  • Дату поступления.

В виде таблицы вывести данные табличной части Товары документа. Таблица должна включать в себя следующие колонки:

  • Номенклатура;
  • Количество;
  • Цена;
  • Сумма;
  • А также цена номенклатуры на текущую дату (по виду цен из документа).

Файл внешней обработки

Перейдем к решению задачи. Для начала откроем 1С 8 в режиме Конфигуратор. Именно в этом режиме осуществляются все разработки на платформе 1С 8. Теперь нам необходимо создать файл внешней обработки. Для этого кликнем по меню Файл -> Новый… или по пиктограмме нового файла.

Создание файла внешней обработки

В открывшемся окошке выберем пункт Внешняя обработка.

Выбор вида документа 1С

Далее в поле Имя необходимо вписать название внешней обработки. В нашем случае назовем ее просто: «ПечатнаяФорма», поле синоним при этом заполнится автоматически. Обратите внимание, что в поле Имя, внешней обработки, следует писать название без пробелов и знаков препинания.

Добавим реквизит внешней обработки СсылкаНаОбъект и выберем для него тип ДокументСсылка.ПоступлениеТоваровУслуг. Для этого в дереве метаданных внешней обработки 1С выделим пункт Реквизиты и нажмем кнопку Добавить (кнопка с зеленым плюсом). В правой части экрана откроется окно свойств реквизита, в поле Имя впишем — СсылкаНаОбъект. В поле Тип нажмем кнопку с тремя точками.

Создание реквизита внешней обработки

В дереве типов раскроем ветку ДокументСсылка, и найдем там элемент ПоступлениеТоваровУслуг, поставим напротив него галочку и нажмем ОК.

Сохраним файл внешней обработки на жесткий диск, для этого воспользуемся меню Файл -> Сохранить, пиктограммой Сохранить (синяя дискета), либо сочетанием клавиш Ctrl + S. Назовем сохраняемый файл «ПечатнаяФорма».

Создание макета печатной формы

Приступим к созданию макета печатной формы 1С. Макет служит шаблоном для вывода печатной формы, поэтому если хотите, чтобы ваша печатная форма выглядела хорошо, следует уделить ему внимание.

В дереве метаданных внешней обработки добавим новый макет, в окне конструктора макета ничего менять не будем и нажмем кнопку Готово.

Создание печатной формы 1С. Конструктор макета 1С

В открывшемся новом макете создадим несколько областей, необходимых для вывода печатной формы. Все необходимые нам области макета будут горизонтальными, поэтому для создания новой области следует выделить необходимое количество строк макета и перейти в меню Таблица -> Имена -> Назначить имя или использовать сочетание клавиш Ctrl + Shift + N, после чего ввести в окошке имя области. При создании области макета не бойтесь ошибиться с количеством строк их всегда можно будет добавить или убрать. Для удаления строки макета 1С выделите нужную строку и выберите в контекстном меню пункт Удалить. Для добавление новой строки в макет, выделите любую строку макета и выберите в контекстном меню пункт Раздвинуть.

Добавление шапки макета

В первую очередь создадим область Шапка, в нее будут выводится данные для заголовка печатной формы. Для данной области нам потребуется семь строк макета. Выделим их и, как я уже писал выше, нажмем сочетание клавиш Ctrl + Shift + N, в поле Имя напишем «Шапка» и нажмем кнопку ОК.

Создание области макета 1С

Заполним область макета нужными нам данными. Обычно ни одна печатная форма не обходится без заголовка, поэтому создадим его и в нашей шапке макета. Так как в заголовке помимо названия печатной формы мы будем выводить еще и номер документа из которого она была напечатана, то текст заголовка в макете мы зададим параметром. Параметр макета — это специально обозначенная ячейка макета, в которую при помощи встроенного языка 1С 8 можно выводить различные данные. Заголовок должен выводится на всю ширину печатной формы, поэтому определимся сколько ячеек макета нам будет достаточно для печати на стандартной альбомной ориентации листа.

Обычно хватает тринадцать или четырнадцать ячеек макета, выделим их в первой строке области Шапка и объединим в одну ячейку (Контекстное меню -> Объединить). После этого дважды щелкнем по получившейся большой ячейке и напишем название параметра, в нашем случае «ТекстЗаголовка». Для того чтобы введенный текст стал полноценным параметром щелкнем по ячейке правой кнопкой мыши и в контекстном меню выберем пункт Свойства. На закладке Макет найдем поле Заполнение и выберем значение Параметр. Параметры в макете 1С обозначаются скобками «<>».

Заголовок печатной формы должен выделяться среди прочего текста, поэтому еще раз выделим ячейку и при помощи пиктограмм на панели форматирования макета, поставим выравнивание текста По центру и размер шрифта 14.

Форматирование ячейки макета

После текста заголовка выведем в область Шапка данные о организации, контрагенте, договоре контрагента и дате поступления товара. Так как все эти данные также берутся из документа, также оформим их параметрами. Кроме того перед каждым параметром следует написать поясняющий текст, что бы пользователь легко понял, где организация, а где контрагент и т.д. Все эти действия подобны созданию заголовка поэтому не буду подробно на них останавливаться, приведу лишь рисунок с тем, что должно получиться в итоге.

Шапка печатной формы 1С

На рисунке видно, как отличаются параметры макета, от обычного текста.

Добавление шапки таблицы макета

Последнее, что нам необходимо создать в данной области макета — это шапка таблицы, в которую будут выводится данные табличной части Товары. Колонки необходимые для таблицы были описаны в разделе «Постановка задачи». Шапку таблицы также создадим используя объединение ячеек и написания текста (названий колонок). Границы шапки таблицы выделим при помощи инструмента Рамка, который расположен на панели форматирования макета.

Создание шапки таблицы в макете 1С

Добавление таблицы в макет

Создадим в макете еще одну область — Данные. В нее будет выводится таблица данных табличной части Товары. Для данной области нам понадобится только одна строка макета. Чтобы вывести все строки табличной части в печатную форму мы будем заполнять и выводить данную область нужное количество раз. Колонки в области Данные должны совпадать с колонками шапки таблицы, поэтому заполнить ее не составит труда. Единственное отличие — в области Данные нам нужны параметры, а не просто текст. Также заметьте, что по умолчанию числовые параметры форматируются по правому краю, а текстовые по левому. Для выделения колонок, также необходимо использовать инструмент Рамка.

Область Данные макета печатной формы

Добавление подвала в макет

Последняя необходимая нам область макета — это Подвал. В нее будут выводиться итоги по количеству и сумме. Создание аналогично созданию области Данные, но дополнительно следует выделить итоги жирным шрифтом.

В итоге должен получиться макет следующего вида:

Создание печатной формы 1С макет

Создание печатной формы 1С. Программирование

Приступим к программированию — это важнейший этап создания печатной формы. В первую очередь перейдем в модуль объекта внешней печатной формы, именно там мы будем программировать. Для этого в основном окне внешней обработки нажмем Действия -> Открыть модуль объекта.

Создание печатной формы 1С - ереход в модуль объекта

В модуле объекта внешней печатной формы необходимо создать экспортную функцию Печать().

Функция Печать() Экспорт

КонецФункции

Обратите внимание, что данная функция является обязательной для внешних печатных форм в конфигурациях использующих обычное приложение. Весь последующий программный код необходимый для вывода печатной формы будем писать внутри этой функции.

Инициализация основных переменных

Создадим переменную ТабДок, в которой будет содержаться табличный документ — именно он и есть печатная форма, в которую мы будем выводить заполненные области макета.

ТабДок = новый ТабличныйДокумент;

В переменную Макет получим созданный нами макет печатной формы. Для этого используем встроенную функцию ПолучитьМакет(<ИмяМакета>).

Макет = ПолучитьМакет("Макет");

Все области макета получим в переменные. Для этого используем метод макета ПолучитьОбласть(<ИмяОбласти>).

ОбластьШапки   = Макет.ПолучитьОбласть("Шапка");
ОбластьДанные  = Макет.ПолучитьОбласть("Данные");
ОбластьПодвал  = Макет.ПолучитьОбласть("Подвал");

Вывод шапки печатной формы в табличный документ

Все необходимые переменные инициализированы. Приступим к заполнению и выводу областей макета в табличный документ. В первую очередь заполним заголовок печатной формы, для этого нам необходимо передать в параметр ТекстЗаголовка, который мы создали в макете, нужный нам текст. Для заполнения значений параметров у области макета существует специальная коллекция, которая так и называется — Параметры. Из которой через «.» можно получить любой параметр. В текст заголовка передадим текст: «Печатная форма», а также номер документа.

ОбластьШапки.Параметры.ТекстЗаголовка 
    = "Печатная форма "+СсылкаНаОбъект.Номер;

Остальные параметры шапки заполним подобным образом, все необходимые для них значения получим из реквизита СсылкаНаОбъект, в котором содержится ссылка на печатаемый документ.

ОбластьШапки.Параметры.Организация        = СсылкаНаОбъект.Организация;
ОбластьШапки.Параметры.Контрагент         = СсылкаНаОбъект.Контрагент;
ОбластьШапки.Параметры.ДатаПоступления    = СсылкаНаОбъект.Дата;
ОбластьШапки.Параметры.ДоговорКонтрагента 
    = СсылкаНаОбъект.ДоговорКонтрагента;

Все параметры шапки заполнены, выведем ее в созданный нами табличный документ, для этого используем метод Вывести(<Область>).

ТабДок.Вывести(ОбластьШапки);

Написание запроса для печатной форы

Займемся заполнением и выводом области Данные. Создание печатной формы 1С подразумевает и написание запроса, нам он необходим для получения данных табличной части Товары и цен Номенклатуры на текущую дату будем использовать Запрос. Язык запросов 1С 8 похож на SQL, а точнее практически копирует возможности его оператора SELECT, но при этом весь запрос пишется на русском языке. Поэтому если вы хотя бы отдаленно знакомы с SQL, то и язык запросов 1С 8 поймете легко.

В данной печатной форме запрос будет довольно простым и многие скажут, что можно было бы обойтись и без него, но знание языка запросов и умение его грамотно использовать — одно из главных умений программиста 1С. Запросы позволяют используя меньшие ресурсы получать сложнейшие выборки данных, а также в тексте запроса намного легче разобраться, чем в программном коде написанном без использования запроса (или с минимальным его использованием). К тому же, в 1С 8 есть очень хороший конструктор запросов, позволяющий в интерактивном режиме собирать запрос из нужных таблиц.

Создадим переменную, которая будет содержать в себе запрос.

Запрос = Новый Запрос;

Текст запроса будем составлять при помощи конструктора запросов. Для начала напишем:

Запрос.Текст = "";

Поставим курсор мышки между кавычками, нажмем правую кнопку мыши. В открывшемся контекстном меню выберем пункт Конструктор запроса, он очень поможет нам в создании печатной формы 1С. После этого откроется окно конструктора запроса, оно содержит много вкладок, но для нашего запроса понадобятся только четыре: «Таблицы и поля», «Связи», «Условия», «Объединения / Псевдонимы».

 Конструктор запросов 1С

Для нашего запроса нам понадобятся две таблицы: табличная часть Товары документа Поступление товаров и услуг и срез последних на текущую дату регистра сведений Цены номенклатуры.

В левой части окна конструктора найдем столбец База данных. В нем находится дерево всех объектов метаданных, найдем нужные нам. Для этого раскроем ветку Документы и отыщем документ ПоступлениеТоваровУслуг, раскроем его и найдем табличную часть Товары, перетащим ее в столбец конструктора запросов Таблицы. Перетащить можно тремя способами: собственно перетаскиванием, двойным щелчком по таблице или выделив ее и нажав кнопку «>». Раскроем ветку РегистрыСведений и найдем там таблицу ЦеныНоменклатуры.СрезПоследних, также перетащим ее в столбец Таблицы. Этих двух таблиц достаточно для нашего запроса.

Выберем нужные нам поля из полученных таблиц. Для этого в столбце Таблицы раскроем таблицу ПоступлениеТоваровУслугТовары и найдем поля: Номенклатура, Сумма, Цена, Количество и перетащим их в третий столбец конструктора — Поля. Раскроем таблицу ЦеныНоменклатурыСрезПоследних, найдем поле Цена и тоже перетащим его в Поля.

Конструктор запросов таблицы и поля

Структура таблиц и полей нашего запроса готова, теперь займемся условиями. Нам необходимо чтобы данные табличной части Товары брались не из всех поступлений, а только из того, которое мы печатаем. Для этого наложим условие на таблицу ПоступлениеТоваровУслугТовары. Перейдем на закладку «Условия» конструктора запросов. В колонке Поля расположены выбранные нами ранее таблицы, для условия нам понадобится поле Ссылка из таблицы ПоступлениеТоваровУслугТовары, перетащим его в окно Условия.

В запросах 1С можно использовать параметры, они нужны для того чтобы передавать в запрос данные. Например, если мы хотим ограничить выборку документов каким то конкретным документом, то можно при помощи параметра передать в запрос ссылку на этот документ и использовать данный параметр в условии. Именно так мы и поступим в нашем запросе.

После того, как в окно Условия мы добавили поле Ссылка, конструктор запросов сам создаст параметр с аналогичным названием и расположит его после знака «=». Данный параметр можно переименовать, если есть желание. В тексте запроса параметры помечаются знаком «&», но в данном случае этого делать не нужно, так как подразумевается, что во второй части условия стоит параметр, это просто надо запомнить. О том как передать значение в параметр запроса 1С будет рассказано ниже.

Условия в конструкторе запросов 1С

Так как в запросе мы используем не полную таблицу цен номенклатуры, а виртуальную (срез последних в данном случае), то нам необходимо задать условия формирования этой виртуальной таблицы, в нашем случае это дата среза и условие на тип цен (должны выбираться цены имеющие строго определенный тип цен — тот который задан в документе поступления, который мы выводим на печать).

Для заполнения параметров виртуальной таблицы перейдем на закладку Таблицы и поля конструктора запроса, в колонке Таблицы выделим таблицу ЦеныНоменклатурыСрезПоследних и нажмем кнопку Параметры виртуальной таблицы, расположенную вверху. В открывшемся окне, в поле Период следует задать параметр, в который будет передаваться дата, на которую будет делаться срез цен. В нашем случае это будет текущая дата (то есть сегодня), поэтому и параметр назовем «&ТекущаяДата». В поле условия напишем условия на тип цен, его мы тоже передадим в параметре, который назовем «&ТипЦен». Получившееся условие будет выглядеть следующим образом (где ТипЦен — измерение регистра Цены номенклатуры):

ТипЦен = &ТипЦен

Параметры виртуальной таблицы заполнены, нажмем кнопку ОК.

Заполнение параметров виртуальной таблицы

Теперь, когда мы ограничили выборку только нужным нам документом, создадим связи между таблицами запроса. Если этого не сделать, то цены из таблицы ЦеныНоменклатурыСрезПоследних не будут связаны с номенклатурой из поступления. Перейдем на вкладку Связи конструктора запросов. Создадим связь по полю Номенклатура между двумя нашими таблицами. Для этого нажмем кнопку Добавить, в поле Таблица 1 выберем таблицу ПоступлениеТоваровУслугТовары, а в поле Таблица 2 — ЦеныНоменклатурыСрезПоследних. В условиях связи выберем поля Номенклатура из обоих таблиц.

Также следует заметить, что в выборке запроса нам необходимо получить все строки из табчасти Товары и цены только в том случае, если таковые имеются на текущую дату по типу цен документа. Таким образом данные табчасти Товары являются обязательными, а данные среза цен нет. Поэтому в связях между этими таблицами необходимо использовать так называемое ЛЕВОЕ СОЕДИНЕНИЕ, причем левой (или обязательной) таблицей будет ПоступлениеТоваровУслугТовары, а правой (или необязательной) ЦеныНоменклатурыСрезПоследних. Для того чтобы левое соединение таблиц запроса заработало так как я описал выше необходимо поставить галочку Все после поля Таблица 1.

Связи между таблицами запроса

Запрос практически готов, осталось только немного поработать над псевдонимами полей. Перейдем на закладку Объединения / Псевдонимы и зададим псевдоним для поля ЦеныНоменклатурыСрезПоследних.Цена. Имя псевдонима будет — ЦенаНаСегодня, нужен он для того чтобы имена полей выборки запроса и имена параметров в макете печатной формы совпадали.

Псевдонимы полей запроса 1С

Работа в конструкторе запросов на этом закончена, нажмем кнопку ОК. После того, как окно конструктора закроется вы увидите, что строка с текстом запроса заполнена и имеет следующий вид:

Запрос.Текст = "ВЫБРАТЬ
| ПоступлениеТоваровУслугТовары.Номенклатура,
| ПоступлениеТоваровУслугТовары.Сумма,
| ПоступлениеТоваровУслугТовары.Цена,
| ПоступлениеТоваровУслугТовары.Количество,
| ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаНаСегодня
|ИЗ
|Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
|   &ТекущаяДата, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
|  ПО ПоступлениеТоваровУслугТовары.Номенклатура 
|      = ЦеныНоменклатурыСрезПоследних.Номенклатура
|ГДЕ
| ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка";

Выполнение запроса

Передадим в запрос необходимые параметры, для этого воспользуемся методом запроса УстановитьПараметр(<ИмяПараметра>,<Значение>). Для получения текущей даты воспользуемся встроенной функцией ТекущаяДата(), она возвращает дату и время компьютера.

Запрос.УстановитьПараметр("Ссылка",СсылкаНаОбъект);
Запрос.УстановитьПараметр("ТекущаяДата",ТекущаяДата());
Запрос.УстановитьПараметр("ТипЦен",СсылкаНаОбъект.ТипЦен);

Выполним запрос для получения выборки с нужными нам данными. Для этого сначала воспользуемся методом запроса Выполнить(), а затем методом Выбрать().

Выборка = Запрос.Выполнить().Выбрать();

Заполнение таблицы печатной формы

В итоге, в переменной Выборка будет содержаться выборка результатов запроса, перемещаться по ней можно по при помощи метода Следующий(), а чтобы обойти целиком понадобится цикл Пока. Конструкция получится следующая:

Пока Выборка.Следующий() Цикл
КонецЦикла;

Именно в этом цикле мы будем заполнять и выводить область макета Данные. Но для начала инициализируем две переменные числового типа. В них будем собирать итоги по количеству и сумме, которые нам необходимо вывести в область Подвал.

ИтогоСумма      = 0;
ИтогоКоличество = 0;

Внутри цикла будем заполнять область Данные данными из текущего элемента выборки, в переменные ИтогоСумма и ИтогоКоличество добавлять значения суммы и количества, и наконец, выводить область в табличный документ при помощи уже знакомого нам метода Вывести(). Так как имена полей нашего запроса полностью совпадают с именами параметров области Данные, то для заполнения будем использовать встроенную процедуру ЗаполнитьЗначенияСвойств(<Приемник>, <Источник>), которая копирует значения свойств <Источника> в свойства <Приемника>.

Пока Выборка.Следующий() Цикл
    ЗаполнитьЗначенияСвойств(ОбластьДанные.Параметры,Выборка);

    ИтогоСумма = ИтогоСумма + Выборка.Сумма;
    ИтогоКоличество = ИтогоКоличество + Выборка.Количество;

    ТабДок.Вывести(ОбластьДанные);
КонецЦикла;

Вывод подвала печатной формы в табличный документ

Осталось заполнить и вывести последнюю область макета — Подвал. Данные для заполнения мы уже подготовили, заполнение и вывод осуществляем по той же схеме.

ОбластьПодвал.Параметры.ИтогоКоличество = ИтогоКоличество;
ОбластьПодвал.Параметры.ИтогоСумма      = ИтогоСумма;
	
ТабДок.Вывести(ОбластьПодвал);

Табличный документ полностью заполнен, осталось вывести его на экран, чтобы пользователь мог посмотреть печатную форму и при необходимости распечатать. Но в типовых конфигурациях 1С 8 за вывод внешних печатных форм отвечают процедуры специальных модулей. Поэтому достаточно вернуть из функции Печать() заполненный табличный документ.

Возврат ТабДок;

На этом этап программирования закончен и создание печатной формы 1с практически завершено. Полный текст функции Печать() здесь приводить не буду, можете посмотреть его в файле печатной формы, скачать который можно внизу статьи.

Создание печатной формы 1С. Параметры авторегистрации

При подключении внешней печатной формы к базе система автоматически не определяет для какого именно документа или справочника предназначена печатная форма, выбирать его приходится вручную. А если писал печатную форму другой человек, а вам поручено только подключить ее, то выбор может стать неоднозначным. Для того чтобы избежать таких проблем, во всех внешних печатных формах необходимо создавать макет с параметрами авторегистрации. Если он создан и правильно оформлен, то система автоматически определяет, какому документу или справочнику предназначена печатная форма.

Делается он следующим образом:

  • Во внешней обработке создаем новый макет. Называем его «Параметры_Авторегистрации» (важно не ошибиться!).
  • В первой ячейке макета пишем Документы. (или Справочники.) и имя документа к которому необходимо подключить печатную форму.

Макет с параметрами авторегистрации

Подключение к базе внешней печатной формы

  • Запустите 1С 8 в режиме Предприятие;
  • Перейдите в меню Сервис -> Дополнительные отчеты и обработки -> Дополнительные внешние печатные формы;
  • Нажмите кнопку Добавить;
  • В открывшемся окне нажмите пиктограмму Заменить файл внешней обработки;
  • Если у вас созданы параметры авторегистрации, то соглашаемся их использовать;
  • Если у вас не созданы параметры авторегистрации, то в табличную часть Принадлежность печатной формы добавляем нужный документ или справочник;
  • Нажимаем кнопку ОК.

Регистрация внешней печатной формы

После этого внешняя печатная форма будет доступна в меню Печать документа Поступление товаров и услуг. Создание печатной формы 1С на этом можно считать завершенным.

Скачать внешнюю печатную форму рассмотренную в статье: Внешняя печатная форма


Добавить комментарий