Имя: Пароль:
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 "Отпущены материалы на нужды собственного основного производства"
имеет ограничение ввиде ПОЛНОГО использования продукции на собственные нужды.
AdBlock убивает бесплатный контент. 1Сергей