Имя: Пароль:
1C
1C 7.7
v7: Римские цифры
, ,
0 Erhov_egor
 
07.11.12
11:33
Пишу запрос,возможно ли как то в запросе преобразовать римские в арабские?
1 ДенисЧ
 
07.11.12
11:34
А зачем это делать в запросе?
2 syktyk
 
07.11.12
11:34
Будь мужиком - напиши функцию!
3 Erhov_egor
 
07.11.12
11:34
(1)Хотелось чтоб отчет работал быстрее
4 Erhov_egor
 
07.11.12
11:35
(2)Написал функцию дальше что?
5 Erhov_egor
 
07.11.12
11:37
Как совместить функцию и запрос тогда?
6 Erhov_egor
 
07.11.12
11:41
Никак не прокатит да?
7 Erhov_egor
 
07.11.12
11:42
аууууууууууууууууууу
8 syktyk
 
07.11.12
11:45
Чего хоть твой запрос должен делать? И что хочешь в результате получить? Тебе ведь могут посоветовать здесь такое...
9 Wobland
 
07.11.12
11:46
гугл говорит, что
eligere
 exprimitur(ТвоёЧисло sicut numerus) sicut romanus
10 andrewalexk
 
07.11.12
11:47
:) ГарриПоттер.АрабикусРомус(ВашеЧисло)
11 Erhov_egor
 
07.11.12
11:48
(8)Мне надо сумму найти (римское число *количество)
12 Erhov_egor
 
07.11.12
11:48
(10)Ну это по любому прокатит
13 Wobland
 
07.11.12
11:50
(11) откуда такие изощрения у тебя в голове?
14 syktyk
 
07.11.12
11:51
(13)Мсье Erhov_egor знает толк в извращениях
15 Erhov_egor
 
07.11.12
11:52
(14)с детства начал
16 Wobland
 
07.11.12
11:53
кстати, почему б не попросить запрос сразу формировать нужный ТабДокумент? быстрее ж будет
17 Базис
 
naïve
07.11.12
11:54
Правильно, если 70-й счёт вести латынью и римскими цифрами - мало кто поймёт, где деньги.
18 1Сергей
 
07.11.12
11:55
Развод?
19 Erhov_egor
 
07.11.12
11:57
(16)Попросил сделал,но еще чтоб лишнее не делать хочу с цифрами римскими поработать в запросе а он не хочет гад
20 Wobland
 
07.11.12
11:58
(19) ТабДок в запросе сделал?
21 Wobland
 
07.11.12
11:59
>а он не хочет гад
он просто в школе не учился
22 Базис
 
naïve
07.11.12
11:59
Двоичные попробуй.
23 Erhov_egor
 
07.11.12
12:00
(20)Да, а дальше что?
24 dedmoroz777
 
07.11.12
12:01
(0) если речь о типовых, то там в глобальнике есть Функция ПреобразоватьЧислоВАрабскуюНотацию(РимскоеЧисло)
25 Erhov_egor
 
07.11.12
12:01
(24)Дальше что?
26 ЧеловекДуши
 
07.11.12
12:01
Будь мужиком, пиши в Бинарном исчислении :)
27 dedmoroz777
 
07.11.12
12:02
(25) дальше вставляй её в запрос)
28 ЧеловекДуши
 
07.11.12
12:02
(25)Встречный вопрос: По твоему, Что такое Римское Число?
29 ЧеловекДуши
 
07.11.12
12:03
(27)Думаешь, там у него реальные римские цыфры и нет типо символа "Х" (не как Икс, а как буква Ха, из латиницы) :)
30 Erhov_egor
 
07.11.12
12:03
(27)Юморист
31 Wobland
 
07.11.12
12:04
(30) и он ещё нас обзывает!
32 ЧеловекДуши
 
07.11.12
12:05
(17)>> Правильно, если 70-й счёт вести латынью и римскими цифрами - мало кто поймёт, где деньги.

Если бы Налоговая смотрела в БД, то все бы так и шифровались :)
Но им побоку, что и как в электронном виде, их будут интересовать бумажные копии из архивов с печатями ;)
33 dedmoroz777
 
07.11.12
12:05
(30) ты хоть запрос покажи)
34 GANR
 
07.11.12
12:06
1. число в строку
2. строку - в массив символов
3. каждому символу в соответствие - римскую цифру
4. п.3 в строку
35 ЧеловекДуши
 
07.11.12
12:08
(34)Бу га га... тут без функции не взлетит, тут нужен тупой пересчет римского бреда в 10-тичную и надеяться, что все символы написаны латиницей :)
36 GANR
 
07.11.12
12:11
(35) На платформе 8.x ещё можно запросом отделаться, хотя... Там же нет преобразования числа в строку - отстой (((.
37 Erhov_egor
 
07.11.12
12:18
|ОбрабатыватьДокументы Проведенные;
   |Период с НачДата по КонДата;  
   |ТТНМолоко         = Документ.ТТНМолоко.ТекущийДокумент;
   |МестаХранения     = Документ.ТТНМолоко.МестаХранения;
   |Контрагент        = Документ.ТТНМолоко.Контрагент;
   |Населе            = Документ.ТТНМолоко.Население;
   |Сорт              = Документ.ТТНМолоко.Сорт;
   |КоличествоУчетное = Документ.ТТНМолоко.Количество;
   |Количество        = Документ.ТТНМолоко.КоличествоПриход;
   |Жир               = Документ.ТТНМолоко.Жирность;
   |Белок             = Документ.ТТНМолоко.Белок;
   |СОМО              = Документ.ТТНМолоко.СОМО;
   |Кислотность       = Документ.ТТНМолоко.Кислотность;
   |ГруппаЧистоты     = Документ.ТТНМолоко.ГруппаЧистоты;
   |Плотность         = Документ.ТТНМолоко.Плотность;
   |Термоустойчивость = Документ.ТТНМолоко.Термоустойчивость;
   |Редуктаза         = Документ.ТТНМолоко.Редуктаза;
   |СомКлетки         = Документ.ТТНМолоко.СомКлетки;  
   |Температура       = Документ.ТТНМолоко.Температура;  
   |Функция СумЖир              = Сумма(Жир*Количество);  
   |Функция СумБелок            = Сумма(Белок*Количество);
   |Функция СумСОМО             = Сумма(СОМО*Количество);
   |Функция СумПлотность        = Сумма(Плотность*Количество);
   |Функция СумСомКлетки        = Сумма(СомКлетки*Количество);
   |Функция СумСомТемпература   = Сумма(Температура*Количество);  
   |Функция СумГруппаЧистоты    = Сумма(ПреобразоватьЧислоВАрабскуюНотацию(ГруппаЧистоты)*Количество);
   |Функция КолПФ = Сумма(Количество);  
   |Функция КолиС = Сумма(КоличествоУчетное);
   |Функция КолПВ = Сумма(Количество) когда (Сорт = СортВ);    
   |Функция КолПС = Сумма(Количество) когда (Сорт = СортС);    
   |Функция КолП1 = Сумма(Количество) когда (Сорт = Сорт1);    
   |Функция КолП2 = Сумма(Количество) когда (Сорт = Сорт2);    
   |Функция КолПН = Сумма(Количество) когда ((Сорт<>СортВ)и(Сорт<>СортС)и(Сорт<>Сорт1)и(Сорт<>Сорт2));
38 1Сергей
 
07.11.12
12:20
(37) ГруппаЧистоты вообще какие значения может принимать? от I  до IV?
39 Erhov_egor
 
07.11.12
12:20
(38)ага
40 Erhov_egor
 
07.11.12
12:21
Через когда можно как нить?
41 dedmoroz777
 
07.11.12
12:21
(37) ты уверен что ГруппуЧистоты нужно умножать на количество?
42 1Сергей
 
07.11.12
12:22
(40)  нет. Либо через внешнюю функцию, либо считай после запроса при выводе
43 Erhov_egor
 
07.11.12
12:24
(41)уверен
44 Erhov_egor
 
07.11.12
12:24
Внешняя функция это как?
45 1Сергей
 
07.11.12
12:26
(44)

Функция ПреобразоватьЧислоВАрабскуюНотацию(ЧислоРимское) Экспорт
...
46 syktyk
 
07.11.12
12:30
(45)А где ты в глобальнике такую функцию нашел?
47 syktyk
 
07.11.12
12:33
(46) к (24)
48 Erhov_egor
 
07.11.12
12:34
А почему через внешнюю то прокатит че то догнать не могу?
49 ЧеловекДуши
 
07.11.12
12:36
Казалось бы, а причем тут вообще 1С 7.7 ;)
50 dedmoroz777
 
07.11.12
12:38
(47) в типовой бухии
(48) не работает или что?
51 ЧеловекДуши
 
07.11.12
12:38
(48)Потому, что будет медленно, но прокатит.
Функция может быть в глобальнике, а может и в модуле запроса.
Это как хочешь. Функцию ты должен найти или написать сам.
И вообще, какой это умник хранит числовое значение в абы каком представлении :)

И если ты точно уверен в цифрах, то там можно и без пересчета все упростить через "Если <Условие цифры ХХ> Тогда"
52 dedmoroz777
 
07.11.12
12:39
//*****************************************************************************
// ПреобразоватьЧислоВАрабскуюНотацию(РимскоеЧисло)
//
// Параметры
//        РимскоеЧисло - строка, число, записанное римскими цифрами
//
// Возвращаемое значение
//        число
//
// Описание
//        преобразует число, записанное римскими цифрами, в "обычное" число,
//        например:
//                ПреобразоватьЧислоВАрабскуюНотацию("ХVII") = 17
//
Функция ПреобразоватьЧислоВАрабскуюНотацию(РимскоеЧисло)
   
   АрабскоеЧисло=0;

   c1 = "1";c5 = "У";c10 = "Х";c50 = "Л";c100 ="С";c500 = "М";c1000 = "Д";

   РимскоеЧисло = СокрЛП(РимскоеЧисло);
   ЧислоСимволов = СтрДлина(РимскоеЧисло);

   Для Сч=1 По ЧислоСимволов Цикл
      Если Сред(РимскоеЧисло,Сч,1) = c1000 Тогда
         АрабскоеЧисло = АрабскоеЧисло+1000;
      ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c500 Тогда
         АрабскоеЧисло = АрабскоеЧисло+500;
      ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c100 Тогда
         Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c500) ИЛИ (Сред(РимскоеЧисло,Сч+1,1) = c1000)) Тогда
            АрабскоеЧисло = АрабскоеЧисло-100;
         Иначе
            АрабскоеЧисло = АрабскоеЧисло+100;
         КонецЕсли;
      ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c50 Тогда
         АрабскоеЧисло = АрабскоеЧисло+50;
      ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c10 Тогда
         Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c50) ИЛИ (Сред(РимскоеЧисло,Сч+1,1) = c100)) Тогда
            АрабскоеЧисло = АрабскоеЧисло-10;
         Иначе
            АрабскоеЧисло = АрабскоеЧисло+10;
         КонецЕсли;
      ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c5 Тогда
         АрабскоеЧисло = АрабскоеЧисло+5;
      ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c1 Тогда
         Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c5) ИЛИ (Сред(РимскоеЧисло,Сч+1,1) = c10)) Тогда
            АрабскоеЧисло = АрабскоеЧисло-1;
         Иначе
            АрабскоеЧисло = АрабскоеЧисло+1;
         КонецЕсли;
      КонецЕсли;
   КонецЦикла;
   Возврат АрабскоеЧисло;
КонецФункции //ПреобразоватьЧислоВАрабскуюНотацию
53 Erhov_egor
 
07.11.12
12:40
(52)Эта функция есть
54 ЧеловекДуши
 
07.11.12
12:41
(53)Уже одно есть, а как записаны сами Римские цифры?
В функции они написаны кирилицей, а у вас?
55 Erhov_egor
 
07.11.12
12:42
(51)через если писать,то получится надо выгружать в тз а дальше выводить на печать
56 dedmoroz777
 
07.11.12
12:43
(53) добавь в неё СтрЗаменить(РимскоеЧисло, "1", "I")
57 Erhov_egor
 
07.11.12
12:45
(56)Это понятно, там когда возврат идет из функции пишет что невозможно присвоить значение группечистоты
58 dedmoroz777
 
07.11.12
12:50
(57) наоборот, кстати: СтрЗаменить(РимскоеЧисло, "I", "1")
59 Erhov_egor
 
07.11.12
13:09
все решено спасибо всем
60 1Сергей
 
07.11.12
13:14
(55)>>через если писать,то получится надо выгружать в тз а дальше выводить на печать

С чего это?
61 Erhov_egor
 
07.11.12
13:24
(60)Ну если не поставишь в запросе,значит вывести сразу не получится,или я не так понял просто
62 1Сергей
 
07.11.12
13:26
(61) что значит вывести сразу? давно запросы можно сразу выводить на экран?
63 Erhov_egor
 
07.11.12
13:29
(62)ну группировка и вывести
64 Wobland
 
07.11.12
13:29
(62) как только консоль изобрели. я могу
65 1Сергей
 
07.11.12
13:30
(63) макет поправь и даже код менять не придётся
66 Erhov_egor
 
07.11.12
13:31
(65)там же накопление нужно мне по всем строкам документов, где группа чистоты * количество
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.