Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Как избавиться от запятых?

Как избавиться от запятых?
Я
   Dr_Leo
 
05.02.18 - 02:11
стр.Комментарий = СокрЛП(стр.Комментарий)+ " " + СокрЛП(Строка(стр.АД)) + ", " + СокрЛП(Строка(стр.ТФ)) + ", " + СокрЛП(Строка(стр.ТФ2)) + ", " + СтрокаДоставки + ", " + МО + ", " + СокрЛП(Строка(стр.ИН));

Когда одна или несколько строк имеют пустое значение, то комментарий имеет такой вид ,,,, 
... как мне убрать эти запятые, при наличии пустых строк
 
 
   Изучаю1С8
 
1 - 05.02.18 - 02:22
?(стр.ТФ = "","",",")

и тд
   Aleksey
 
2 - 05.02.18 - 02:44
СтрЗаменить(стр.Комментарий,",,",",");
   Aleksey
 
3 - 05.02.18 - 02:47
Ну или 

Пока Найти(стр.Комментарий,",,")>0 цикл
  СтрЗаменить(стр.Комментарий,",,",",");
КонецЦикла;
   Aleksey
 
4 - 05.02.18 - 02:47
т.е.
стр.Комментарий = СтрЗаменить(стр.Комментарий,",,",",");
   Aleksey
 
5 - 05.02.18 - 02:49
Только у тебя еще пробелы  будут между запятыми
   Sj
 
6 - 05.02.18 - 03:28
(3)  это ты смело как-то

Запихнуть (1) и выводить с ее использованием.
   Sj
 
7 - 05.02.18 - 03:28
(6) + запихнуть в функцию
   Dr_Leo
 
8 - 05.02.18 - 03:35
Мне кажется нужно, что то типа ЗначениеЗаполнено
   Chameleon1980
 
9 - 05.02.18 - 05:20
(8)

нафига

тебе и этого хватит:

стр.Комментарий = СтрЗаменить(стр.Комментарий,",,",",");

как выше подсказали
   Chameleon1980
 
10 - 05.02.18 - 05:21
тогда вот так даже:
стр.Комментарий = СтрЗаменить(стр.Комментарий,", , ",", ");
 
 Рекламное место пустует
   Chameleon1980
 
11 - 05.02.18 - 05:25
ну или да:

добавление запятой очередного поля оформлять как
+  ?(СокрЛП(стр.ОчередноеПоле) = "","",", ")
   1Сергей
 
12 - 05.02.18 - 06:29
СтрЗаменить - это как-то по франчевски. В (1) правильнее
   mistеr
 
13 - 05.02.18 - 06:57
(12) +1. Данные пользователя портить нельзя.
   МимохожийОднако
 
14 - 05.02.18 - 07:01
(11) +1 Нужна голосовалка ))
   Dr_Leo
 
15 - 05.02.18 - 07:10
Сделал так

стр.Комментарий = СокрЛП(стр.Комментарий) +?(ЗначениеЗаполнено(СокрЛП(стр.Комментарий)), " " +СокрЛП(Строка(стр.АД)),"" ) + ?(ЗначениеЗаполнено(СокрЛП(стр.Комментарий)) или ЗначениеЗаполнено(СокрЛП(стр.АД)),", "+СокрЛП(стр.Тф),"")+ ?(ЗначениеЗаполнено(СокрЛП(стр.АД))или ЗначениеЗаполнено(СокрЛП(стр.ТФ)),", "+СокрЛП(стр.Тф2),"") + ?(ЗначениеЗаполнено(СокрЛП(стр.ТФ))или ЗначениеЗаполнено(СокрЛП(стр.ТФ2)),", " + СтрокаДоставки,"") +?(ЗначениеЗаполнено(СокрЛП(стр.ТФ))или ЗначениеЗаполнено (СтрокаДоставки),"" + МО,", ") ;
   Chameleon1980
 
16 - 05.02.18 - 07:30
для строк смело мог бы и ?(Условие,ПриУсловииДа,ПриУсловииНет)
   Dr_Leo
 
17 - 05.02.18 - 08:02
(16) Это был мой второй вариант. Спасибо!
   Лефмихалыч
 
19 - 05.02.18 - 08:13
(\,\s+)+
   Mikhail Volkov
 
20 - 05.02.18 - 08:13
(0) Надо поправить источник возникновения лишних запятых...
(15) Вроде да.
   patria0muerte
 
21 - 05.02.18 - 08:24
(15) А потом приходят люди смотрят на это и кровоточат глазами

Есть хорошая встроенная функция СтрШаблон. Либо ее заменитель в БСП - ПодставитьПараметрыВСтроку() для старых версий платформы.

Как минимум вот так:

стр.Комментарий = СтрШаблон(
    "%1 %2 %3 %4 %5 %6",
    СокрЛП(стр.Комментарий),
    ?(ЗначениеЗаполнено(СокрЛП(стр.Комментарий)), " " + СокрЛП(Строка(стр.АД)),""), 
    ?(ЗначениеЗаполнено(СокрЛП(стр.Комментарий)) или ЗначениеЗаполнено(СокрЛП(стр.АД)),", " + СокрЛП(стр.Тф),""), 
    ?(ЗначениеЗаполнено(СокрЛП(стр.АД))или ЗначениеЗаполнено(СокрЛП(стр.ТФ)),", "+СокрЛП(стр.Тф2),""), 
    ?(ЗначениеЗаполнено(СокрЛП(стр.ТФ))или ЗначениеЗаполнено(СокрЛП(стр.ТФ2)),", " + СтрокаДоставки,""),
        ?(ЗначениеЗаполнено(СокрЛП(стр.ТФ))или ЗначениеЗаполнено(СтрокаДоставки),"" + МО,", ")
);

В разы читабельней. 

В целом - очень дикая склейка. Вероятно ее можно упростить раза в два точно.
   Chameleon1980
 
22 - 05.02.18 - 08:43
(21) да тот-же х, только вид сбоку
   FIXXXL
 
23 - 05.02.18 - 08:46
(15) это аццкий ад какой то 
вынеси в функцию

Функция СтрокаСЗапятой(СтрВходящая)
 СтрВходящая = СокрЛП(СтрВходящая);
 СтрВходящая = ?(ЗначениеЗаполнено(СтрВходящая), СтрВходящая+","," ");
КонецФункции

и собирай с использованием функции
   cw014
 
24 - 05.02.18 - 09:17
СтруктураДанных = Новый Структура("Комментарий,Тф,ТФ2,СтрокаДоставки,МО,ИН", СокрЛП(стр.Комментарий)+ " " + СокрЛП(стр.АД), СокрЛП(стр.Тф), СокрЛП(стр.ТФ2), СтрокаДоставки, МО, СокрЛП(стр.ИН));

Комментарий = "";
Для Каждого КлючИЗначение Из СтруктураДанных Цикл
   Значение =СокрЛП(КлючИЗначение.Значение);
   Если ЗначениеЗаполнено(Значение) Тогда
      Комментарий = Комментарий + Значение + ", ";
   КонецЕсли;
КонецЦикла;

Комментарий = СокрЛП(Комментарий);
стр.Комментарий = Лев(Комментарий, СтрДлина(Комментарий)-1);
   Borteg
 
25 - 05.02.18 - 09:26
Проверку лучше выполнять с помощью ПустаяСтрока()
   Dr_Leo
 
26 - 05.02.18 - 09:39
(24) Спасибо! Как вариант!
   vicof
 
27 - 05.02.18 - 10:31
Стрсоединить
   Aleksey
 
28 - 05.02.18 - 10:35
Что то до сих пор никто через запрос не предложил.
   Сильф
 
29 - 05.02.18 - 10:38
Ну вы и упоролись тут... Правильно - (1) + (25).
   Йохохо
 
30 - 05.02.18 - 10:41
пять копеек на то, что потом автору позвонят и скажут, чтоп не трогал запятые, а то они АД от МО отличить не могут
   Serg_1960
 
31 - 05.02.18 - 10:41
(0) "то комментарий имеет такой вид ,,,," - нет, она имеет вот такой вид: ", , , ," - забыл про пробелы.

(29) Да, мы такие :) Сто строк вместо пары СтрЗаменить() - словно авторам платят за количество строк :))
   Serg_1960
 
32 - 05.02.18 - 11:06
СтрокаТекста = "Пара строк с СтрЗаменить(), , , , , , уберет все лишние кавычки, , ...";
    СтрокаТекста = СтрЗаменить(СтрокаТекста, ", , ", ", ");
    СтрокаТекста = СтрЗаменить(СтрокаТекста, ", , ", "");
    Сообщить(СтрокаТекста);    // "Пара строк с СтрЗаменить(), уберет все лишние кавычки, ..."
   Dr_Leo
 
33 - 06.02.18 - 01:07
(30) Да не))), там где значение будет заполнено...запятая то будет, а где нет , она исчезнет.
 
 
   Dr_Leo
 
34 - 06.02.18 - 04:52
(32) доработал с Вашим вариантом
   PuhUfa
 
35 - 06.02.18 - 05:13
Сначала поставить ненужные пробелы а потом героически их выпиливать... за то всегда при деле -)
   Chameleon1980
 
36 - 06.02.18 - 06:29
(35) так надо
   Wern
 
37 - 06.02.18 - 08:45
(32) не сработает с первой и последней запятой. т.е. может быть вариант ", тут комментарий, " замена 2-х запятых с этим ничего не сделает.
   alxxsssar
 
38 - 06.02.18 - 09:15
А при формировании строки нельзя поставить типа такого ?(ПустаяСтрока(стр.АД),""," " + СокрЛП(Строка(стр.АД)))
   alxxsssar
 
39 - 06.02.18 - 09:15
+ (38)И дальше по всем параметрам
   Сияющий в темноте
 
40 - 06.02.18 - 10:07
функция ДобавитьКСтроке(пСтрока,пДобавка,пРазделитель)
 если пустаястрока(пДобавка)тогда Возврат
 если пусьаястрока(пСтрока)тогда пСтрока=пДобавка Иначе пСтрока=пСтрока+пРазделитель+пДобавка
Конец
   Serg_1960
 
41 - 06.02.18 - 12:17
(37) "Позвольте, у меня все ходы записаны!"(с) - об этом в Вашем ТЗ ничего не было сказано :)
Эх, такой красивый и лаконичный (но неверный) алгоритм на корню сгубил. Придёт переквалифицироваться в управдомы, в кодеры:

    Исх = ", Этот алгоритм, , , , , кроме удаления ""лишних"" запятых, , удаляет начальные и конечные запятые, ";
    Врм = СтрЗаменить(Исх, ", ", Символы.ПС); Исх = "";
    Для х = 1 По СтрЧислоСтрок(Врм) Цикл
        Исх = Исх + ?(ПустаяСтрока(СтрПолучитьСтроку(Врм, х)), "", ?(ПустаяСтрока(Исх), "", ", ") + СтрПолучитьСтроку(Врм, х));
    КонецЦикла;
    Сообщить(Исх);    // "Этот алгоритм, кроме удаления "лишних" запятых, удаляет начальные и конечные запятые"
   Вафель
 
42 - 06.02.18 - 12:21
лучше использовать СтрСроединить
   Serg_1960
 
43 - 06.02.18 - 12:45
Я мог бы использовать СтрРазделить(), СтрСоединить(), а также СтрНачинаетсяС() и СтрЗаканчиваетсяНа()... но автор не озвучил платформу.
   Dr_Leo
 
44 - 07.02.18 - 01:23
(43) УТ 11.1
   Fram
 
45 - 07.02.18 - 01:36
я думаю на ответе (44) на вопрос (43) тему можно закрыть
   Tateossian
 
46 - 07.02.18 - 02:38
Ужасный код. Видно, что юзается одно свойство стр. Скажем - стр - это структура. Создаем Новый Массив. И далее для каждого элемента коллекции
Массив.Добавить(ТвояСтрока).
И последним шагом СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(Массив);

Учите функции типовых библиотек, а не изобретайте велосипеды.
   Tateossian
 
47 - 07.02.18 - 02:40
Функция ПолучитьСтрокуИзМассиваПодстрок игнорирует пустые строки и не лепит разделитель. Кстати, разделителем (второй параметр по умолчанию является запятая, но можно хоть Символы.ПС, хоть " ,".
   Fram
 
48 - 07.02.18 - 05:09
(46) про бритву Оккама слышал когда нибудь?
   Dr_Leo
 
49 - 07.02.18 - 08:28
Спасибо всем! Всё сделал. Всё работает)
 
 Рекламное место пустует
   Serg_1960
 
50 - 07.02.18 - 09:45
(45) Да, можно закрывать. Учитывая конфигурацию автора, задача может быть решена с помощью двух функций платформы 8.3: функция СтрРазделить() разделит на строки, игнорируя "пустые", а функция СтрОбъединить() - объединит их в результат задачи.
   Tateossian
 
51 - 07.02.18 - 16:54
(48) Слыхал. А про принцип DRY слышал?
   Сильф
 
52 - 08.02.18 - 19:21
(31) зато быстрее работает.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует