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

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

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

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

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

нафига

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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