1с добавление в табличную часть. "Горячие" клавиши: общие действия

Табличные части существуют у многих объектов в 1С:

  • Справочники
  • Документы
  • Отчеты и обработки
  • Планы счетов
  • Планы видов характеристик
  • Планы видов расчета
  • Бизнес-процессы и задачи

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

Рассмотрим некоторые приемы работы с табличными частями.

Как обойти табличную часть

Для обхода табличной части можно использовать цикл Для каждого

Для каждого Строка из ТабличнаяЧасть Цикл

Сообщить(Строка. РеквизитТабличнойЧасти) ;

КонецЦикла ;

На каждой итерации в переменную Строка передается очередная строка табличной части. Значения реквизитов строки можно получить выражением Строка.ИмяРеквизита .

Как получить и обойти выделенные строки табличной части

Для вывода информации из табличной части объекта служит элемент формы Табличное поле . Для включения возможности выделения нескольких строк на табличном поле нужно установить значение Множественный у его свойства Режим выделения .

Для получения перечня выделенных строк используется следующий код:

Для того чтобы обойти выделенные строки используется цикл Для каждого :

ВыделенныеСтроки= ЭлементыФормы. ИмяТабличногоПоля. ВыделенныеСтроки;

Для каждого Строка из ВыделенныеСтроки Цикл

//содержимое цикла

КонецЦикла ;

Как программно выделить строки табличной части (табличного поля) и снять выделение

Чтобы программно снять выделение строк табличного поля:

ЭлементыФормы. ИмяТабличногоПоля. ВыделенныйСтроки. Очистить() ;

Чтобы программно выделить все строки табличного поля:

Для каждого ТекущаяСтрока Из ТабличнаяЧасть Цикл
ЭлементыФормы. ИмяТабличногоПоля. ВыделенныеСтроки. Добавить(ТекущаяСтрока) ;
КонецЦикла ;

Как очистить табличную часть

ТабличнаяЧасть. Очистить() ;

Как получить текущую строку табличной части

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

Для обычных форм код будет выглядеть так:

ЭлементыФормы. ИмяТабличногоПоля. ТекущиеДанные;

Для управляемых форм:

Элементы. ИмяТабличногоПоля. ТекущиеДанные;

Как добавить новую строку в табличную часть

Добавление новой строки в конец табличной части:

НоваяСтрока= ТабличнаяЧасть. Добавить() ;

Добавление новой строки в любое место табличной части (последующие строки будут сдвинуты):

НоваяСтрока= ТабличнаяЧасть. Вставить(Индекс)
//Индекс - номер добавляемой строки. Нумерация строк начинается с нуля.

НоваяСтрока. Реквизит1 = "Значение" ;

Как программно заполнить реквизиты строки табличной части

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

Создаваемая обработчиком процедура имеет три параметра:

  • Элемент — содержит элемент управления ТабличноеПоле .
  • НоваяСтрока — булево. Содержит значение Истина , если добавляется новая строка табличной части, и Ложь, если пользователь начал редактировать уже существующую строку.
  • Копирование — булево. Содержит значение Истина , если пользователь копирует строку, и Ложь в остальных случаях.

Рассмотрим пример. Допустим, нам нужно заполнить реквизит табличной части СчетУчета , в случае, когда добавляется новая строка. При редактировании существующей строки изменять счет учета не нужно.

Процедура ТабличнаяЧастьПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)

//Если пользователь редактирует существующую строку, то ничего не делаем
Если НЕ НоваяСтрока Тогда
Возврат;
КонецЕсли ;

//Если же строка новая, устанавливаем счет учета
ТекСтрока = Элемент. ТекущиеДанные; //Получили текущую строку табличной части
ТекСтрока. СчетУчета = ПланыСчетов. Хозрасчетый. НужныйСчетУчета;
КонецПроцедуры

К базовым возможностям языка программирования обычно относят работу с числами и строками. Обычно эти возможности зашиты в код компилятора (или реализованы «базовые» классы языка программирования).

В 1С возможности работы со строками запрограммированы в самой платформе. Сегодня мы рассмотрим особенности работы со строками 1С в программах на встроенном языке 1С.

Значение строки 1С

1. Начнем с самого простого. Создание переменной и присваивание ей строкового константного значения выглядит в 1С так:

Переменная = "Привет, мир! ";

Если требуется в константном строковом значении 1С указать символ кавычки, то его нужно задвоить «»

Переменная = "Привет, ""мир""!";

2. Перенос строки 1С можно указать сразу двумя способами. Первый – с использованием символа |

Переменная = "Привет,
| мир! ";

Второй – с использованием системного перечисления Символы. Оно позволяет добавить как перенос строки 1С, так и другие непечатные символы, например TAB.

Переменная = "Привет" + Символы.ПС + "мир! ";

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

Список языков находится в окне конфигурации в ветке Общие/Языки. Каждый язык имеет короткий идентификатор, такой как ru или eng .

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

Переменная = "ru=""Привет, мир! ""; en=""Hello, world! """;

Если Вы будете использовать сформированную так строку 1С как обычно – то она и будет тем, что в ней написано. Для того, чтобы система разбивала ее на два варианта и использовала нужный – необходимо использовать функцию НСтр():

//правильно для двуязычных конфигураций
Сообщить(НСтр(Переменная));

Реквизит с типом строки 1С

Реквизит – это поле справочника/документа 1С. Отличается от переменной в программе на языке 1С тем, что для реквизита точно указывается его тип (число, строка 1С и т.п.). Если Вам нужно освежить в памяти что такое реквизит – посмотрите урок, посвященный .

Если Вы укажите тип реквизита – строка 1С, то дополнительно необходимо указать параметры.

Строки 1С бывают неограниченной длины (указывается как длина = 0) и ограниченной длины, с указанием точного количества символов. Строки 1С неограниченной длины хранятся в отдельной таблице SQL, поэтому их использование менее производительно, чем ограниченной.

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

Работа со строками 1С

Для работы со строками есть несколько встроенных функций платформы 1С.

  • СокрЛП("Невероятно, но факт!")
    Убирает из строки 1С лишние пробелы. Также можно использовать для преобразования любых типов к строке 1С (например, числа).
  • Переменная = "Вася " + СокрЛП(" плюс") + " Оля"; //будет "Вася плюс Оля"
    Пример суммирования нескольких строковых значений 1С. В результате получится одна строка 1С.
  • Переменная = Лев("Музыка", 2); //будет "Му"
    Переменная = Сред("Музыка", 2, 2); //будет "зы"
    Переменная = Прав("Музыка", 2); //будет "ка"
    Различные варианты получения подстроки из строки 1С.
  • Переменная = Найти("Музыка", "зы"); //будет 3
    Поиск подстроки в строке 1С, начиная с символа 1.
  • Переменная = СтрДлина("Музыка"); //будет 6
    Возвращает количество символов в строке 1С.
  • Сообщить("Привет") //в окне сообщений внизу окна 1С
    Предупреждение("Привет") //всплывающее диалоговое окно
    Состояние("Привет") //в строчке отображения состояния внизу слева
    .

Приведение объектов к строке 1С

Как известно самый популярный формат для обмена структурированной информацией в настоящее время – это XML . Даже последняя версия MS Office Word и Excel сохраняют файлы в этом формате (docx и xlsx соответственно, поменяйте расширение на zip, откройте в архиваторе).

Платформа 1С для обмена данными предоставляет несколько вариантов, основной из которых – также XML.

1. Самый простой метод – использование функции СокрЛП() или Строка(). В тексте запроса можно использовать функцию ПРЕДСТАВЛЕНИЕ(). Результат их действия один и тот же – они генерируют строковое представление любого объекта 1С для пользователя.

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

2. Любой объект 1С (с ограничениями) может быть преобразован в XML и обратно. Процесс преобразования называется сериализация.

СтрокаВидаXml = XMLСтрока(Значение); //получаем XML из значения 1С
Значение1С = XMLЗначение(Тип("СправочникСсылка.Номенклатура"),СтрокаВидаXml); //получаем значение 1С из строки XML, необходимо указать тип 1С, который должен быть получен

3. Существует собственный способ платформы 1С преобразовать в строку любой объект 1С. Он мигрировал из версии 1С 7.7. Этот формат не понимают другие программы, но понимает другая 1С, что позволяет легко использовать его для обмена между базами 1С.

Строка = ЗначениеВСтрокуВнутр(Значение1С); //получаем строку 1С из значения 1С
ЗначениеВФайл("C:\MyFile.txt", Значение1С); //другой вариант, получаем файл с сохраненной строкой из значения 1С
Значение1С = ЗначениеИзСтрокиВнутр(Строка); //обратно из строки 1С
Значение1С = ЗначениеИзФайла("C:\MyFile.txt"); //обратно из файла

Редактирование строк 1С на форме

Кроме работы со строками 1С в программе на языке 1С конечно хотелось бы, чтобы пользователь мог их редактировать. Для этого есть несколько возможностей:

1. Самый простой способ – запросить ввод строки 1С по требованию. Этот способ используют при обучении программированию 1С, в жизни он применяется гораздо реже (но применяеся!).

Переменная = "";
Строка = ВвестиЗначение(Переменная, "Введите ФИО");

2. Для вывода реквизита объекта 1С (справочника/документа) или реквизита формы (см. ) чаще всего используют поле ввода. Это самый распространенный в 1С инструмент для работы пользователя с редактированием полей.

3. Возможности поля ввода можно расширить (см. свойства поля ввода, правой кнопкой на нем, подробнее ):

  • Галочка Многострочный режим редактирования
  • Галочка Расширенное редактирование (доступна если установлена предыдущая галочка)
  • Галочка Режим пароля (см. ).

4. Если всех возможностей поля ввода Вам не хватает – есть встроенный редактор. Для его добавлению на форму нужно в меню Форма/Вставить элемент управления добавить Поле текстового документа. В его свойствах можно указать режим его работы – свойство Расширение.

Поле текстового документа нельзя связать напрямую с данными. Необходимо в обработчике события ПриОткрытии() формы (см. ) прописать функцию:

ЭлементыФормы.ИмяЭлементаПолеТекстовогоДокумента.УстановитьТекст(ЗначениеСтрока); //здесь ЗначениеСтрока – это текст полученный, например из реквизита

А в обработчика сохранения – например, в кнопке Сохранить – добавить сохранение:

ЗначениеСтрока = ЭлементыФормы.ИмяЭлементаПолеТекстовогоДокумента.ПолучитьТекст(); //ЗначениеСтрока здесь – это реквизит, куда мы сохраняем значение

5. В 1С версии 8.2.11, в управляемых формах, появилась новая возможность представления строки 1С – поле Форматированный документ.


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

  • В объект 1С, форму которого мы делаем (справочник, документ, обработка и т.п.) – добавьте реквизит с типом ХранилищеЗначения
  • В функции ПриЧтенииНаСервере() установим текст из реквизита

    //здесь Реквизит – это добавленный реквизит объекта 1С
    //здесь ФорматированныйДокумент – это имя поля на форме для редактирования
    &НаСервере

    ФорматированныйДокумент = ТекущийОбъект.Реквизит.Получить();
    КонецПроцедуры

  • В функции ПередЗаписьюНаСервере() или по кнопке запишем текст из поля

    &НаСервере
    Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    ТекущийОбъект.Реквизит = Новый ХранилищеЗначения(ФорматированныйДокумент);
    КонецПроцедуры

Для предыдущего примера можно добавить строки кода:

ЭлементыФормы.ТабличноеПоле1.ДобавитьСтроку(); стр = ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока; стр.Первая = 3; стр.Вторая = "Мука"; стр.Количество = 350;

Как определить число строк в таблице значений в 1с 8?

колСтрок = табл.Количество(); Сообщить("Количество строк в таблице значений табл = " + колСтрок);

Результат:

Количество строк в таблице значений табл = 3

Как удалить строку в таблице значений в 1с 8?

строкаТабл = табл; табл.Удалить(строкаТабл);

Как свернуть таблицу значений в 1с 8?

Сворачиваем:

табл.Свернуть("Вторая", "Количество");

Получаем после свёртки:

Как отсортировать таблицу значений в 1с 8?

Сортируем по второй и третей колонкам:

табл.Сортировать("Вторая, Количество");

Как в табличном поле позиционироваться на строке в 1с 8?

На второй стоке:

ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока = табл;

Печатная форма в 1с 8

Сначала делаем макет (имя области: выделяем нужные строки макета, в свойствах, в поле Имя, вводим имя области), затем выводим его в табличный документ:

Процедура КоманднаяПанель1Печать(Кнопка) перем тд, рс, рс1, макет, код, наим, номен; код = 0; макет = ПолучитьМакет("Товары"); шапка = макет.ПолучитьОбласть("Шапка"); шапка.Параметры.датта = ТекущаяДата(); рс = макет.ПолучитьОбласть("РС"); рс1 = макет.ПолучитьОбласть("РС1"); тд = Новый ТабличныйДокумент; тд.Вывести(шапка); номен = Справочники.Номенклатура; выборка = номен.ВыбратьИерархически(); пока выборка.Следующий() цикл код = код + 1; если выборка.ЭтоГруппа = Истина тогда рс1.Параметры.код = код; рс1.Параметры.наим = выборка.Наименование; тд.Вывести(рс1); иначе рс.Параметры.код = код; рс.Параметры.наим = выборка.Наименование; тд.Вывести(рс); конецЕсли; конецЦикла; тд.ТолькоПросмотр = Истина; тд.Показать("Справочник ""Номенклатура"""); КонецПроцедуры