Имя: Пароль:
1C
1С v8
Сколько занимает памяти пустая строка?
0 napagokc
 
04.07.12
09:38
Возникла необходимость добавить реквизит в самый большой справочник - справочник Партий товаров. В реквизите должна быть фиксированная инфа, типа, "Брак", "Бывшее в употреблении", "Образец" и т.п.
Как оптимальнее сделать реквизит: строковым с неопределенной длинной, или числовым и использовать таблицу соответствия?
Мне так кажется, что даже пустая строка должна занимать минимум 4 байта - типа, пустой указатель. Не? Да, и еще сразу вопрос: в 1С юникодовые символы или нет? То есть, по одному байту занимают или по два? Я где-то читал давно, что юникодовые, но могу ошибаться. Может это тоже было лишь предположение, а у меня отложилось в памяти, как истина...
1 napagokc
 
04.07.12
09:44
народ не проснулся еще, что ли? Как-то крайне сомнительно, что никто не знает таких вещей... По-любому ведь каждый второй знает, но молчит :(
2 Aleksey
 
04.07.12
09:46
Сделай и посмотри таблицу на скуле
3 H A D G E H O G s
 
04.07.12
09:47
4 H A D G E H O G s
 
04.07.12
09:48
справочник Партий товаров

Это че у тебя за дедовские поделки?
5 H A D G E H O G s
 
04.07.12
09:48
Времен 7.7
6 х86
 
04.07.12
09:49
(0)ПЕРЕЧИСЛЕНИЕ !!!
7 napagokc
 
04.07.12
09:50
(3) не понял к чему ссылку кинул.
(4) У нас собственная конфа, которая изначально разрабатывалась на 1С7.х, позже, с доработками была перенесена на 8.0, потом на 8.2
8 napagokc
 
04.07.12
09:51
(6) В этом поле может быть сразу несколько значений. Например, и брак и б/у
9 H A D G E H O G s
 
04.07.12
09:51
(7) Ну почитаю, сколько там байт на символ.
10 napagokc
 
04.07.12
09:51
+(8) А может не быть ни одного :)
11 H A D G E H O G s
 
04.07.12
09:52
(8) Значение перечисления - брак и бу.
12 H A D G E H O G s
 
04.07.12
09:54
(10) Значение перечисления - пусто.
13 napagokc
 
04.07.12
09:56
(9) Так в 1С UTF-8? Меня этот вопрос интересует, а не что такое UTF-8 - это мне объяснять не надо =)
(11) Идею с перечислением на заметку взял, но пока мне кажется, что этот вариант не подойдет.
А чем вообще перечисление выиграет у предложенных выше вариантов? Суть ведь то же соответствие, не?
14 H A D G E H O G s
 
04.07.12
09:58
(13) Минимизация секса у последующих программистов. И проклятий на твою голову.
15 napagokc
 
04.07.12
09:59
(14) Предполагалось сделать стандартную обработку в общий модуль, где подставлять соответствие. ИМХО, это не должно вызвать затруднения у последующих программистов.
16 H A D G E H O G s
 
04.07.12
10:03
Строка неограниченной длины - это ntext

ntext

   Данные переменной длины в Юникоде с максимальной длиной строки 2^30 - 1 (1 073 741 823) байт. Размер памяти в байтах вдвое превышает длину введенной строки. Синонимом по стандарту ISO для типа ntext является national text.
17 H A D G E H O G s
 
04.07.12
10:05
Datalenght() для текста
тестtest
выдал мне значение 8. Все верно.
18 H A D G E H O G s
 
04.07.12
10:05
Пардон, 16.
19 napagokc
 
04.07.12
10:05
(16) Отлично! Спасибо! А можно ссылку откуда инфа?
20 H A D G E H O G s
 
04.07.12
10:06
21 H A D G E H O G s
 
04.07.12
10:06
Что за день сегодня такой...

http://technet.microsoft.com/ru-ru/library/ms187993.aspx
22 napagokc
 
04.07.12
10:08
(21) Хотел привести ссылку, как доказательство своим коллегам, но не увидел связи с 1С...
23 Ненавижу 1С
 
гуру
04.07.12
10:08
будь мужиком, вычисли размер NULL
24 H A D G E H O G s
 
04.07.12
10:09
(22) Посмотри табличку SQL
25 napagokc
 
04.07.12
10:09
(23) :D По логике вещей должен быть 4 байта
26 H A D G E H O G s
 
модератор
04.07.12
10:09
(23) Изыди, не то прокляну.
27 Ненавижу 1С
 
гуру
04.07.12
10:09
(26) чей то ты сразу пижаму надел? я же не про Неопределено ))
28 napagokc
 
04.07.12
10:12
29 napagokc
 
04.07.12
10:13
+ (28) это я нашел про то, что в 1С символы в юникоде хранятся
30 kosts
 
04.07.12
10:13
(0) Если нужно максимально меньшего размера, я бы число сделал.
1 - "Брак", 2 - "Бывшее в употреблении", 3 - "Образец".
Запрограммировать легко (можно даже использовать другой справочник).

Перечисление скорее всего будет много места занимать: тип + ссылка.
31 Ненавижу 1С
 
гуру
04.07.12
10:16
(30) просто ссылка, зато ограничение на вводимое значение
32 napagokc
 
04.07.12
10:16
(30) Я вот тоже за числовое представление. Если даже будет "брак" и "образец", например, то будет число "13", где каждый символ нужно будет рассматривать по отдельности и подставлять соответствие. Только для отчетов это слишком геморно будет.
Но такое решение мне подсказывает мой опыт в обычном программировании, а коллеги, программировавшие только на 1С, не соглашаются со мной. Пытаюсь найти либо свою правоту, либо свою не правоту...
33 napagokc
 
04.07.12
10:19
(31) Значения итак будут ограничены. Это поле нельзя будет менять. Только мы, разработчики, будем иметь к нему доступ. Реализация этого пока обсуждается.
34 Sammo
 
04.07.12
10:20
(30) А потом кто-то вводит необрабатываемое значение и все имеют длительные противоестветсвнные отношения.
И запрос будет выглядеть забавно
Где Реквизит = 1 // брак

(32) Принципы корректно применимые в классических среднеуровневых языках не вполне удачно переносить в 1с.
35 Ненавижу 1С
 
гуру
04.07.12
10:21
(33) а потом расширите, но всем разработчикам об этом забудете сказать
36 napagokc
 
04.07.12
10:21
(34) Знаю. Поэтому и обратился сюда. Прекрасно понимаю, что могу ошибаться.
37 napagokc
 
04.07.12
10:21
(35) Мы и есть все разработчики :D
38 kosts
 
04.07.12
10:25
(34) (35) Разработка не сложнее чем с обычным перечислением.


   |    ВЫБОР
   |        КОГДА БольничныйЛист.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.ПоБеременностиИРодам)
   |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускПоБеременностиИРодам)
   |        КОГДА БольничныйЛист.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.ТравмаНаПроизводстве)
   |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ТравмаНаПроизводстве)
   |        КОГДА БольничныйЛист.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.ПоУходуЗаРебенком)
   |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ПоУходуЗаРебенком)
   |        КОГДА БольничныйЛист.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.ПоУходуЗаВзрослым)
   |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ПоУходуЗаВзрослым)
   |        КОГДА БольничныйЛист.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.Карантин)
   |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.Карантин)
   |        КОГДА БольничныйЛист.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.Протезирование)
   |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.Протезирование)
   |        КОГДА БольничныйЛист.ПричинаНетрудоспособности = ЗНАЧЕНИЕ(Перечисление.ПричиныНетрудоспособности.ПособиеПриДолечивании)
   |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ПособиеПриДолечивании)
   |        ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.Заболевание)
   |    КОНЕЦ КАК Состояние,

39 Ненавижу 1С
 
гуру
04.07.12
10:27
(38) пясец
40 hhhh
 
04.07.12
10:28
(36) охота вам ломать голову над всякой фигней? Это же не регистр, а справочник. Какая принципиальная разница, сколько там байт?
41 Flyd-s
 
04.07.12
10:31
SQL разве будет намного сильнее тормозить от того 5 или 25 байт в строке?
42 H A D G E H O G s
 
04.07.12
10:31
a:=1;
b:=1;
c:=0;
res:=a*3+b*2+c*1;
43 napagokc
 
04.07.12
10:32
(40) Большой очень справочник. Я боюсь, что если мы увеличим его поле, скажем, на 100 байт, то это скажется на производительности работы с ним. Может ошибаюсь.
44 H A D G E H O G s
 
04.07.12
10:32
А - брак
Б - б/у
C - образец

Для брака и Б/у записываем число 5
45 hhhh
 
04.07.12
10:35
(43) производительность зависит от индексов, а не от размеров полей. Если неиндексируемое поле, можете хоть 1000 байт добавлять.
46 Йохохо
 
04.07.12
10:36
(0) ты же свой реквизит индексировать захочешь? подумай над индексом для нстроки, для числа и для перечисления
(32) расстреляй себя вчера!
47 qwerty09
 
04.07.12
10:37
(43) херней маешься, ИМХО. Сколько там щас элементов в твоем большом справочнике?
48 H A D G E H O G s
 
04.07.12
10:39
Ну и восстанавливаем

a:= round(res div 3);
res:= Round(res mod 3);
b:=round (res div 2);
res:= Round(res mod 2);
c:=round (res div 1);
49 H A D G E H O G s
 
04.07.12
10:40
Но вообще автор мается херней, но по сравнению с null/неопределено, это цветуечки...

Ненавижу 1С, я правильно все сложил/разложил?
50 H A D G E H O G s
 
04.07.12
10:42
Че, никто уже не помнит штоле, как старший/младший байт из двухбайтового получать?
51 Ненавижу 1С
 
гуру
04.07.12
10:43
(49) непонятно почему
res:=a*3+b*2+c*1;
а не
res:=a*4+b*2+c*1; //по степеням двойки
52 H A D G E H O G s
 
04.07.12
10:44
(51) Нафига? 3 варианта же..
53 Sammo
 
04.07.12
10:44
(43) Блин, тогда сделайте через РС. Это вам даст возможность вести 1 к n
49 +1 (про автора)
54 Ненавижу 1С
 
гуру
04.07.12
10:47
(52) потому что 3=2+1 и 3=3 неоднозначно жеж
или я туплю, ну да и ладно ))
55 Ненавижу 1С
 
гуру
04.07.12
10:48
(52) ну и по байтам более православно
56 Йохохо
 
04.07.12
10:51
(49) можно убрать округление после взятия модуля, это съэекономит несколько тактов, ведь 1с однопоточное приложение. для экономии памяти можно а б ц в одну переменную засунуть д = а + б*16 + в*256. цифры прописать в тз, все равно никто, них кроме разработчиков, править не будет
57 H A D G E H O G s
 
04.07.12
10:54
(54) Дааа, ты чертовски прав.
58 H A D G E H O G s
 
04.07.12
10:54
(56) Это чтобы синтаксис контроль Дельфи не ругался.
59 napagokc
 
04.07.12
10:55
(56) Так и предполагается - в одну переменную. Я писал об этом выше
60 napagokc
 
04.07.12
10:58
но, по ходу, большинством голосов (2 против 1), было решено делать строковое поле.

Херней - не херней я страдаю, а вопрос оптимизации меня всегда волновал. Еще когда обычное ПО делал, мне частенько говорили, что не надо экономить на спичках. Но это мой бзик, видимо. Мои тараканы...
61 Йохохо
 
04.07.12
11:00
(59) выборку по твоей самоделке движок будет делать курсором, по всему твоему регистру. если вариант "135" то на клиенте, что конечно разгрузит бд, это тебе плюс
62 qwerty09
 
04.07.12
11:09
(60) >> Но это мой бзик, видимо.
в таком случае заведи себе еще один бзик, рефакторинг называется, а то перед поиском новой работы придется сначала порчу снимать...
63 spock
 
04.07.12
11:16
(0)"Бывшее в употреблении" - 21 символ = 42 байта данных, не считая накладных. Поле с ссылкой на перечисление будет всего 16 байт. Зато потенциальных граблей в будущем не будет.
64 napagokc
 
04.07.12
11:19
(63) "Бывшее в употреблении" скорее всего заменится на "БУ"
65 Sammo
 
04.07.12
11:24
(60) Скажи где это. Чтобы туда не идти...
66 Йохохо
 
04.07.12
11:34
(64) дарю идею
бРак
бЫвшее в употреблении
обраЗец
67 napagokc
 
04.07.12
11:39
(66) Предлагаешь выделить по одной букве? Чем это существенно отличается от числового поля по наглядности? Сокращать названия будем, разумеется, но не до одной буквы. Должно быть наглядно. "Б/у" - все знают, что такое.
Но спасибо за совет =)
68 Жан Пердежон
 
04.07.12
11:44
еще вариант есть РС использовать, как доп.свойства в БСП.
69 Жан Пердежон
 
04.07.12
11:47
(68) тут оптимизацией особо и не пахнет, имхо
70 Йохохо
 
04.07.12
11:50
(67) это путь стать незаменимым
71 х86
 
04.07.12
12:27
сорри не внимательно читал, вчитался
>>...справочник партий ...

тогда уже не важно число это будет или строка и ХЗ что