Имя: Пароль:
1C
 
Про учет документов
0 b159263
 
05.11.08
22:56
Вот какую задачку жизень подбросила...
Если некоторая последовательность номеров документов, непрерывная например от 1 до 150000000 номеров только для одной серии например АА. Для АБ тоже самое. Их разделили на пачки и раздали сотрудникам. Каждый из сотр-ов какие-то (произвольные номера) использовал. Использованные номера ему известны. Надо в базе на каждый момент времени определить количество неиспользованных документов и, главное, иметь возможность узнать какие именно номера каждым сотрудником уже израсходованны.

На мой взгляд:
1) Надо хранить в регистре накопления количество выданных сотруднику документов и при использовании им каждого уменьшать общее количество на один.

2) Но вот как учитывать уже использованные номера я не придумал. В регистре накопления стремно их хранить так как их очень много и база должна работать не один год.
1 sam_sam
 
05.11.08
23:02
чета задача какая то мутная, можешь всю озвучить. Имеем количество бумаг
150000000 / 60 сек / 60 мин / 24 / 365 = 4,75.
То есть если на использование одной бамажки уходит 1секунда, то одному человеку требуется почти 5 лет.
2 sam_sam
 
05.11.08
23:03
что ето за бумажки? они их вокруг разбрасывают? это конфети?
3 b159263
 
05.11.08
23:13
Нет это я упростил, на самом деле пачки раздаются целым подразделениям в много людей, но учет не ведется относительно людей, он ведется относительно подразделений. Для каждого подразделения мы должны знать количество чистых документов и номера заполненных. (Это как выборы президента США :))
4 sam_sam
 
05.11.08
23:18
(3) ну номера в хранилище  запихай, которое соответственно реквизит справочника или измерение регистра сведений. Что то вроде
Измерения: Подразделение, Серия.
ресурсы  количество осталось, хранилище - хранилище нумеров.
5 b159263
 
05.11.08
23:23
А база не заглохнет? Ведь в конце концов все номера будут использованны, а их всего 1,5 миллиона, а потом еще 2 миллиона документов раздадут и так далее.
6 sam_sam
 
05.11.08
23:25
(5) а че она заглохнит у тебя на 1,5 млн две три записи в рег сведений, хранилище вобще все жрет и зранит в бинарнике. лучше не придумаешь.
7 sam_sam
 
05.11.08
23:28
Пример полученной таблицы
Подразделение1 серияАА  100 000 ХранилищеМассивНомеров
Подразделение2 серияАА  50 000 ХранилищеМассивНомеров

и т.д.
8 sam_sam
 
05.11.08
23:29
хочешь посмотреть нумерки, доставай из хранилища и смотри на них скока хошь.
9 sam_sam
 
05.11.08
23:32
кстати поэксперементируй, создай масив в 100000000 элементов например
аа1111, 5.10.08
аа2222, 5.10.08
и т.д. запихай в хранилище, достань добавь элемент массива, опять помести в хранилище. Вот и будешь знать загнется или нет.
10 b159263
 
05.11.08
23:35
Да я понял, если я напрямую буду забивать регистр сведений номерами использованных документов, то тогда она заглохнет. Правильно я понял?
11 sam_sam
 
05.11.08
23:36
даже лучше в список, искать проще будет. Даже не знаю сколько времени 1С массив таких размеров молотить будет. Не повезло нам с языком...
12 b159263
 
05.11.08
23:37
Да уж...
13 sam_sam
 
05.11.08
23:37
да х.з. заглохнет не заглохнет.
чем решение с хранилищем не нравится?
14 Garkin
 
05.11.08
23:39
(9) чтото мне имхается, что процедура запихивания и выпихивания из хранилища достаточно медленная, что делает хранилице абсолютно непригодным способом хранения  номеров документов.
15 sam_sam
 
05.11.08
23:41
(14) что мешает попробовать? прям щас. И о результатах рассказать.
зы
вы че меня на ночь глядя эксперементировать хотите заставить? :)
Это кому в конце концов надо? :)
16 b159263
 
05.11.08
23:44
(13) В 12 посте "Да уж..." это скорее да чем нет :)
17 sam_sam
 
05.11.08
23:44
я наоборот думаю что летать должно. массив много памяти не жрет, а картинки и внешние обработки из хранилища в лет достаются и пишутся туда соответственно тоже юыстро.
18 b159263
 
05.11.08
23:44
(14) Хотя шахматистам виднее :)
19 Garkin
 
05.11.08
23:46
(12) есть смысл рассматривать идею хранения не массива номеров, а масиива интервалов
К примеру документ на последнюю дату месяца
со структурой

Шапка
Подразделение
СорияДокумента

Табличная часть
НачНомер, КонНомер

+
Реализация интервальной арифметики


(15) Лень и 99% уверенность в результате.
20 b159263
 
05.11.08
23:56
А вот Вы мне скажите...
Если у вас есть корзина с яблоками и каждое яблоко имеет свой уникальный вес, для каждого яблока известен его вес и известно количество яблок. Корзина стоит на весах и в некоторый момент времени вы вытащили из нее какие-то яблоки, можно ли сказать по весу всей корзины какие именно вытащили яблоки не видя их самих ?

(:-0)>---Ю<
21 Garkin
 
06.11.08
00:00
(20) не всегда, но причем здесь это? )
22 b159263
 
06.11.08
00:08
(20) Это мысли вслух, забудь...
23 sam_sam
 
06.11.08
00:14
итаг!
тестовый код
Функция СоздатьСписок()
   СписокЭлементов = Новый Массив();
   Для Счет = 0 По 2000000 Цикл
       СписокЭлементов.Добавить("АА" + Счет);            
   КонецЦикла;
   Возврат СписокЭлементов;      
КонецФункции


Процедура КнопкаВыполнитьНажатие(Кнопка)
   СписокЭлементов = СоздатьСписок();
   СправочникОбъект = Хранилище.ПолучитьОбъект();
   Сообщить("Начало записи " + ТекущаяДата());
   СправочникОбъект.СписокНомеров = Новый ХранилищеЗначения(СписокЭлементов);
   
   СправочникОбъект.Записать();    
   Сообщить("Конец записи  " + ТекущаяДата());
КонецПроцедуры



   


Процедура ОсновныеДействияФормыПрочитать(Кнопка)
   // Вставить содержимое обработчика.
   Сообщить("Начало извлечения " + ТекущаяДата());
   СписокНомеров = Хранилище.СписокНомеров.Получить();
   Сообщить("Конец извлечения " + ТекущаяДата());
   
КонецПроцедуры


для списка
Начало записи 06.11.2008 0:04:20
Конец записи  06.11.2008 0:05:14
не читает, падает.

результаты

для массива
Начало записи 06.11.2008 0:09:11
Конец записи  06.11.2008 0:09:21

Начало записи 06.11.2008 0:09:11
Конец записи  06.11.2008 0:09:21

Начало извлечения 06.11.2008 0:09:49
Конец извлечения 06.11.2008 0:09:56
24 sam_sam
 
06.11.08
00:16
для массива терпимо, для списка не работает... Падает с криками не достаточно памяти. Так что если не нужно потом быстро номера использованные искать тогда на 1С сделать можно.
зы
отдай лучше сишнику какомунибудь.
25 sam_sam
 
06.11.08
00:20
а, да. Машин коретудуо 3ггц, памяти 4 гига.
26 sam_sam
 
06.11.08
00:25
в принципе если не все писать а дробить на интервалы с 1 по 100 то думаю взлетит.
зы
эй аффтар, ты че спать пошел? это ж не красиво, люди тут за тебя работают, под пивом между прочимю. :)
27 sam_sam
 
06.11.08
00:27
то есть три измерения и 2 ресурса.
измерения: Подразделение, Серия, Интервал
ресурсы: количество осталось, ХранилищеСписокНомеров.
зы
а воще сам думай, достало уже. :)))
28 H A D G E H O G s
 
06.11.08
00:29
1) Не больше 2 гектаров
2) Странно, что у тебя на 2-х милионах упало. По идее размер элемента - максимум 18 байт
3) Сделай так

Функция СоздатьСписок()
   СписокЭлементов = Новый Массив();
   Для Счет = 0 По 2000 Цикл
       Значение="АА"+Счет;
       СписокЭлементов.Добавить(Значение);            
   КонецЦикла;
   Возврат СписокЭлементов;      
КонецФункции

и выполни замер производительности и оцени эффект
29 b159263
 
06.11.08
00:31
Нет я не сплю просто думаю с закрытыми глазами... :)
Спасибо Вам! Я полностью с Вами согласен! Задача такая, что быстро нужны только остатки, а использованные номера только как расшифровка.
Спасибо Вам за ваш труд.
30 sam_sam
 
06.11.08
00:35
(28) ты не понял.
эта работает
Функция СоздатьСписок()
   СписокЭлементов = Новый Массив();
   Для Счет = 0 По 2000000 Цикл
       СписокЭлементов.Добавить("АА" + Счет);            
   КонецЦикла;
   Возврат СписокЭлементов;      
КонецФункции

вот эта падает при чтении

Функция СоздатьСписок()
   СписокЭлементов = Новый СписокЗначений();
   Для Счет = 0 По 2000000 Цикл
       СписокЭлементов.Добавить("АА" + Счет);            
   КонецЦикла;
   Возврат СписокЭлементов;      
КонецФункции
то есть если в хоронилище записать список, то прочитать его уже нет никаой возможности. 1С падает...
31 sam_sam
 
06.11.08
00:37
Причем база выросла аж до 200метров. Так что СписокЗначений цуко зверь оказывается.
32 H A D G E H O G s
 
06.11.08
00:38
(31) Мне кажется, все одинаковы..
33 H A D G E H O G s
 
06.11.08
00:38
Счаст гляну на глаз, завтра точно
34 H A D G E H O G s
 
06.11.08
00:38
Ты замер в (28) то сделал?
35 sam_sam
 
06.11.08
00:41
(33) то есть у тебя если записать СписокЗначений в 2000 000 элементов в хранилище, потом прочитать можно? хм, странно у меня на чтении падает, не достаточно памяти...
36 H A D G E H O G s
 
06.11.08
00:44
Хотя да, Список то побольше будет.
37 sam_sam
 
06.11.08
00:48
щас цикл поставил на 100 000, летаит.
Начало записи 06.11.2008 0:46:14
Конец записи  06.11.2008 0:46:14
Начало извлечения 06.11.2008 0:46:18
Конец извлечения 06.11.2008 0:46:18
Так что если буш по сто тыщ дробить не кисло получается. То есть у тебя на 2000000 ную партию примерно будет 2000 записей регистра сведений + по 100 000 номеров в хранилище. Так что рабочий вариант.
38 sam_sam
 
06.11.08
00:50
с нулями обманулсо 20 записей будет.
вечер однако...
39 H A D G E H O G s
 
06.11.08
00:51
(35) Тоже падает
40 b159263
 
06.11.08
01:19
Спасибо Вам еще раз!
41 Bell
 
14.11.08
23:59
А что просто заполнить справочник это плохо? В процессе работы обращение только к элементу, а отчетность -редкое явление.
42 b159263
 
15.11.08
00:09
Да, можно все что угондо. Только так по 7 000 000 бланков... :)
43 b159362
 
18.11.08
01:31
то есть другими словами применение проводки
Дт 20 Кр 43 "Отпущена готовая продукция на нужды собственного основного производства"
не имеет ограничений
а применение проводок
Дт 10 Кр 43 "Принята на склад в качестве материалов готовая продукция предприятия, предназначенная для собственных нужд"
Дт 20 Кр 10 "Отпущены материалы на нужды собственного основного производства"
имеет ограничение ввиде ПОЛНОГО использования продукции на собственные нужды.