1с удалить пустые строки из строки
Всем привет! У меня возник такой вопрос:можно ли сделать в таблице - определить пустые строки и удалить их, не трогая заполненые. Или придётся удалять по одной строке.
Посмотрите как это делается в Документе ЗакрытиеМесяца 1С:Бухгалтерия. Там по-моему прописана процедура удаления пустых строк. Или просто поищите эту процедуру.
"Первое что приходит на ум следующее:
Скажем если какой-то реквизит пустой то
стр = 0;
кол = "имя_колонки"
пусто = ПолучитьПустоеЗначение("тип такой-то")
пока тз.НайтиЗначение(пусто, стр, кол) = 1 цикл
тз.УдалитьСтроку(стр);
стр = 0;
КонецЦикла;"
Я бы сделал ТЗ.Свернуть().
Всмысле? Что это даёт?
Что-то не получается, может задаю не тот тип?
Одинаковые строки по колонкая сложатся, а пустые уйдут. По-моему.
Но у меня возможно -нцать строк и не одной повторяющейся, а при работе пользователя может появиться пустая строка(если он передумает в таблицу добавлять запись)
Да дело не в количестве, что есть свернется, пустые удалятся. ТЗ.Свернуть("а,б,в. "(Перечисли все колонки),)
Читают тему:
Мероприятия
- Где купить СОФТ
- Вакансии фирм-партнеров "1С"
- Центры Сертифицированного Обучения
- Интернет курсы обучения "1С"
- Самоучители
- Учебный центр № 1
- Учебный центр № 3
- Сертификация по "1С:Профессионал"
- Организация обучения под заказ
- Книги по 1С:Предприятию
При использовании материалов активная прямая гиперссылка на перепечатанный материал обязательна.
Редакция БУХ.1С не несет ответственности за мнения и информацию, опубликованную в комментариях к материалам.
Редакция уважает мнение авторов, но не всегда разделяет его.
Дизайн сайта
Мы используем файлы cookie, чтобы анализировать трафик, подбирать для вас подходящий контент и рекламу, а также дать вам возможность делиться информацией в социальных сетях. Если вы продолжите использовать сайт, мы будем считать, что вас это устраивает.
(2) НоваяСтрока = Объект.ДанныеТО.Добавить();
НоваяСтрока.Контрагент = Сред(ДанныеСтроки[0], Найти(ДанныеСтроки[0], "\")+1);
НоваяСтрока.Контрагент = Сред(НоваяСтрока.Контрагент, Найти(НоваяСтрока.Контрагент, "\")+1);
НоваяСтрока.Контрагент = Сред(НоваяСтрока.Контрагент, Найти(НоваяСтрока.Контрагент, "\")+1);
НоваяСтрока.Контрагент = Лев(НоваяСтрока.Контрагент, СтрНайти(НоваяСтрока.Контрагент, "\", НаправлениеПоиска.СКонца)-1);
НоваяСтрока.Сумма = ДанныеСтроки[0];
НоваяСтрока.Количество = Сред(ДанныеСтроки[0], Найти(ДанныеСтроки[0], " (")+2);
НоваяСтрока.Количество = Лев(НоваяСтрока.Количество, СтрНайти(НоваяСтрока.Количество, ")", НаправлениеПоиска.СКонца)-1);
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Истина; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Истина; //Многострочный режим
RegExp.Pattern = "[^0-9]"; // отбор только чисел
НоваяСтрока.Количество = RegExp.Replace(НоваяСтрока.Количество, "");
(4) НоваяСтрока = Объект.ДанныеТО.Добавить() надо делать после того как
Контрагент = Сред(ДанныеСтроки[0], Найти(ДанныеСтроки[0], "\")+1) вернет не пустое значение
(5) неправильно.
при удалении строки сдвинутся и не все будут удалены.
Алгоритм такой:
1. Перебираете табличную часть, строки с незаполненным контрагентом пишете в массив
2. Перебираете массив и удаляете строку из табличной части по строке массива.
вот в этом случае будет удалено все.
(6)Кофе в доме закончился. Ужос. А пока иду за допингом жду Вас Здесь .
Минус тоже результат. Не в обиде
Юный начинающий ждет готовый код или готов искать от подсказки?
Выгрузить в ТЗ, найти строки, удалить, загрузить в ТЧ.
МассивОтмененныхСтрок = ТЧ.НайтиСтроки(Новый Структура("Контрагент,Количество,Сумма", Справочники.Контрагенты.ПустаяСсылка,0,0));
Для Каждого СтрокаМассивОтмененныхСтрок Из МассивОтмененныхСтрок Цикл
ТЧ.Удалить(СтрокаМассивОтмененныхСтрок);
КонецЦикла;
В отбор ставишь те поля таблицы, которые нужно проверять на пустоту.
В моем примере это Код и Наименование.
(6) Да вроде все норм с ней )) Или как то иначе работать должно? Просто тут единицы измерения из дбф файла уже в кавычках идут, а в 1с без, соответственно по условию проверки ед измерения по наименованию уже будут различия, вот я кавычки и добавил ))
(7) я бы избавился от кавычек так:
СтрЗаменить(СтрокаГдеМогутБытьКавычки,"""","")
если они там есть, или их нет - пофиг, будет без них
(9) так надо ж делать правильно, это же функция:
СтрокаГдеМогутБытьКавычки = СтрЗаменить(СтрокаГдеМогутБытьКавычки,"""","");
и будет работать
(10) ок,ща я напишу как у меня было изначально =)
(10) или ты имеешь ввиду ,что надо было сделать вот так
(13) да я знаю,что это работает, в других обработчиках отрабатывало, а тут не сработало, по какой причине не понятно, но я не просто так стал добавлять кавычки ))
(15) ну смотри, изначально единица измерения в 1с у меня была м. , после данной манипуляции я получил "м.", в пдф файле единица измерения так же "м." . У меня условие было на сравнение ед измерения по наименованию, соответственно, м. и "м." для программы уже будут как разные единицы измерения, из за отсутствия кавычек. Я стал убирать кавычки, но это не сработало, ну а если это не сработало, значит надо идти в обратном направлении и добавлять кавычки туда, где они отсутствуют . В общем как то так =)
(21) в ДБФ полез, а основы - пропустил. учись от простого к сложному, иначе всегда будешь так на простых вещах зависать подолгу.
(22) Спасибо за напутствие. Подскажи, пожалуйста, куда копать: заменить значения одни на другие, через нажатие кнопки заменить. Обработчик ПоискИЗамена значений разобрать надо?
(23) Это что за обработчик? я такого не знаю. Есть СтрНайти(), есть СтрЗаменить(). Изучи для начала функции для работы со строками - не пожалеешь ;-)
(24) Спасибо,ща попробую =) А обработчик нашел в инете, поиск и замена значений. Он работает по принципу консоли запросов, как я понял. Открываешь,вводишь что заменить и на что. Мне просто надо данные в 1с заменить на данные из дбф файла, не знаю, поможет ли мне функция стрзаменить,но я попробую)
(25) это не обработчик - это внешняя обработка. не лезь ты в дебри, начинай с простого, иначе толку не будет
(26) Простое это что например? А с заменой мне очень интересно разобраться, поэтому забрасывать не буду, буду пытаться ))
(27) ну тут уже мы давно не по теме пошли, не будем ее раздувать еще больше. Есть обучающие курсы, книжки и т.п. Если это интересно, поднимай новую тему
(18) они там есть, в таблицу выводилось с кавычками ) из дбф были в кавычках, из 1с без них. Я ж говорю, не просто так я стал это прописывать
В отбор ставишь те поля таблицы, которые нужно проверять на пустоту.
В моем примере это Код и Наименование.
Моя задача очистки строк из табличной части документа, но
1) Если я открываю форму документа, жму на команду и жму провести, то вылазит ошибка "Данные были изменены или удалены другим пользователем"
2) Меня интересует как создать эффект удаления строк на лету (как при использовании фильтров). А в моем случае форму надо сначала закрыть, потом открыть и смотреть результат. Это неудобно
В табличном документе таблица не умещается по ширине
Добрый день, делаю внешнюю печатную форму, как мне сделать, если таблица не помещается в ширину.
1с 8.3 Программное определение координат области в табличном документе
Всем привет! Возможно ли программно определить координаты левого верхнего угла области.
Как сделать чтобы в табличном документе список разбивался при выводе на Подразделения?
Здравствуйте форумчане! У меня есть справочники: Должности, Подразделения и Сотрудники; без.
Похоже Это не то.
За небольшим листингом должно быть читаемо, что строка удаляется если в колонке цена стоит значение 0 . Мне не нужно убирать все строки.
И проблема не в том, что строки не удаляются, а в пунктах 1 и 2
Диагноз: при удалении сбивается индех и итератор лепит мимо.
Лекарство: (два варианта)
1. Идти с конца
2. выгрузить в массив ссылки на строки (напр., НайтиСтроки()) и по нему цикл
то это ничего не меняет.
Добавлено через 9 минут
Написал так
Жму на команду, потом на команду провести и вылазит ошибка (о том, что данные изменены другим пользователем, та что в начале теме описана). Так что здесь имеет место быть что-то другое
может dt скинуть?
harmless, я верю, что у вас работает и вижу, что так как делаю я делать ошибочно, потому что как делаю я работает на соплях.
harmless, у меня из команды идет обращение к модулю объекта. Это по заданию так надо. Оттуда вызывается экспортная процедура, которая должна очистить ненужные строки, заданные заданием.
Добавлено через 14 минут
Если я пытаюсь использовать вышеприведенный листинг, то это выглядит как
и во время выполнения мне сообщается Поле объекта не обнаружено (ТабличнаяЧасть1)
Добавлено через 4 минуты
Моя первая проблема в
ОбъектДок.Записать()
Добавлено через 1 час 30 минут
С проходом к началу тоже ничего не выходит у меня
У каждого экземпляра объекта в 1С есть версия! Эта версия считывается при открытии формы, когда ты вызываешь программный метод с сервера Объект.Записать() то запускаешь в БД транзакцию записи объекта что приводит к смене его версии! Форма при записи пытается получить открытую ей версию и не находит ее, тем самым сообщает вам что запись была кем то изменена! То ВАМ в серверном вызове.
Что бы этого избежать, вы из формы должны перечитать объект, или не записывать его и обновлять данные формы.
Добавлено через 54 секунды
Давай dt, посмотрю что не так.
Добавлено через 5 минут
То есть ВАМИ в серверном вызове.
Добавлено через 2 минуты
На самом деле ваша реализация в корне не верна!
Получение объекта из ссылки для вызова метода сильно нагружает систему, инициализирует модуль объекта и полностью погружает объект в оперативную память!
Лучше для таких ситуаций использовать модуль менеджера
Рассмотрим на примерах, способы в 1с удалить часть строки. Не смотря на то, что задача кажется простой, есть довольно много вариантов ее постановки и решения. Подробнее о строковых функциях можно прочитать в статье: Строки в 1С 8.3 — строковые функции.
Удаление известной части строки
Есть строка, из которой необходимо удалить все вхождения известной вам подстроки. Для решения необходимо использовать функцию СтрЗаменить.
Пример 1. Из строки «1С:Бухгалтерия 8» удалить подстроку «:Бухгалтерия».
Заменяем «:Бухгалтерия» на пустую строку, и получаем: «1С 8».
Удаление по позиции подстроки
Есть строка, в которой вам известны номер начального и конечного символа подстроки, которую необходимо удалить. Для решения также подойдет функция СтрЗаменить. Но сначала необходимо получить удаляемую подстроку функцией Сред.
Пример 2. Из строки «Обучение программированию на языке 1С» удалить подстроку, которая начинается с девятого символа и заканчивается тридцать пятым.
Получаем подстроку по номерам символов и заменяем ее на пустую. Получаем: «Обучение 1С».
Удаление начала строки
Есть строка, в которой необходимо удалить ее левую часть. Известно, что новая строка должна начинаться с определенной фразы. Для такого случая можно использовать функцию Прав.
Пример 3. Из строки «Как в 1с удалить символы», необходимо удалить первые символы до фразы «1с».
Вычисляем количество нужных символов справа и получаем новую строку: «1с удалить символы».
Удаление окончания строки
Есть строка, в которой необходимо удалить ее правую часть. Известно, что новая строка должна заканчиваться на определенную фразу. Для такого случая можно использовать функцию Лев.
Пример 4. Удалить из строки «Как в 1с удалить часть строки, используя типовые методы» все символы, после фразы » строки».
Вычисляем количество нужных символов слева и получаем новую строку: «Как в 1с удалить часть строки».
Удаление одного из вхождений подстроки
В исходной строке некоторая фраза встречается несколько раз. Необходимо удалить только одно ее вхождение по условию. Для решения необходимо:
- Определить номера начального и конечного символа нужного вхождения подстроки, при помощи функции СтрНайти;
- После чего можно «склеить» новую строку функциями Лев и Прав, исключив найденное вхождение.
Обратите внимание на третий и пятый параметры СтрНайти. С их помощью можно осуществлять сложный поиск, указывая направление и номер вхождения подстроки.
Пример 5. Из строки «1С 8.3 Предприятие 8.3. Обучение на примерах», удалить последнее вхождение подстроки » 8.3″.
Вычисляем позиции левой и правой части строки, после чего «склеиваем». Получается новая строка: «1С 8.3 Предприятие. Обучение на примерах».
Удаление повторяющихся символов
В строке необходимо удалить идущие подряд символы, оставив только первый. Для решения такой задачи необходимо:
- Собрать массив всех вхождений символа;
- Обходить строку и определять, подходит ли текущий символ для новой строки.
Пример 6. Удалить из строки идущие подряд пробелы, оставив только первый в цепочке.
После удаления лишних пробелов получаем строку: «Удалить пробелы идущие подряд, кроме первого».
Читайте также: