Имя: Пароль:
1C
1С v8
удаление нулей в СКД в номере
,
0 Валидатор
 
08.04.14
13:59
Делаю отчет на скд, нужно чтобы в отчете был номер документа, но выводился он без 0й, то есть не 0000000001, а просто 1, вот можно в самом конструкторое СКД это сделать и как?
1 Maxus43
 
08.04.14
14:02
я юзал для этого функции встроенного языка в общих модулях
2 Maxus43
 
08.04.14
14:02
ПодготовитьНомерНаПечать, её в СКД вызывай
3 Валидатор
 
08.04.14
14:05
(2) а без погружения в модуль? в самом конструкторе можно это сделать7
4 Maxus43
 
08.04.14
14:06
(3) портянка жёсткая будет имхо, проще в вычисляемых полях вызывать функцию общего модуля.
По сути - это и будет в "конструкторе" СКД :)
5 Maxus43
 
08.04.14
14:07
хотя... в вычисляемых полях можно преобразовать строку в число? тогда можно. Проблема если будут префиксы
6 Валидатор
 
08.04.14
14:07
(5) префиксов нет, можешь подробнее рассказать про вычисляемые поля, на Путь к данным я же указываю Номер или что7
7 Maxus43
 
08.04.14
14:08
(6) путь к данным - это как твоё поле будет называться, а в выражении попробуй написать Число(ТвоёПоле)
8 fisher
 
08.04.14
14:10
"Выражение представления" для этого используется.
9 Maxus43
 
08.04.14
14:11
не, не катит преобразование в СКД...
10 Валидатор
 
08.04.14
14:12
(7) Ошибка исполнения отчета
по причине:
Ошибка получения данных
по причине:
Функция не найдена "ЧИСЛО"
11 Maxus43
 
08.04.14
14:12
(8) как ты нули из строки уберёшь лидирующие?
12 Maxus43
 
08.04.14
14:12
(10) дада, я тож проверил... почему то думал можно(
13 Валидатор
 
08.04.14
14:13
Так и че получается, для того, чтобы в отчете убрать эти нули в номере документа, надо отчет не на СКД писать что ли? оО
14 Maxus43
 
08.04.14
14:14
(13) не на СКД у тебя тоже не получится в запросе же, на СКД как раз можно - вызвать там процедурку общего модуля, она переделает как надо
15 Валидатор
 
08.04.14
14:16
(14) так а где вызвать то ее?)
16 Maxus43
 
08.04.14
14:17
в вычисляемом поле, в выражении будет
МойМодуль.МояФункция(ТвойНомерСтрока)
17 Maxus43
 
08.04.14
14:18
а в функции соответственно -
Вовзрат ЧИСЛО(ТвойНомерСтрока)
18 Валидатор
 
08.04.14
14:18
(16) мой модуль это что?
19 fisher
 
08.04.14
14:19
(11) Упс :)
20 Wobland
 
08.04.14
14:20
(18) это программный модуль, исключительные авторские права на который принадлежат Максусу43. будешь использовать его разработки - надо упомянуть
21 Валидатор
 
08.04.14
14:22
(20) блин какие авторские права, я и так тут запутался, вы меня еще больше путаете
22 vmv
 
08.04.14
14:24
для извращенцев есть выход без общих модулей, в запросе или вычисляемом поле пишем

Выбор Когда Подстрока(Номер, 9, 1) = 0
Тогда Подстрока(Номер, 10, 1)

Выбор Когда Подстрока(Номер, 8, 1) = 0
Тогда Подстрока(Номер, 9, 2)

Конец Как ЗначащийНомер
23 Maxus43
 
08.04.14
14:24
(21) в каком модуле ты написал функцию, для преобразования строки в число, либо для обрезания нулей лидирующих у строки?)
в типовых это функция Функция ПолучитьНомерНаПечать(Документ, МассивПрефиксов = Неопределено, ПечатьПрефикса = Ложь) Экспорт, модуля ОбщегоНазначения
24 Maxus43
 
08.04.14
14:25
(22) всё бы хорошо, а чего с номером 0010101 будет?
25 vmv
 
08.04.14
14:27
24 тогда подключаем С и делаем бинарный анализ на асме
26 Maxus43
 
08.04.14
14:29
(25) тогда твой функция вернёт "1", а номер "10101" :)
27 vmv
 
08.04.14
14:29
(24) если серьезно, то Выбор Когда нужно строить с головы и тогда прокатит, подозреваю что это это прокатит, не такая большая конструкция, но сам использую общие - мне лень писать простынки в СКД
28 fisher
 
08.04.14
14:29
(22) Хм... Можно таким макаром определить позицию первой значащей цифры и потом ПОДСТРОКА(Номер, ПозицияПервойЗначащейЦифры, ДлинаНомера - ПозицияПервойЗначащейЦифры)
Ну, идея примерно такая.
29 Maxus43
 
08.04.14
14:30
да можно, в (4) было... портянка некрасивая будет
30 vmv
 
08.04.14
14:31
(27) условие включения хвоста в результрующее поле Выбор Когда элементарно

"как только встретили цифру 1,2,3,4,5,6,7,8,9 бери хвост Номер в результат"

и даже префиксы не помеха
31 Валидатор
 
08.04.14
14:43
вот функция:
Функция ПолучитьНомерНаПечать(Знач НомерОбъекта, УдалитьПрефиксИнформационнойБазы = Ложь, УдалитьПользовательскийПрефикс = Ложь) Экспорт
    
    // {Обработчик: ПриПолученииНомераНаПечать} Начало
    СтандартнаяОбработка = Истина;
    
    ПрефиксацияОбъектовКлиентСерверПереопределяемый.ПриПолученииНомераНаПечать(НомерОбъекта, СтандартнаяОбработка);
    
    Если СтандартнаяОбработка = Ложь Тогда
        Возврат НомерОбъекта;
    КонецЕсли;
    // {Обработчик: ПриПолученииНомераНаПечать} Окончание
    
    // удаляем пользовательские префиксы из номера объекта
    Если УдалитьПользовательскийПрефикс Тогда
        
        НомерОбъекта = УдалитьПользовательскиеПрефиксыИзНомераОбъекта(НомерОбъекта);
        
    КонецЕсли;
    
    // удаляем лидирующие нули из номера объекта
    НомерОбъекта = УдалитьЛидирующиеНулиИзНомераОбъекта(НомерОбъекта);
    
    // удаляем префикс организации и префикс информационной базы из номера объекта
    НомерОбъекта = УдалитьПрефиксыИзНомераОбъекта(НомерОбъекта, Истина, УдалитьПрефиксИнформационнойБазы);
    
    Возврат НомерОбъекта;
КонецФункции

Она в Модуле: ПрефиксацияОбъектовклиентсервер
32 Maxus43
 
08.04.14
14:43
(31) молодец, нашёл
33 Валидатор
 
08.04.14
14:44
получается мне в СКД делать так:
1. ЗаказвКарьер.Номер - это нужный нам номер документа
2. на закладке выражение я в 1 поле пишу:
Номер документа
в выражение я пишуу:
ПрефиксацияОбъектовклиентсервер.ПолучитьНомерНаПечать(ЗаказвКарьер.Номер)
ВыражениеПредставления - ЗаказвКарьер.Номер

так?
34 Maxus43
 
08.04.14
14:44
у тебя же номер из документа берётся? передавай туда ссылку на документ и всё
35 Maxus43
 
08.04.14
14:45
нет, ПрефиксацияОбъектовклиентсервер.ПолучитьНомерНаПечать(СсылкаНаДокумент)
36 Maxus43
 
08.04.14
14:45
тьфу, всё правильно ты писал, это у меня ссылка, у тебя номер
37 Maxus43
 
08.04.14
14:46
на закладке Вычисляемые Поля это надо писать
38 Валидатор
 
08.04.14
14:47
(37) там и пишу, в поле выражение:
ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(Номер)
и все равно у меня номер с нулями
39 Maxus43
 
08.04.14
14:49
(38) ставь там точку останова и иди, чо не так смотри
40 Валидатор
 
08.04.14
14:50
(39) как я точку останова поставлю в контсркуторе СКД?)
41 Maxus43
 
08.04.14
14:50
Тебе нужна только эта по сути функция -     НомерОбъекта = УдалитьЛидирующиеНулиИзНомераОбъекта(НомерОбъекта);

Если она экспортная - сразу её и вызывай
42 Maxus43
 
08.04.14
14:50
(40) в модуле можно поставить точку, там код исполняется точно так же
43 Валидатор
 
08.04.14
14:55
(42) Путь к данным - НомерДокумента
выражение - ПрефиксацияОбъектовКлиентСервер.УдалитьЛидирующиеНулиИзНомераОбъекта(Номер)
Заголовок - номер документа

больше ничего не ставить же на вычисляемых полях?
44 Валидатор
 
08.04.14
14:55
о, получилось!
45 Maxus43
 
08.04.14
14:58
алилуя!
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn