Имя: Пароль:
1C
1С v8
В строке надо удалить первые 3 символа
0 Om_Bun
 
07.11.11
13:44
При выводе на печать в строке не должны появляться первые 3 символа.
Решение нашел такое
СтрЗаменить(Номер, Лев (Номер,3), "" )
Так правильно ?
1 RomaH
 
naïve
07.11.11
13:45
Сред(Номер,3)
2 Maxus43
 
07.11.11
13:46
что не устраивает? и так нормально. вариантов то много, а суть одна
3 andrewks
 
07.11.11
13:46
жесть...

Сред(Номер, 3, )
4 Fragster
 
гуру
07.11.11
13:46
(2) гыгы

абвабвприветдятлам
5 Maxus43
 
07.11.11
13:46
(1) перечитал вопрос то?)
6 Maxus43
 
07.11.11
13:46
(4) ась?
7 andrewks
 
07.11.11
13:46
(2) его вариант неправильный.

представим Номер = "123123123"
8 Wobland
 
07.11.11
13:47
(0) вот тебе строка, поиграйся: "123123"
9 Maxus43
 
07.11.11
13:47
(4)(7) дада, каюсь, понедельник день суровый)
10 Господин ПЖ
 
07.11.11
13:47
>что не устраивает?

патамучта кривой в ж.пу... на строке "ооовываываоооыаыва" будет очень мило работать...
11 Wobland
 
07.11.11
13:48
(9) мне ещё покайся ;)
12 ОбычныйЧеловек
 
07.11.11
13:48
Сред("Номер", 4) :)
13 Aleksey
 
07.11.11
13:48
Кажется что автор пытается префикс документа удалить? А почему нельзя воспользоваться типовой процедурой? Или самописка?
14 andrewks
 
07.11.11
13:49
(12) ну да, ну да...

щас всё друг перед другом покаемся :)
15 hhhh
 
07.11.11
13:50
если префикс, то его вариант прокатит.
16 andrewks
 
07.11.11
13:50
(12) а не, кавычки лишние.

все неправы :)
17 Песец
 
07.11.11
13:52
Сред(Сред(Сред(Номер, 2), 2), 2);
18 Om_Bun
 
07.11.11
13:52
(13) Да удаляю префикс документа. О стандартной даже не подумал, но она не идет т.к. самописка
19 Песец
 
07.11.11
13:54
Прав(Номер,СтрДлина(Номер)-3);
20 Wobland
 
07.11.11
13:55
(17) это какой-то Песец
21 Fr1eNd
 
07.11.11
13:55
(18) Зато из типовой можно код вытянуть и к себе вставить.
22 Песец
 
07.11.11
13:55
(18) Продам клавиши "Ctrl", "С" и "V", недорого.
23 palpetrovich
 
07.11.11
13:56
запросом нужно, через выразить :)
24 Aleksey
 
07.11.11
13:57
(21) Лучше не надо. Там тупой перебор и "найти"
25 Aleksey
 
07.11.11
13:58
// Процедура предназначена для преобразования номера документа.
//
// Параметры:
//  Документ - (ДокументСсылка), документ, чей номер надо получить для печати.
//
// Возвращаемое значение.
//  Строка - номер документа для печати
//
Функция ПолучитьНомерНаПечать(Документ, МассивПрефиксов = Неопределено) Экспорт

   Если Документ = Неопределено Тогда
       Возврат 0;
   КонецЕсли;

   Номер   = СокрЛП(Документ.Номер);
   
   // {ОбменДаннымиБСП
   // Если номер документа по стандарту БСП 8.2, сформируем номер через стандартную процедуру БСП.
   Если ПолучитьФункциональнуюОпцию("ИспользоватьОбменДанными") = Истина Тогда
       
       Если Сред(Номер, 5, 1) = "-" Тогда
           Номер = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(Номер,
           Ложь, // УдалитьПрефиксИнформационнойБазы
           Истина // УдалитьПользовательскийПрефикс
           );
           Возврат Номер;
       КонецЕсли;
       
   КонецЕсли;
   // }ОбменДаннымиБСП
   
   Префикс = "";
   Если МассивПрефиксов = Неопределено Тогда
       
       Организация              = Неопределено;
       ПодразделениеОрганизации = Неопределено;
       
       Если ТипЗнч(Документ) = Тип("ВыборкаИзРезультатаЗапроса")
           ИЛИ ТипЗнч(Документ) = Тип("Структура") Тогда

           Организация = Документ.Организация;
           
       Иначе

           МетаданныеДокумента = Документ.Метаданные();

           Если ЕстьРеквизитДокумента("Организация", МетаданныеДокумента) Тогда

               Организация = Документ.Организация;

           КонецЕсли;
           
       КонецЕсли;
       
       МассивПрефиксовДляОбхода = СформироватьМассивПрефиксовДляРИБИОрганизации(Организация);
       
   Иначе
       
       МассивПрефиксовДляОбхода = МассивПрефиксов;
       
   КонецЕсли;
   
   Для Каждого ТекущийПрефикс ИЗ МассивПрефиксовДляОбхода Цикл
       
       // удаление префикса из номера документа
       Если Найти(Номер, ТекущийПрефикс)=1 Тогда
           Номер = Сред(Номер, СтрДлина(ТекущийПрефикс)+1);
       КонецЕсли;
       
       // так же, может остаться "минус" впереди
       Если Лев(Номер, 1) = "-" Тогда
           Номер = Сред(Номер, 2);
       КонецЕсли;
       
       // удаление ведущих нулей
       Пока Лев(Номер, 1)="0" Цикл
           Номер = Сред(Номер, 2);
       КонецЦикла;
   КонецЦикла;

   Возврат Номер;

КонецФункции // ПолучитьНомерНаПечать()
26 hhhh
 
07.11.11
13:58
(21) для любителей приколов код из типовой

       
// удаление префикса из номера документа
Если Найти(Номер, ТекущийПрефикс)=1 Тогда
  Номер = Сред(Номер, СтрДлина(ТекущийПрефикс)+1);
КонецЕсли;
27 Господин ПЖ
 
07.11.11
14:01
(26) мега код... без него - никак...
28 Песец
 
07.11.11
14:01
(26) А в чем прикол?
29 hhhh
 
07.11.11
14:03
(28) зачем функция Найти здесь? Чего ищем?
30 andrewks
 
07.11.11
14:03
(29) префикс, вестимо. а вдруг его нет?
31 Песец
 
07.11.11
14:05
(30) Проверяется, есть ли в начале номера искомый префикс. Если есть, удаляет с учетом того, что длина префикса м.б. разная.
32 andrewks
 
07.11.11
14:06
(31) и?
33 Песец
 
07.11.11
14:09
(32) ... в чем прикол? Надо удалять префикс, не проверив его наличие?
34 hhhh
 
07.11.11
14:09
(30) ну а просто проверить первую позицию нельзя? Типа

Если ЛЕВ(Номер, СтрДлина(ТекущийПрефикс)) = ТекущийПрефикс Тогда
35 andrewks
 
07.11.11
14:10
(33) я чо, против что-ли? я ж так и написал в (30).
36 palpetrovich
 
07.11.11
14:10
зануды
37 andrewks
 
07.11.11
14:11
(36) ага :)
(34) ну и в чём разница? алгоритмически это то же самое. можно, конечно, было бы поспорить за быстродействие, если бы это был не номер, а какая-нибудь реально длинная строка
38 Starhan
 
07.11.11
14:12
(36) педанты
А страна Педантов между прочим не плохо живет так что присоеденяйся и друзей подтягивай
39 Песец
 
07.11.11
14:12
(34) Так не проще: Найти+СтрДлина вместо Найти.
40 Fr1eNd
 
07.11.11
14:17
Ну в типовых ещё не такие приколы есть, но когда надо быстро что-то получить почему бы не использовать код из типовой, особенно адаптировав его под себя.
41 Песец
 
07.11.11
14:17
39+ Ну и читабельность. И заведомо известно, что номер не должен быть длинным.
42 Reset
 
07.11.11
14:29
(31) "Проверяется, есть ли в начале номера искомый префикс"

Проверяется, есть ли В ЛЮБОМ месте номера искомый префикс.

Читабельность - она разная. Для меня (к примеру), когда ищут по всей строке, а потом меняют вначале (а не там где нашли) - читабельность ухудшается. Я замечаю эти моменты и теряю секунды. Код должен быть точным. Имхо :P
43 Reset
 
07.11.11
14:31
(42) Прогнал, не в любом, сверяют с 1.
Что косвенно доказывает, что для меня это код хуже читаем ;))
44 Песец
 
08.11.11
08:49
(43) Хмм...

Если Найти(Номер, ТекущийПрефикс)=1  Тогда
<=>
если нашли в номере текущий префикс в 1 позиции, тогда

Если ЛЕВ(Номер, СтрДлина(ТекущийПрефикс)) = ТекущийПрефикс Тогда
<=>
Если слева в номере количество символов, равное длине текущего префикса равно текущему префиксу, тогда
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс