Использование свойства Текущая строка 1С
ТекущаяСтрока — свойство таблицы формы, содержащее идентификатор текущей строки. Тип свойства может различаться в зависимости от источника таблицы. Для всех источников, кроме динамического списка текущая строка 1с — это числовой идентификатор. Для динамического списка возможны несколько вариантов
Применение свойства Текущая строка 1С
Рассмотрим несколько способов практического применения свойства ТекущаяСтрока. С его помощью можно изменить текущую строку таблицы форы, получить строку таблицы источника и т. д.
Изменение текущей строки таблицы
Свойство ТекущаяСтрока доступно не только для чтения, но и для изменения. Таким образом с его помощью мы можем изменить текущую строку таблицы формы.
Пример 1. Для динамического списка справочника Номенклатура, создать процедуру изменяющую текущую строку списка. В качестве новой текущей строки, использовать ссылку на элемент справочника, переданную в параметре.
Заметим, что если строки с указанной ссылкой не будет найдена в таблице формы, то свойство ТекущаяСтрока примет значение Неопределено. Что означает отсутствие текущей строки таблицы.
Получение строки источника
Так как свойство ТекущаяСтрока является идентификатором, его можно использовать в качестве параметра метода НайтиПоИдентификатору. При помощи данного метода можно получить строку источника таблицы формы (нельзя использовать для динамического списка). Так как строку источника можно искать и использовать не только на клиенте, но и на сервере, это дает некоторое преимущество, над свойством таблицы формы ТекущиеДанные.
Пример 2. В серверной процедуре получить данные текущей строки таблицы значений ТаблицаТоваров, которая расположена на форме.
Работа с табличной частью объектов в 1С
Табличные части существуют у многих объектов в 1С:
Табличные части позволяют хранить неограниченное количество структурированной информации, принадлежащей одному объекту.
Рассмотрим некоторые приемы работы с табличными частями.
Как обойти табличную часть
Для обхода табличной части можно использовать цикл Для каждого
Для каждого Строка из ТабличнаяЧасть Цикл
На каждой итерации в переменную Строка передается очередная строка табличной части. Значения реквизитов строки можно получить выражением Строка.ИмяРеквизита.
Как получить и обойти выделенные строки табличной части
Для вывода информации из табличной части объекта служит элемент формы Табличное поле. Для включения возможности выделения нескольких строк на табличном поле нужно установить значение Множественный у его свойства Режим выделения.
Для получения перечня выделенных строк используется следующий код:
Для того чтобы обойти выделенные строки используется цикл Для каждого:
Для каждого Строка из ВыделенныеСтроки Цикл
Как программно выделить строки табличной части (табличного поля) и снять выделение
Чтобы программно снять выделение строк табличного поля:
Чтобы программно выделить все строки табличного поля:
Как очистить табличную часть
Как получить текущую строку табличной части
Текущая строка — это срока, в которой у пользователя в данный момент находится курсор. Чтобы ее получить, нужно обратиться к элементу управления на форме, который связан с табличной частью.
Для обычных форм код будет выглядеть так:
Для управляемых форм:
Как добавить новую строку в табличную часть
Добавление новой строки в конец табличной части:
Добавление новой строки в любое место табличной части (последующие строки будут сдвинуты):
Как программно заполнить реквизиты строки табличной части
Если нужно программно заполнить реквизиты строки табличной части, которую добавляет пользователь, необходимо использовать обработчик события табличной части ПриНачалеРедактирования.
Создаваемая обработчиком процедура имеет три параметра:
Рассмотрим пример. Допустим, нам нужно заполнить реквизит табличной части СчетУчета, в случае, когда добавляется новая строка. При редактировании существующей строки изменять счет учета не нужно.
//Если пользователь редактирует существующую строку, то ничего не делаем
Если НЕ НоваяСтрока Тогда
Возврат ;
КонецЕсли ;
Работа с табличной частью объектов в 1С : 13 комментариев
Приветствую!
Только начал изучать 1С.
Кое что уже знаю, но мало и опыта практически ноль.
Создал свою конфигурацию, пока только для тестов.
В данной конфигурации есть документ, назовем его «Заявка».
В данной заявке, есть табличная часть, в которой есть реквизит «Стоимость».
Получается, что таких документов много и мне нужно сложить все реквизиты «Стоимость» из всех документов «Заявка».
Вопрос.
Как мне это сделать?
Предполагаю, что нужно использовать функцию с экспортом, в которой будет цикл «Для Каждого ……»
Но как это оформить, пока не могу понять…
Сделать это можно по-разному. Цикл Для каждого, на мой взгляд, не очень подходящий вариант, т.к. будет работать слишком долго. Да и надо еще где-то список документов брать.
Я бы порекомендовал сделать запрос к табличной части документа (именно к табличной части, а не к документу). Выбрать там ваш столбец Стоимость и другие столбцы, если нужно. И применить функцию СУММА к этому столбцу. Подробнее и с примерами смотрите в статье Группировки в запросах 1С http://chel1c.ru/querry_group/
Спасибо!
Буду пробовать.
А может это подойдет?
Табличная часть (Tabular section)
Итог (Total)
Синтаксис:
Тип: Число; Строка.
Индекс либо имя колонки, по которой подсчитывается итог.
Возвращаемое значение:
Тип: Число; Неопределено.
Суммирует значения всех строк в указанной колонке.
Если в колонке установлен тип и он единственный, то при суммировании будет предприниматься попытка преобразования значения к типу Число.
Если колонке не присвоены типы, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них есть тип Число, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них нет типа Число, то результатом будет значение Неопределено.
Сервер, толстый клиент, внешнее соединение.
Пример:
Это подошло бы, если бы нужно было суммировать колонку в одном документе. А Юрию нужно суммировать колонку Стоимость всех документов.
Добрый день!
Достаточно ли будет обратиться в модуле формы к текущей строке табличной части или в модуле менеджера тоже нужно будет что-то прописать?
Не совсем понял, о чем конкретно вопрос.
Если о том, как получать и работать с текущей строкой табличной части, то в модуле менеджера ничего писать не нужно.
//Создаём новую коллекцию печатных форм
КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(«ПечатьЭтикеток»);
//Добавляем в коллекцию сформированный табличный документ
КоллекцияПечатныхФорм[0].ТабличныйДокумент = ТабДокумент;
//Устанавливаем параметры печати (при необходимости)
КоллекцияПечатныхФорм[0].Экземпляров = 1;
КоллекцияПечатныхФорм[0].СинонимМакета = «ПечатьЭтикеток»; //Так будет выглядеть имя файла при сохранении в файл из формы «Печать документов»
//Вывод через стандартную процедуру БСП
УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, Неопределено, Неопределено);КонецПроцедуры
ТабДокумент.АвтоМасштаб = истина ;
ТабДокумент.ОтображатьСетку = Ложь;
ТабДокумент.ТолькоПросмотр = Истина;
ТабДокумент.ОтображатьЗаголовки = Ложь;
Макет = ДокСсылка.ПолучитьОбъект().ПолучитьМакет(«Этикетка»);
Для каждого Стр Из ДокСсылка.Картриджи Цикл
//Если Лев(Стр.СерийныйНомер,2) «30» Тогда
// Продолжить;
//КонецЕсли;
ОбластьМакета = Макет.ПолучитьОбласть(«ШПК»);
ЧтоТо = Стр.СерийныйНомер;
ПервыйМодуль.ВывестиШтрихкодДокументаВОбластьМакета(ВнешняяКомпонента,ОбластьМакета,ЧтоТо) ;
ОбластьМакета.Параметры.Клиент = ДокСсылка.Партнер;
ОбластьМакета.Параметры.Орг = «СК ПОТОК тел.78-06-78»;//Константы.пмОрганизацияДляСервиса.Получить();
ОбластьМакета.Параметры.КЖ = СокрЛП(Стр.Картридж.Артикул);
ОбластьМакета.Параметры.СерийныйНомер = Стр.СерийныйНомер;
ТабДокумент.Вывести(ОбластьМакета);
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЦикла;
Информацию о выделенных строках вы можете получить только в модуле формы документа, причем, если мне не изменяет память, это должна быть клиентская процедура. По ссылке на документ выделенные строки получить нельзя.
Да, логика такая. Только учтите, что таблица значений не передается с клиента на сервер.
Выделенный строки табличного поля на форме — это массив строк. Надо попробовать, передастся ли он. Если да, хорошо. Если нет — надо думать, как его передать.
Доброго времени суток!
Создаю обработку на обычных формах, в которой имеется несколько Табличных частей. Они в свою очередь находят отображение в Форме обработки. И если данные первых 3, меня после закрытия Формы, не интересуют, то данные последней хотелось-бы использовать в дальнейшем, пока открыта обработка. В настоящее время при закрытии Формы Табличные части очищаются. В дальнейшем, в новом сеансе работы с обработкой эти данные не нужны. Насколько я понимаю Функции сохранения Данных Табличной части обработки не существует. Табличную часть в обработке решил использовать из-за возможности сохранить структуру Данных. Как мне сохранить эти данные для использования в других окнах?
Может у Вас есть видео по данному вопросу?
Программирование в 1С для всех
В предыдущей статье мы узнали, как настраивать и конфигурировать табличные части объектов 1С 8.3. В этой статье мы изучим некоторые вопросы программной работы с табличными частями 1С.
Заполнение табличной части 1С 8.3
Очень часто встречается задача заполнить табличную часть какими-нибудь значениями, например результатом выполнения запроса. Для демонстрации реализуем пример, в котором выполняется заполнение табличной части. Сделаем небольшую учебную задачу: будем заполнять табличную часть документа всей номенклатурой, которая не помечена на удаление. Количество при этом будет равно 1. Для заполнения табличной части документа нам необходимо работать с одноименной таблицей реквизита Объект, который является основным реквизитом управляемой формы.
Поскольку по условиям задачи, необходимо отобрать всю не помеченную на удаление номенклатуру, то оптимально это сделать при помощи запроса, в котором я буду получать все не помеченные элементы справочника номенклатура. Я создал команду, при выполнении которой будет заполняться табличная часть, и разместил её на форме.
Исполнение команды будет выполняться в серверном контексте, поскольку объект Запрос не работает в клиентском контексте на тонком клиенте.
При обходе запроса, я использую метод Добавить табличной части объекта (вообще это метод объекта, который имеет тип ДанныйФормыКоллекция, именно в этот тип преобразуется табличная часть документа-объекта, при создании на сервере). Данный метод является функцией, которая создаёт и возвращает новую строку.
Обратите внимание, поскольку при обходе запроса и заполнения новой строки, я использую метод ЗаполнитьЗначенияСвойств, то поля в запросе должны называться так же, как и поля табличной части.
Очистка табличной части документа 1С 8.3
Если мы реализуем данный код, то он будет не совсем корректен: каждый раз при выполнении этого кода будут добавляться новые строки, а вполне возможно, что пользователю старые строки не нужны. Поэтому, будем очищать имеющиеся строки, перед добавлением новых строк. Для этого воспользуемся методом Очистить объекта СписокТоваров, который имеет тип ДанныйФормыКоллекция.
После выполнения этого метода вся табличная часть будет очищена.
Текущая строка табличной части 1С 8.3
В процессе работы может возникнуть необходимость отработать текущую строку табличной части, т.е. ту строку, которая в данный момент выделена.
Например, может возникать ситуация, что мы редактируем какое-нибудь поле текущей строки таблицы на форме, и нам нужно, чтобы было пересчитано другое поле (или несколько полей) этой текущей строки. Например, мы изменяем цену (или количество) нашей табличной части, и необходимо, чтобы сумма автоматически была пересчитана.
Для решения данной задачи нужно воспользоваться свойством ТекущиеДанные элемента с типом ТаблицаФормы, который соответствует нужной табличной части. Свойство ТекущиеДанные возвращает значение полей текущей строки.
Для того, чтобы отработать изменение текущего поля цены, создадим обработчик события ПриИзменении этого поля.
В этом обработчике напишем код, который будет пересчитывать значения полей текущей строки табличной части.
Ещё пример: я создал команду, которая должна увеличивать количество в текущий строке табличной части в два раза и пересчитывать сумму. Эта команда размещена в командной панели таблицы и имеет следующий код:
Теперь доработаем этот пример: после увеличения текущей строки будем сдвигать текущую строку на строку вниз. Для этого допишем предыдущий код:
В этом коде мы получаем идентификатор текущий строки при помощи свойства таблицы управляемой формы ТекущаяСтрока, и если мы не выходим за приделы таблицы, то сдвигаем нашу текущую строку на один шаг вниз.
Также при помощи текущей строки можно находить аналогичную строку в соответствующей табличной части основного реквизита формы Объект, которую также можно изменять (строка на форме тоже изменится автоматически). Мы ранее сделали пересчет суммы при изменении цены, теперь сделаем пересчет суммы при изменении количества, но напрямую через реквизит Объект.
В этом коде мы используем метод НайтиПоИдентификатору переменной Объект.СписокТоваров, которая имеет типа ДанныйФормыКоллекция, этот метод получает элемент коллекции по указанному идентификатору. Если этот элемент найден, то мы можем с ними работать, причем данные на форме изменяться автоматически.
Обход табличной части 1С
Часто возникают задачи обойти табличную часть и изменить какие-либо значения в столбцах. В предыдущих примерах мы изменяли текущую стоку таблицы, теперь реализуем пример, когда нужно изменить все строки. В этом случае нет необходимости обращаться к элементам формы, можно работать напрямую с основным реквизитом Объект.
Остальные статьи по теме конфигурирования в 1С:
Более подробно и основательно конфигурирование в 1С дается в моей книге:
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
Промо-код на скидку в 15% — 48PVXHeYu
Внешняя печатная форма для текущей строки в табличной части документа
Добрый день, коллеги!
Подскажите, пожалуйста, возможно ли получить из объекта типа Документ (текущий документ) ссылку на текущую строку табличной части документа, чтобы вывести печатную форму только для конкретного сотрудника. Например, документ Прием на работу списком, в нем необходимо вывести договор для сотрудника в выделенной строке в таблице. Объект Документ по умолчанию используется в качестве параметра во внешней печатной форме. Пробовали разные варианты, получилось обратиться к реквизитам шапки, но не табличной части.
Управляемые, конфигурация Зарплата и кадры государственного учреждения, редакция 3.1
3.1.12.144
Версия платформы 8.3.15
Функция СведенияОВнешнейОбработке() Экспорт
Назначения = Новый Массив ;
Назначения.Добавить(«Документ.НачислениеЗарплаты») ;
ПараметрыРегистрации = Новый Структура ;
ПараметрыРегистрации.Вставить(«Вид»,»ПечатнаяФорма»);
ПараметрыРегистрации.Вставить(«Назначение»,Назначения);
ПараметрыРегистрации.Вставить(«Наименование»,»Печать текущей строки»);
ПараметрыРегистрации.Вставить(«Версия»,»1.0″);
ПараметрыРегистрации.Вставить(«Информация»,»Дополнительная обработка табличной части»);
ПараметрыРегистрации.Вставить(«БезопасныйРежим»,Ложь);
Команды = ПолучитьТаблицуКоманд() ;
ДобавитьКоманду(Команды, «Печать текущей строки»,»ПечатьТекущейСтроки»,»ВызовКлиентскогоМетода»,Ложь,) ;
Функция ПолучитьТаблицуКоманд() и ДобавитьКоманду() стандартные, легко гуглятся.
здесь для переменной ВыполняемаяКоманда предусматривать условие в принципе нужно только если команд у вас несколько. Получаете форму вызывающего документа через ВладелецФормы, соответственно, все остальные данные вызывающей формы можно уже легко получить. В приведенном примере выводится сотрудник из текущей строки таблицы Начисления.
1с как программно установить текущую строку
Сайт о программировании в среде 1С v8.х для начинающих
Как установить текущую строку или найти данные по текущей строке в 8.2
Как установить строку в 8.1 (обычные формы) читайте здесь.
Для начала нужно уяснить, что есть объект который содержит данные, например ДанныеФормыКоллекция и есть объект который отображает данные визуально – Таблица.
В Таблице есть только текущая строка, с помощью неё нельзя узнать все существующие значения ДанныеФормыКоллекция с которыми она связана. В свою очередь у ДанныеФормыКоллекция нет текущей строки. Чтобы связать эти объекты в 1с используется Идентификатор, ведь строки порядок строк можно изменить как в визуальной части так и в данных, но свзяь при этом не должна нарушиться.
Рассмотрим это на примере:
У формы есть реквизит ТЗ типа (ТаблицаЗначений) – в скобках потому, что фактический тип – ДанныеФормыКоллекция
Реквизит выведен на форму в виде Таблицы.
Определение строки Таблицы значений по Текущей строке Таблицы
Чтобы определить какая строка ТЗ сейчас текущая, нужно сначала получить идентификатор строки в Таблице, а затем по нему найти строку в ТЗ
ИдентификаторСтроки = Элементы.ТЗ.ТекущаяСтрока; // Получаем идентификатор в ТаблицеСтрокаТЗ = ТЗ.НайтиПоИдентификатору(ИдентификаторСтроки);
Установка текущей строки в Таблице
Чтобы установить текущую строку таблицы нужно сделать наоборот. Сначала получить идентификатор ТЗ, а затем установить на нём текущую строку Таблицы.
СтрокаТЗ = ДанныеФормыКоллекция[0]; // для примера возьмем строку 1ИдентификаторСтроки = СтрокаТЗ.ПолучитьИдентификатор();Элементы.ТЗ.ТекущаяСтрока = ИдентификаторСтроки;
Для более удобного понимания можете скачать обработку которая демонстрирует функции определения и установки текущей строки. Обработка работает только в тонком клиенте!
Недостаточно прав для комментирования
Работа со строками: от простого к сложному
Соединение строк (конкатенация)
Кавычки в строке (иногда нужно использовать в » в строке в этом случае используются двойные кавычки «»
Вычисление длины строки (СтрДлина)
Вставка специальных символов, символы по коду (Символы, Символ, КодСимвола)
Для получения особых символов переноса строки, табуляции и др. есть перечисление Символы
Получение символа по коду (Символ)
Получение кода символа (КодСимвола)
Удаление незначащих символов (СокрЛП, СокрЛ, СокрП)
Проверка пустая строка (т.е. строка не содержит значимых символов пробел, табуляция, перенос строки не учитываются)
Получение части строки (Лев, Прав, Сред)
Работа с многострочными строками (СтрПолучитьСтроку, СтрЧислоСтрок)
Получение количество строк в строке
Получение строки по номеру
Еще иногда требуется функция проверки многострочная строка или нет
Поиск и замена вхождений строки (СтрНайти, СтрЗаменить, СтрЧислоВхождений)
Проверка осуществляется с учетом регистра. Поддерживается с платформы 8.3.6. Проверка вхождения строки
СтрНайти полезная и часто используемая функция предоставляет возможности
Вычисление числа вхождений
Проверки строка начинается, заканчивается (СтрНачинаетсяС, СтрЗаканчиваетсяНа)
Поддерживается с платформы 8.3.6.
Сравнение строк СтрСравнить
Строки сравниваются посимвольно по коду символа, для ясности несколько примеров «Строка12» «8.3.8», «8.3.9.2000» > «8.3.10»
С учетом регистра можно сравнить строки через знаки сравнения как в примерах
Сравнение без учета регистра можно произвести функций СтрСравнить. Поддерживается с платформы 8.3.6.
Преобразование в строку (Строка, Формат)
В языке 1С есть автоматическое преобразование типа когда все части выражения приводятся к типу первого выражения
Преобразование функцией Строка
при преобразовании появляется символ неразрывный пробел, а он обычно не нужен
«Правильнее» будет преобразовывать функцией формат, которая приводит к строке простые типы и можно воспользоватся конструктором
Строка на разных языках НСтр
Форматирование строки по шаблону СтрШаблон. Поддерживается с платформы 8.3.6.
Очень полезная функция которая позволяет избежать соединения строк и сделать текст более читабельным
Функции СтрСоединить, СтрРазделить. Поддерживается с платформы 8.3.6.
Очень полезные функции улучшают читаемость кода.
СтрРазделить удобна когда необходимо разобрать строку с разделителями, например CSV файл, разбор текста на слова, строки
Аналогично, только наоборот работает функция СтрСоединить, преобразуя массив к строке.
Когда в 1с встает вопрос разбора большого текста это уже зоопарк из СтрДлина, Сред, СтрНайти для повышения читаемости программ для подобных задач использую свои функции: РазборПрочитатьЦелоеЧисло, РазборПрочитатьШестнадцатеричноеЧисло, РазборПрочитатьНезначимые, РазборПрочитатьИдентификатор,
РазборПропуститьНаборСимволов, РазборПрочитатьСимвол, РазборПрочитатьДоСимвола, РазборНайтиТекст
Особенности работы полосы прокрутки
Источник: http://its.1c.eu/db/content/metod8dev/src/platform81/metod/form/table field/i8102812.htm
Перемещение панели задач в низ экрана с помощью мышки
Второй способ переместить Панель задач вниз экрана это перемещение с помощью мышки. Для того чтобы воспользоваться данным способом кликните правой кнопкой мышки по Панели задач и обратите внимание на пункт меню «Закрепить панель задач». Если напротив данного пункта меню установлена отметка, то вам нужно кликнуть по данному пункту меню и снять ее. Таким образом вы открепите панель задач от ее текущего расположения.
После того как вы открепили Панель задач, вы можете переместить ее в низ экрана или в любое другое положение при помощи мышки. Для этого нужно просто кликнуть левой кнопкой мышки по пустому пространству на Панели задач и не отпуская кнопку мышки переместить Панель задач в нужное положение, например в них экрана.
После того как Панель задач займет нужное вам положение не забудьте закрепить ее на этом месте с помощью меню. Это позволит избежать подобных проблем в будущем.
Причины появления ошибки в 1С
Разберем основные моменты, связанные с частым появлением сбоев при работе с базой данных. Они возникают в разных ситуациях, и определить их истинную причину не всегда возможно.
Одна из самых частых причин нарушение работы связанна с компьютером, на который установлена база данных 1С. Рабочая область может автоматически закрываться из-за нехватки оперативной памяти на сервере. Все возникающие неисправности должны быстро устраняться. В противном случае есть вероятность потери данных.
Как выделить сразу все документы
Первый пример — когда нужно выделить сразу все документы. Откроем список документов «Реализация (акт, накладная)».
Для выделения всех строк нажмем комбинацию клавиш CTRL+A на клавиатуре. Все строки будут желтого цвета.
Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону
+7 499 350 29 00
Услуги и цены можно увидеть по
Будем рады помочь Вам!
Теперь можем выполнить массовое изменение. Для этого нажмем правой кнопкой мыши в списке документов, либо кнопку «Еще». Затем выбираем нужное действие, например, «Провести».
Примеры работы с табличным полем в 1С 8
Приветствую вас, уважаемые коллеги! Сегодня я продолжу тему о работе с табличным полем. Уже упоминалось о том, как открыть форму записи регистра сведений из строки табличного поля, которая показывает некоторые приемы работы с табличным полем. Но сейчас давайте поговорим об основных приемах работы с элементом управления табличное поле. Поехали!
Строка табличной части
Добавить новую строку табличной части можно с помощью методов Добавить и Вставить. Через точку от строки табличной части можно обращаться к реквизитам строки:
//добавление строки табличной части
//для метода Вставить нужно указать индекс строки
//у строки есть предопределенная колонка НомерСтроки
//в отличии от индексов номера строк начинаются с 1
Как отобразить данные в элементе управления ТабличноеПоле?
Примеры реализации данного метода вы можете посмотреть здесь и тут.