Имя: Пароль:
1C
 
Журнал учета полученных, выставленных сф для БГУ ред.1
0 altaykniga
 
29.03.15
13:27
Доброго времени суток, товарищи умные!

Бухи требуют, чтобы в журнале учета полученных, выставленных сф шла сортировка по номерам с/ф, и их не волнует, что в тип номера - текстовый... Т.е. сейчас получается 1,10,2,3,30,4...
а надо сделать 1,2,3.4...10,11...30,31...
Можно ли как-нибудь этого добиться в СКД (отчет на ней написан)?
1 Тоныч
 
29.03.15
14:04
А если там буквы в номере сф будут? куда их засовывать? Вот реальный номер сф полученного из базы БГУ FOSS-10402-000008152. И таких там в этой базе полно.
2 altaykniga
 
29.03.15
14:13
(1) Данную числовую сортировку делал в отчете КнигаПродаж. Там нет СКД, просто брал полученную ТЗ перед выводом в ТабличныйДокумент, добавлял новую колонку "ЧисловойНомер", и присваивал значению этой колонки через попытку Число(Номер). Вот такой код:

Функция СортироватьПоНомеру(ТЗ)
    ТЗ.Колонки.Добавить("ЧисловойНомер");
    Для Каждого Стр Из ТЗ Цикл
        ЧислоИзНомера="";
        Если ЗначениеЗаполнено(Стр.СчетФактура) Тогда
            ДлинаСтроки = СтрДлина(Стр.ПНомер);
            Пока ДлинаСтроки <> 0 Цикл
                Попытка
                    ЧислоИзНомера=Число(Лев(Стр.ПНомер, ДлинаСтроки));
                    прервать;
                Исключение
                    Сообщить(СокрЛП(Стр.СчетФактура)+"--удаление текстовых значений из числа номера");
                    ДлинаСтроки = ДлинаСтроки-1;
                КонецПопытки
            КонецЦикла;
            Стр.ЧисловойНомер =  ЧислоИзНомера;
        Иначе
            Стр.ЧисловойНомер =  0;
        КонецЕсли;
    КонецЦикла;
    ТЗ.Сортировать("ЧисловойНомер, пДата");
    Возврат ТЗ;
КонецФункции

Но в СКД данную функцию же никак не применишь.
3 altaykniga
 
29.03.15
14:16
(2) как добиться такого приведения текста к числу в ТекстеЗапроса? Думаю, что никак. Какие варианты остаются? Перехватывать данные СКД до вывода в ТабДок, обрабатывать их программно, а затем опять запихивать в СКД?
4 Тоныч
 
29.03.15
14:19
(2) Т.е. если к моему примеру возвращаться, то они хотят чтобы в журнале сф вместо FOSS-10402-000008152 было 10402000008152? и их ниразу не смущает, что номер на сф и номер в журнале будут разные?
5 altaykniga
 
29.03.15
14:30
(4) номера разные не будут. Я же создаю новую колонку в ТЗ, худо-бедно привожу номер СФ к числу и записываю этот приведенный к числу номер в новую колонку... По этой колонке просто потом делаю сортировку, а все данные в ТабДок берутся из стандартных полей ТЗ. Тем более, что максимум, какие у бухов бывают номера текстовые - "162/1", "162 / 1", "162/1/1", "162 /1 /1" и т.д. Т.е. мне достаточно указывать, что номер для упорядочивания будет равен 162
6 timurhv
 
01.04.15
13:22
СКД позволяет выполнять функции общего модуля.
Вам необходимо в запросе вытащить номера с/ф:

ЖурналУчетаСчетовФактур.НомерСчетаФактуры КАК НомерСчетаФактуры,
"" КАК СортировкаНомерСчетаФактуры,

Далее на закладке "Вычисляемые поля"
указать:
Путь к данным - СортировкаНомерСчетаФактуры
Выражение: <Название общего модуля>.ПривестиСтрокуКЧислу(НомерСчетаФактуры)

Функция общего модуля выглядит так:

Функция ПривестиСтрокуКЧислу(ЧислоСтрокой) Экспорт
    
    ЗначениеЧисла = 0;
    ДлинаСтрок = СтрДлина(ЧислоСтрокой);
    ЧислоБезМусора = "";
    
    Если ДлинаСтрок > 0 Тогда
        Для Инд = 0 По ДлинаСтрок-1 Цикл
            
            ТекСимвол = Сред(ЧислоСтрокой, Инд+1, 1);
            
            Если ТекСимвол = "0" ИЛИ ТекСимвол = "1"
                ИЛИ ТекСимвол = "2" ИЛИ ТекСимвол = "3"
                ИЛИ ТекСимвол = "4" ИЛИ ТекСимвол = "5"
                ИЛИ ТекСимвол = "6" ИЛИ ТекСимвол = "7"
                ИЛИ ТекСимвол = "8" ИЛИ ТекСимвол = "9" Тогда
                
                ЧислоБезМусора = ЧислоБезМусора + ТекСимвол;
            КонецЕсли;
        КонецЦикла;
        
        Попытка
            ЗначениеЧисла = Число(ЧислоБезМусора);
        Исключение
        КонецПопытки;
    КонецЕсли;
    
    Возврат ЗначениеЧисла;
    
КонецФункции

Далее - настроить на закладке "Настройки" сортировку.
7 timurhv
 
01.04.15
13:22
+ (6) Функция не моя - не пинать :)
AdBlock убивает бесплатный контент. 1Сергей