|
удаление нулей в СКД в номере | ☑ | ||
---|---|---|---|---|
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
|
алилуя!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |