![]() |
![]() |
![]() |
|
Про учет документов | ☑ | ||
---|---|---|---|---|
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 "Отпущены материалы на нужды собственного основного производства" имеет ограничение ввиде ПОЛНОГО использования продукции на собственные нужды. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |