Проверка наличия в строке только цифр. Регулярные выражения Есть много примеров кода 1с для определения строки состоящей только из цифр. Как правило, это цикл с перебором значений строки. Предлагаю еще один без циклов, с использованием регулярных выражений
Код 1C v 8.3
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.Pattern = "^\d+$"; //шаблон поиска
Matches = RegExp.Execute(НашаСтрока);
Результат = Matches.Count;
Если в строке только цифры, результат = 1, если нет - 0
Категория:
Работа с Текстом (Строкой) Как Свернуть, Развернуть узлы Дерева значений на форме? Как программно свернуть/развернуть дерево значений на управляемой форме? Желательно &НаКлиенте.
Код 1C v 8.2 УП КоллекцияЭлементовДерева=ДеревоНоменклатуры.ПолучитьЭлементы();
//Свернуть дерево
Для Каждого Строка Из КоллекцияЭлементовДерева Цикл
ИдентификаторСтроки=Строка.ПолучитьИдентификатор();
Элементы.ДеревоНоменклатуры.Свернуть(ИдентификаторСтроки);
КонецЦикла;
//Развернуть дерево
Для Каждого Строка Из КоллекцияЭлементовДерева Цикл
ИдентификаторСтроки=Строка.ПолучитьИдентификатор();
Элементы.ДеревоНоменклатуры.Развернуть(ИдентификаторСтроки);
КонецЦикла;
Для выделенной, текущей строки:
Код 1C v 8.х // Разворот текущей строки в дереве:
Строка = ЭлементыФормы.ТабличноеПоле.ТекущаяСтрока;
ЭлементыФормы.ТабличноеПоле.Развернуть(Строка, Истина);
// Определим, развернут ли узел дерева в указанной строке.
УзелРазвернут = ЭлементыФормы.ТабличноеПоле.Развернут(Строка);
Если УзелРазвернут Тогда
// Если Развернут, то Свернуть
ЭлементыФормы.ТабличноеПоле.Свернуть(Строка);
КонецЕсли;
Код 1C v 8.х //перебором свернуть все Выделенные строки дерева Табличного поля
Для каждого Строка Из ЭлеменетыФормы.ТабличноеПоле1.ВыделенныеСтроки Цикл
ЭлементыФормы.ТабличноеПоле.Свернуть(Строка);
КонецЦикла;
Хотя конечно есть
Ctrl+Shift+"+" и
Ctrl+Shift+"-".
P.S. Для Табличного поля с галочкой Дерево(отображающего справочник), перебрать строки НЕВОЗМОЖНО!!!
Примеры вида:
Код 1C v 8.х Для каждого Строка Из ЭлементыФормы.тпОбъекты.Строки Цикл
// или
Для каждого Строка Из ЭлементыФормы.тпОбъекты.ТекущаяСтрока.Строки Цикл
ЭлементыФормы.тпОбъекты.Свернуть(Строка);
КонецЦикла;
- НЕ РАБОТАЮТ!!!
Для СправочникСписок (ДокументСписок) итератора нет. Это не коллекция значений, перебрать не сможете. Дерево здесь ни при чем.
Можно работать со строками либо через ПриПолученииДанных (предпочтительнее по скорости), либо ПриВыводеСтроки. Категория:
Работа с Деревом Значений Форма ~ Получение списка открытых окон и вывод свойств элементов Код 1C v 8.х Функция ПолучитьСписокОткрытыхОкон() Экспорт
ВключатьФормыЭлементов = ЭтаФорма.ВладелецФормы.ЭлементыФормы.ВключатьФормыЭлементов.Значение;
// Определим перебором , сколько у нас объектов в системе
КолвоОбъектов = 0;
Для Каждого ТипОбъекта Из ВсеТипы Цикл
Если (ТипОбъекта.Ключ <> "Константы") и (ТипОбъекта.Ключ <> "ОбщиеФормы") Тогда
Для каждого Объект из Метаданные[ТипОбъекта.Ключ] Цикл
Для каждого Фрм из Объект.Формы Цикл
КолвоОбъектов = КолвоОбъектов + 1;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
ЭлементыФормы.ХодВыполненияОперации.МинимальноеЗначение = 1;
ЭлементыФормы.ХодВыполненияОперации.МаксимальноеЗначение = КолвоОбъектов;
ЭлементыФормы.ХодВыполненияОперации.Шаг = 100 / КолвоОбъектов;
КолвоОбъектов = 0;
сзСписокОкон = Новый СписокЗначений;
// Перебор типов метаданных
Для Каждого ТипОбъекта Из ВсеТипы Цикл
Если (ТипОбъекта.Ключ <> "Константы") и (ТипОбъекта.Ключ <> "ОбщиеФормы") Тогда
Для каждого Объект из Метаданные[ТипОбъекта.Ключ] Цикл
Если ВключатьФормыЭлементов И(ТипОбъекта.Ключ = "Справочники" Или ТипОбъекта.Ключ = "Документы") Тогда
// для элементов справочников и документов
Менеджер = Вычислить((ТипОбъекта.Ключ + "[Объект.Имя]"));
Выборка = Менеджер.выбрать();
пока Выборка.Следующий() Цикл
ФормаЭлем = Выборка.Ссылка.ПолучитьФорму();
Если ФормаЭлем.Открыта() Тогда
сзСписокОкон.Добавить(ФормаЭлем, Строка(Выборка.Ссылка) + " (" + Объект.Имя + ", форма элемента)");
КонецЕсли;
КонецЦикла;
КонецЕсли;
Для каждого Фрм из Объект.Формы Цикл
Форма = Вычислить(ТипОбъекта.Ключ + "[Объект.Имя].ПолучитьФорму(Фрм)");
КолвоОбъектов = КолвоОбъектов + 1;
ЭлементыФормы.ХодВыполненияОперации.Значение = КолвоОбъектов;
Попытка
Если Форма.открыта() Тогда
сзСписокОкон.Добавить(Форма, Объект.Имя + " (" + Фрм + ")");
КонецЕсли;
Исключение
Сообщить("ошибка");
КонецПопытки;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат сзСписокОкон;
КонецФункции
Категория:
Работа с Формой (Диалог) и её элементами Удаление строк из табличной части документа, все или по условию. Удалить все строки табличного поля документа.
Код 1C v 8.х ОтражениеВУчете.Очистить(); // ОтражениеВУчете - название табличного поля
Как в табличной части документа удалить строки только с нулевым значением реквизита "Количество"?
Код 1C v 8.х //Получим документ и укажем параметры поиска
ОбъектДок = СсылкаДок.ПолучитьОбъект();
СтруктураДляПоиска = Новый Структура("Количество", 0);
ТабличнаяЧастьДок = ОбъектДок.Товары;
//Получаем список строк соответсвтвующих отбору, и перебором удаляем.
МассивПустыхСтрок = ТабличнаяЧастьДок.НайтиСтроки(СтруктураДляПоиска);
Для каждого Строка Из МассивПустыхСтрок Цикл
ТабличнаяЧастьДок.Удалить(Строка);
КонецЦикла;
ОбъектДок.Записать(); // Записываем изменения в документе
Как удалить все строки, кроме тех которые соответсвуют заданному отбору?
Код 1C v 8.х // Укажем условия отбора: Нужно оставить только строки где СубконтоКт1 = РБПНаПФР
ПараметрыОтбора = Новый Структура("СубконтоКт1", Справочники.РасходыБудущихПериодов.РБПНаПФР);
//Теперь выгружаем табличную часть в таблицу значений
ТЗисходн=ОтражениеВУчете.Выгрузить();
//Скопируем ТЗ с заданным отбором в новую ТЗ
ТЗнов = ТЗисходн.Скопировать(ПараметрыОтбора);
//Очистим табличную часть
ОтражениеВУчете.Очистить();
//Загружем в табличную часть новую таблицу значений
ОтражениеВУчете.Загрузить(ТЗнов);
В режиме управляемого приложения конструкция:
Код 1C v 8.2 УП Для каждого Запись из ТабличнойЧасти Цикл
Если Запись.НадоУдалить Тогда
ТабличнойЧасти.Удалить(Запись);
КонецЕсли;
КонецЦикла;
Работает некорректно, так как переписывает табличную часть и меняет индексы, сразу после удаления и Цикл полностью не обходит.
Решение пришло такое:
Код 1C v 8.2 УП КолВо = Объект.ТабличнойЧасти.Количество()-1;
ИндексСтроки = КолВо;
Для счетчик = 0 по КолВо Цикл
Запись = Объект.ТабличнойЧасти.Получить(ИндексСтроки);
если Запись.НадоУдалить тогда
Объект.ТабличнойЧасти.Удалить(Запись);
КонецЕсли;
ИндексСтроки = ИндексСтроки - 1;
КонецЦикла;
Категория:
Документы Перебор дат, заполнение списка, массива дат по порядку Код 1C v 8.х // Укажем период
ДатаН = Дата(2008,1,1);
ДатаК = Дата(2009,12,31);
// В Список значений поместим перебором каждую дату за период
СписокДат = Новый СписокЗначений;
ТекДата = ДатаН;
Пока ТекДата < ДатаК Цикл
СписокДат.Добавить(ТекДата);
// Увеличение ровно на одни сутки
ТекДата = ТекДата + 60 * 60 * 24;
КонецЦикла;
СписокДат.Добавить(ТекДата);
//В Массив добавим каждый первый день месяца за период
МассивДат = Новый Массив;
ТекДата = ДатаН;
Пока ТекДата < ДатаК Цикл
МассивДат.Добавить(ТекДата);
// Для получения даты следющего месяца на Конец Дня,
// получаем дату конца месяца текущей даты и плюс одни сутки
//ТекДата = КонецМесяца(ТекДата) + 60 * 60 * 24;
// Для получения даты следющего месяца на Начало Дня,
// получаем дату конца месяца текущей даты и плюс один
ТекДата = КонецМесяца(ТекДата) + 1;
КонецЦикла;
Категория:
Работа с Датами (Временем) Поле выбора ~ Заполнение списка значений в элементе поле выбора на форме Код 1C v 8.х //Заполнение списка перебором данных
// Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка
Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл
ЭлементыФормы.МетаданныеВыбор.СписокВыбора.Добавить(Метаданное.Имя, Метаданное. Представление());
КонецЦикла;
Код 1C v 8.х // Загрузка из списка значений
// Элемент формы ПараметрЦены имеет тип - Строка, Использование - кнопка списка
СписВыб = Новый СписокЗначений;
СписВыб.Добавить("Закупочная","Закупочная");
СписВыб.Добавить("Розничная","Розничная");
ЭлементыФормы.ПараметрЦены.СписокВыбора = СписВыб;
Код 1C v 8.х //Прямое добавление в список выбора
// Элемент формы Операционка имеет тип - Строка, Использование - кнопка списка
ЭлементыФормы.Операционка.СписокВыбора.Добавить("Windows 98");
ЭлементыФормы.Операционка.СписокВыбора.Добавить("Windows 2000");
ЭлементыФормы.Операционка.СписокВыбора.Добавить("Windows XP");
Код 1C v 8.х //Заполнение данными из результата запроса
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Физлицо", Физлицо);
Запрос.Текст =
"ВЫБРАТЬ
| ФизическиеЛицаСоставСемьи.Имя
|ИЗ
| Справочник.ФизическиеЛица.СоставСемьи КАК ФизическиеЛицаСоставСемьи
|ГДЕ
| ФизическиеЛицаСоставСемьи.Ссылка = &Физлицо
|
|УПОРЯДОЧИТЬ ПО
| ФизическиеЛицаСоставСемьи.НомерСтроки";
ЭлементыФормы.Родственник.СписокВыбора.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Имя"));
Категория:
Работа с Формой (Диалог) и её элементами Удаление строк Таблицы Значений Код 1C v 8.х
// 1. Удаление строк согласно условию
НулевыеСтроки = ТаблицаПослеПодмен.НайтиСтроки(Новый Структура("Сумма",0));
Для каждого СтрокаТаблицы Из НулевыеСтроки Цикл
ТаблицаПослеПодмен.Удалить(СтрокаТаблицы)
КонецЦикла;
// Нужно оставить строки только соответствующие условию,а остальные удалить то:
ПараметрыОтбора = Новый Структура("Цена",15000);
ТЗНов = ТЗ.Скопировать(ПараметрыОтбора);
// в результате в ТЗнов будут только строки из ТЗ, в которых значение поля Цена = 15000
// 2. Удаление определенной строки, например УдаляемаяСтрока = 5;
ТаблицаЗначений.Удалить(УдаляемаяСтрока);
// 3. Удаление первой строки
ТаблицаЗначений.Удалить(0);
// 4. Удаление определенной колонки, например УдаляемаяКолонка = 3;
ТаблицаЗначений.Колонки.Удалить(УдаляемаяКолонка);
// 5. Удалить первую колонку
ТаблицаЗначений.Колонки.Удалить(0);
// 6. Удаление строк перебором , проверяя условие
СтаршийИндексКолонок = ТаблицаЗначений.Колонки.Количество() - 1;
Индекс = ТаблицаЗначений.Количество() - 1;
Пока Индекс > = 0 Цикл
Для Сч = 0 По СтаршийИндексКолонок Цикл
Если ТипЗнч(ТаблицаЗначений[Индекс][Сч]) = Тип("Число") Тогда
ТаблицаЗначений.Удалить(Индекс);
Прервать;
КонецЕсли;
КонецЦикла;
Индекс = Индекс - 1;
КонецЦикла;
Категория:
Работа с Таблицей Значений