Имя: Пароль:
1C
 
Удаление из подчиненного периодического регистра сведений. Помогите оптимизировать код.
,
0 Kongo2019
 
03.02.21
08:32
Доброго.
Удаление из подчиненного периодического регистра сведений. Помогите оптимизировать код.
Есть регистр сведений Хранилище акцизных марок.
Периодичность - По позиции регистратора.
Режим записи - Подчинение регистратору.
Измерение Марка, строка длина 160 символов, пишется туда типа такого
170300181766771018001JY3BOHGSSEHPTLU7N57B333G5QDVUZJPLXC3C57ID4X3K2SGV3BTPM5C7TISRHULGNEJ6XXDCIVKH6B6JIIPREFYDXJLMGAMYDT64AZK42ANKLL2MBSQSTSOJBHSDVOWA .
В ресурсах есть ОтметкаВыбытия – тип булево.
Остальные ресурсы в данном вопросе не важны.
У нас в основном в этом регистре одна марка может быть в двух записях.
Если производство, то это два регистратора отчет производства за смену типа ставит на баланс и ТТН где уставлен признак выбывшие.
Если мы купили и продали это два регистратора это Акт к ТТН и ТТН где уставлен признак выбывшие.
Нескорые марки могут туда - сюда кататься, будет несколько записей,  главная запись последняя, по ней надо смотреть ОтметкаВыбытия.
На текущий момент в регистре 38 миллионов записей.
Задача зачистить выбывшие марки, оставив данные только за последние полгода.
Пока сделал так. За 12 часов в среднем удаляется полмиллиона записей.
Помогите оптимизировать код. Пока только в голову приходит запустить на нескольких компах с разным диапазоном дат.

Процедура Кнопка1Нажатие(Элемент)
    //Удаление записей из регистра, подчиненного регистратору
    
    Сообщить("Начало запроса - " + ТекущаяДата());
    
    Запрос = Новый Запрос;
    
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    алкХранилищеАкцизныхМарокСрезПоследних.Марка
    |ПОМЕСТИТЬ Марки
    |ИЗ
    |    РегистрСведений.алкХранилищеАкцизныхМарок.СрезПоследних(, ) КАК алкХранилищеАкцизныхМарокСрезПоследних
    |ГДЕ
    |    алкХранилищеАкцизныхМарокСрезПоследних.ОтметкаВыбытия = ИСТИНА
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    алкХранилищеАкцизныхМарок.Регистратор КАК Регистратор,
    |    алкХранилищеАкцизныхМарок.Марка КАК Марка
    |ИЗ
    |    РегистрСведений.алкХранилищеАкцизныхМарок КАК алкХранилищеАкцизныхМарок
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Марки КАК Марки
    |        ПО алкХранилищеАкцизныхМарок.Марка = Марки.Марка
    |ГДЕ
    |    алкХранилищеАкцизныхМарок.Период МЕЖДУ ДАТАВРЕМЯ(2018, 1, 1, 0, 0 , 1) И ДАТАВРЕМЯ(2020, 6, 1, 0, 0, 1)
    |ИТОГИ ПО
    |    Регистратор";
    
    
    
    СчетчикДоки = 0;
    СчетчикМарки = 0;
    
    ВыборкаРегистратор = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Сообщить("Окончание запроса - " + ТекущаяДата());
    
    Пока ВыборкаРегистратор.Следующий() Цикл
        НаборЗаписей = РегистрыСведений.алкХранилищеАкцизныхМарок.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(ВыборкаРегистратор.Регистратор);
        НаборЗаписей.Прочитать();
        сзУдаляемыеЗаписи = Новый СписокЗначений;
        ВыборкаДетальныеЗаписи = ВыборкаРегистратор.Выбрать();
        
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            Для Каждого Запись Из НаборЗаписей Цикл
                Если Запись.Марка = ВыборкаДетальныеЗаписи.Марка Тогда
                    сзУдаляемыеЗаписи.Добавить(Запись);
                    СчетчикМарки = СчетчикМарки + 1;
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
        
        Для Каждого ЭлтСз Из сзУдаляемыеЗаписи Цикл
            НаборЗаписей.Удалить(ЭлтСз.Значение);
        КонецЦикла;
        
        НаборЗаписей.Записать();
        СчетчикДоки = СчетчикДоки + 1;
        //Если СчетчикДоки = 100 Тогда
        //    Прервать;
        //КонецЕсли;
        Если ТекущаяДата() > Дата(2021, 02, 03, 08, 30 , 00) Тогда
            Прервать;
        КонецЕсли;    

    КонецЦикла;
    
    Сообщить("Окончание обработки - " + ТекущаяДата());
    Сообщить("СчетчикДоки - " + СчетчикДоки);
    Сообщить("СчетчикМарки - " + СчетчикМарки);
КонецПроцедуры

Сам запрос выполняется 20 минут.
Вот для примера последний запуск.

Начало запроса - 02.02.2021 23:10:58
Окончание запроса - 02.02.2021 23:38:54
Окончание обработки - 03.02.2021 8:31:04
СчетчикДоки - 167
СчетчикМарки - 373 695
28 Ёпрст
 
03.02.21
09:55
И.. в Крыму нет разве послаблений, в плане учета егаиса ?
29 MaiorovYury
 
03.02.21
09:59
А замер производительности смотрел?

Мне кажется вот тут, если по регистратору 20к записей, то будет около 20к * 20к / 2, то есть 200 млн проходов цикла - это овер дофига
У тебя ведь и в ВыборкаДетальныеЗаписи и в НаборЗаписей будет по 20к строк, верно?

У нас сейчас в ERP в стандарте такая же фигня - заказы поставщику проводятся по 10 минуты, потому что там тоже цикл внутри цикла по 10к-20к строк каждый)

        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            Для Каждого Запись Из НаборЗаписей Цикл
                Если Запись.Марка = ВыборкаДетальныеЗаписи.Марка Тогда
                    сзУдаляемыеЗаписи.Добавить(Запись);
                    СчетчикМарки = СчетчикМарки + 1;
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
30 Ёпрст
 
03.02.21
10:01
И..главный вопрос то - нахрена ЭТО удалять ? Места мало что ле ?
31 MaiorovYury
 
03.02.21
10:04
(30) если запрос выполняется 20 минут, то полагаю и в работе это уже мешает)
32 Ёпрст
 
03.02.21
10:09
(31) тут переписывать недоразумение надо, которое кт-ники слепили на коленке и продолжают его применять, заместо того, чтоб исправить.

Об этом говорили, еще при начале внедрения марки. Что подчиненный, периодический РС не жилец. В нём еще и марка - измерение, строка 150.. вообще п..ц Ну вот он у автора и наступил :))

У нас только марок в 2 раза больше, а записей в РС - 116 390 861, только у нас их 2, для бух и упр учета.
И запросы, ну самый тяжелый, пара секунд - это получение остатка всех марок.
33 Kongo2019
 
03.02.21
10:47
(26) Ну мы с ним вообще не связывались. Вот соседи помощи просят.
(27) Я в курсе. Это длина строки в реквизите стоит 160.
(28) Не, у нас как как налоги и учет это Россия. А как кредит и ипотека в банке то не Россия. В общем нет послаблений.
(30) Тормоза дикие. Индекс в два раза больше данных, это как-то не здорово.
34 Kongo2019
 
03.02.21
10:55
(24)Не осиливаю.
Задача звучит следующая, отобрать все марки у которых на дату есть пометка выбывшие.
Хотя блин, тут есть потенциальная засада. Они на дату могут быть выбывшие а на сегодня опять вернулись. Поэтому я делаю срез посление на текущую дату, а доки не чищу за последние полгода, ну хоть как-то попку прикрыть.
То бишь, так как регистр сведений периодический, то надо срез последних делать.
И удалить записи где это марка есть. Исключая последние полгода.
35 Ёпрст
 
03.02.21
10:56
(33) Тут только в морг. Т.е переписать всё.
Там не долго - завести справочник марки. в регистре поменять измерение со строки на справочник, сделать РС независимым и не переиодическим, поменять модули, добавить свой покрывающий индекс и ...полетит.
36 Kongo2019
 
03.02.21
10:57
(35) Пока надо только грохнуть старое. За полетит никто не заплатит.
37 TormozIT
 
гуру
03.02.21
11:02
(34) Тогда чуть сложнее https://www.youtube.com/watch?v=MgDXX-qUrx0&t=641s
38 BeerHelpsMeWin
 
03.02.21
11:04
А если скопировать регистр, удалить всё, и вернуть только нужные?
39 Ёпрст
 
03.02.21
11:05
(36) Ну, тогда через delete from это сделать быстрее, чем через запись набора
40 Kongo2019
 
03.02.21
11:08
(37) а у меня неактивно Кол-во потоков. Хотел проверить, пару месяцев удалить.
Что я делаю не так?
http://prntscr.com/y4ev2b
41 Kongo2019
 
03.02.21
11:10
(39) Но мне надо только выбывшие грохнуть.
42 Kongo2019
 
03.02.21
11:10
(38) Куда его скопировать?
43 TormozIT
 
гуру
03.02.21
11:10
(40) В (21) фича описана, включая ее применимость. Ты используешь портативный вариант.
44 TormozIT
 
гуру
03.02.21
11:12
(40) Посмотри первую минуту https://youtu.be/-NJJP79TccI там показано как запускать правильный вариант.
45 Kongo2019
 
03.02.21
11:13
(43) Не увидел. Тогда мне не повезло. Конфа на поддержке. Внутрь добро лесть не дали. Даже если я копии и отработаю, в боевой прикрутить не дадут
46 TormozIT
 
гуру
03.02.21
11:42
(45) Пора увидеть (44)
47 Kongo2019
 
03.02.21
11:44
(46) Базовая конфа УПП 1.3.
1С:Предприятие 8.3 (8.3.13.1865)
Нет там расширений.
48 timurhv
 
03.02.21
11:55
(35) Я же тестировал разные схемы, по вашей:
1. Справочник сильно дольше записывается, чем записи в регистр сведений. Условно если в документе 1000000 марок, то это нужно сперва элемент справочника записать и только потом записи.
2. Весь профит от уменьшения индексов регистра уйдет в таблицу справочника, там тоже они немало занимают.

Самый оптимальный вариант: строковые измерения и регистр накопления.
49 timurhv
 
03.02.21
11:57
(48) + запись в независимый непериодический регистр с 1млн записей займет немало времени
50 Адинэснег
 
03.02.21
11:59
(19) типа учет вести можно по одной параметрической спецификации и одному переделу
51 H A D G E H O G s
 
03.02.21
12:06
(48) А вот и разработчики КТ2000, наследники :-)
52 TormozIT
 
гуру
03.02.21
12:08
(47) Виноват. Тоже не увидел (18) =) Тогда только однопоточный режим.
53 H A D G E H O G s
 
03.02.21
12:11
(48) Справочник - один раз записал и живи спокойно. В несколько потоков для большого пула марок. И без всяких дублей, марка выбыла, марка в наличии. Кроме того, в справочнике можно выкинуть криптохвост из индекса.
Ну и привет всему набору индексов в которые вольготно войдут 150 байт марки, если у тебя другие измерения ведущие или индексированные.
54 timurhv
 
03.02.21
12:21
(53) Тестировал я справочники, жрут индексы чуть меньше чем РСВ с подчиненным регистратору по позиции (притом по документации с ИТС должно быть меньше, но таблица в MSSQL говорит об обратном). Запись идет сильно дольше, в один поток 550 элементов справочника в секунду вышло, это для движений в 1млн марок 30 минут ждать?
Но у меня только приход и расход был, с несколькими записями в движениях по одной марке может и лучше будет.
55 H A D G E H O G s
 
03.02.21
12:26
(54) Хорошо, хорошо.
56 Ёпрст
 
03.02.21
13:17
(48) че за бредятина ?
57 Ёпрст
 
03.02.21
13:19
Могу показать на конкретных данных, есть тут у нас в холдинге адэпты кт-ой конфы. Как неверная структура этого регистра влияет на запись. Про получения данных с такого регистра, его размеров в скуля. промолчу - там просто ад и израиль
58 Ёпрст
 
03.02.21
13:19
(41) и ? в делете пропишешь условие на выбывшую марку и всё.
59 Ёпрст
 
03.02.21
13:21
(54) самая быстрая запись - это запись в независимый, не периодический РС с ОбменДанными.Загрузка = истина. Там только insert и всё.
60 DAFA
 
03.02.21
13:21
ну и код .а параметры использовать религия не позволяет?
61 timurhv
 
03.02.21
13:21
(55) (56) (59)
Запись 1 млн марок, индексы нигде не добавлял, используются кластерные и стандартные наборы у регистров, генерируемые платформой.
------------------------
1. Регистр сведений по позиции регистратора, измерения строковые:
Начало записи: 03.02.2021 12:52:58
Конец записи: 03.02.2021 12:56:34

Размер таблиц:
Основная 380960Кб + 739848Кб (индексы)
Всего = 1094Мб

2. Регистр накопления, измерения строковые:
Начало записи: 03.02.2021 12:53:05
Начало записи: 03.02.2021 12:57:37

Размер таблиц:
Основная 380960Кб + 50536Кб (индексы)
Итоги 347832Кб + 31600Кб (индексы)
Всего = 791Мб

3. Справочник (без кода, только наименование длиной 150) + независимый регистр сведений:
Время = дофига, не стал дожидаться, записалось за 20 минут 104991шт из 1млн в 1 поток.

Размер таблиц 104991 записей:
Справочник = 38184Кб + 45600Кб (индекс). Приводим до 1млн = 363688Кб + 434322Кб (индекс)
Регистр сведений = 5720Кб + 48Кб (индекс). Приводим до 1млн = 54480Кб + 457Кб
Всего = 832Мб
------------------------
Как я и говорил, размер ненамного увеличивается между п.3 и п.1, но сильно возрастает время записи.

Особенности:
п.1 будет долго формировать запрос на срезы на определенный период
п.2 итоги будут разбухать, если не закрывается регистр в 0, но запрос среза на дату выполняется во много раз быстрее п.1.
62 Ёпрст
 
03.02.21
13:24
(61) Ладно, мне лень кого-то убеждать. Наглядный пример, как не надо делать - в (0).
63 H A D G E H O G s
 
03.02.21
13:25
(61) Еще и регистр накопления. ... дышит и живет.
64 timurhv
 
03.02.21
13:26
(59) Расскажите, как быстро записать в регистр сведений с измерениями:
- Марка (ссылка справочника, либо строка)

Быстро запишется если использовать:
- Марка (ссылка справочника, либо строка)
- ДополнительноеИзмерение (партия, документ-регистратор, номенклатура и тп)

(62) Регистр сведений по позиции = сложный запрос для 1С и много индексов, тут я согласен.
65 Ёпрст
 
03.02.21
13:27
если получение примитивного отчета - 20 минут, это нормально, то да, так и делайте
66 H A D G E H O G s
 
03.02.21
13:28
(64) Набором записей с отбором по Измерение- Документ.
67 timurhv
 
03.02.21
13:30
(66) Как будет выглядеть запрос по остаточным маркам в этом случае?
68 Ёпрст
 
03.02.21
13:31
69 timurhv
 
03.02.21
13:32
(66) (67) считать сколько раз было прихода у марки и сколько расхода?
Либо при списании записывать для каждой марки отдельно, а не набором по документу?

(68) Я это читал
70 Ёпрст
 
03.02.21
13:32
Не удивительно, что в кт-ной конфе вообще никаких отчетов нет.. ни движения марки ни вминяемых останков.
И ..всё что есть - отчет 30 минут :))
71 Kongo2019
 
03.02.21
13:33
(58) Не прокатит. Это только половину удалит.
У нас в основном в этом регистре одна марка может быть в двух записях.
Если производство, то это два регистратора отчет производства за смену типа ставит на баланс и ТТН где уставлен признак выбывшие.
Если мы купили и продали это два регистратора это Акт к ТТН и ТТН где уставлен признак выбывшие.
72 H A D G E H O G s
 
03.02.21
13:34
(67)
Выбрать
РС.Марка
Имеющие Максимум(РС.Состояние)=&МаркаВНаличии
73 H A D G E H O G s
 
03.02.21
13:36
(67) Смысл не менять статус, а дописывать всегда. Наборами. И каждый следующий статус больше предыдущего. И Статус - это 2 знаковое число.
74 H A D G E H O G s
 
03.02.21
13:38
Я просто рано ушел из КТ2000 :-) Партионный ЕГАИС был мой, а вот помарочный - потомков :-)
75 timurhv
 
03.02.21
13:39
(73) Как записи должны выглядеть в независимом регистре?
Марка1 ДокументПриход
Марка1 ДокументРасход
Марка1 ДокументВозврат

Он всегда будет в выбывших?
76 H A D G E H O G s
 
03.02.21
13:41
77 H A D G E H O G s
 
03.02.21
13:42
(75) После Расхода марки уходят в РС
АСФАрхивСостоянийМарокУпаковок
с немного другим составом индексов и измерений
78 Ёпрст
 
03.02.21
13:45
(71) :)) ты не догоняешь, в подзапросе или во времянке получаешь марки, которые нужно удалить, потом в делете в where пихаешь этот список марок. Удалит всё
79 H A D G E H O G s
 
03.02.21
13:46
Было бы забавно, если бы КТ запилили регистр накопления.
80 Ёпрст
 
03.02.21
13:46
(76) у меня еще тупее - число, приход+1 расход -1..ну и тупо сумма
81 H A D G E H O G s
 
03.02.21
13:47
(80) Максимум возьмет первую запись индекса.
82 Ёпрст
 
03.02.21
13:50
(81)я ужо не помню свои эксперименты, н пихал изначально так - 0 - пришла ттн, 1-подтвердили актом, -1 - выбыла.
Потом, записи с нулём вообще выкинул.
83 Ёпрст
 
03.02.21
13:52
Но, у меня есть с чем сравнить, у нас в холдинге есть база, где модуль егаиса целиком, или с катапа или с утапа взят.
Дык вот, там при сравнительно одинаковом количестве марок и объеме продаж, только размер этого регистра в скуле..ну где-то раза 3-5 больше. Про индекс так вообще п..ц
84 Ёпрст
 
03.02.21
13:52
Ну и отчетов у них нет никаких. вообще нет.
85 H A D G E H O G s
 
03.02.21
13:53
(82) Я тоже сначало оперировал 0,1,2,3. А потом потребовались промежуточные статусы и потребовалось все старое умножить на 10 и вводить 0, 10, 20, 30 и между ними 15,16, 25 и.т.д.
86 timurhv
 
03.02.21
13:55
(77) Теперь стало ясно, удобно чистить лишнее, по сравнению с регистром накопления.

Совет в (35) все-равно не понимаю со справочником в чем выгода? Индексы много занимают, хотя из реквизита только наименование.
87 Kongo2019
 
03.02.21
14:05
У меня простой запрос на удаление всего, ну вот решил проверить. Уже час колбасит. что-то здесь не то.
DELETE FROM [test].[dbo].[_InfoRg33266]
88 Ёпрст
 
03.02.21
14:07
(87) да уж.. удаление всего это truncate table [test].[dbo].[_InfoRg33266]  пару мс займет, наверное
89 piter3
 
03.02.21
14:10
(87) условие забыл же
90 Ёпрст
 
03.02.21
14:14
(86) я сразу мгновенно сказать, есть марка в базе или нет, тупо в поле ввода вбив её.
+ индекс гораздо компактнее, не говоря уже о том, что марку не только в РС пихаете.
91 Ёпрст
 
03.02.21
14:15
Я храню еще в справочнике марки  реквизит алкогольная продукция. Так быстрее в отчетах иметь её
92 Kongo2019
 
03.02.21
14:18
(89) Да уже просто глянут, а что даст очистка этого регистра? Чего это народ решил меня озадачить.
93 Eeeehhhh
 
03.02.21
14:18
(87) базу перед действом в симпл, но лучше select into - быстрее будет.
94 piter3
 
03.02.21
14:19
(92) Без where или как в (93) смысла мало имеет
95 Kongo2019
 
03.02.21
14:23
Тут другая идея появилась.
Там ресурсах есть СправкаБ, ссылка на справочник.
Этих справок всего действительных около 2 тысячи.
Список есть, гуид легко можно получить.
Может тупо в SQL сделать?
Только я не знаю как мне в условие этот список запихать.
96 Ёпрст
 
03.02.21
14:32
(92) это ты у (86) спроси, Если верить  Ежику, он создатель этого чуда.
97 timurhv
 
03.02.21
14:34
(90) Если бы справочник быстро писался, то его использовал. Но в фуре помещается 470тыс пачек с сигаретами, УПД может прийти перед приемкой и ждать запись в таком случае нельзя.
(96) Я хейтил только за создание справочника, т.к. это долго. Схему в (0) я не поддерживаю и не использую, перечитайте мои сообщения. Я за регистр накопления, т.к. это самая быстрая запись с большим набором марок.
98 Kongo2019
 
03.02.21
14:35
(96) Он в (74) сказал что не причастен.
99 H A D G E H O G s
 
03.02.21
14:36
(91) Я просто алкокод в коде марки. Для унификации с КТ, 1С и нашим решением.
100 H A D G E H O G s
 
03.02.21
14:40
(97) РН всегда содержит Период в начале кластерного индекса, что исключает его из спецолимпиады.
101 timurhv
 
03.02.21
14:41
(100) Ок, как за 2 минуты записать 470тыс. элементов справочника?
102 Вася Теркин
 
03.02.21
14:43
(0) Прямое подключение к собственной базе SQL из самой базы 1С через консоль SQL сделать сможешь, а готовую функцию пока не дают. Только что за 40 сек 13 миллионов строк РС проапдейтили. А в 1С это занимало 50 часов.
103 H A D G E H O G s
 
03.02.21
14:44
(101) Никак, пишите в РС.
104 H A D G E H O G s
 
03.02.21
14:45
(101) У нас алкашка, там размеры ТТН меньше.
105 timurhv
 
03.02.21
14:50
(103) Наверное, так и сделаю и откажусь по истории РН в пользу (77). Содержимое по маркам в УПД сейчас так и пишется в независимый РС.
106 TormozIT
 
гуру
03.02.21
14:51
Кажется готовить DELETE FROM можно так. Делаешь в консоли запросов нужный запрос к удаляемой таблице с отбором и выполняешь его с отловом запроса СУБД. Дальше в этом отловленном запросе СУБД меняешь начало "SELECT ... FROM" на "DELETE FROM dbo.<ИмяТаблицыВСУБД> FROM". Дальше выполняешь например через ADO этот запрос напрямую в СУБД. Все это некоторые консоли запросов позволяют делать не выходя из 1С.
107 H A D G E H O G s
 
03.02.21
14:53
(105) Я бы тупо писал в справочник в многопоток в НачатьТранзакцию с отключением записи в ЖР. Если этого мало - ВнешнийИсточник данных и bulk insert по массиву подготовленных в 1С GUID и кодов марок
108 timurhv
 
03.02.21
14:55
(107) Если внешний источник отвалится в НГ, то праздники будут испорчены :)
В многопоток я делал, но на сервере пока что только 4 ядра, не разгуляешься.
109 H A D G E H O G s
 
03.02.21
14:57
(108) УстановитьСсылкуНового(Новый УникальныйИдентификатор) не забуть, когда в многопоток писать будешь
110 Вася Теркин
 
03.02.21
14:58
(106) Запрещено лицензионным соглашением.
111 H A D G E H O G s
 
03.02.21
14:58
(110) ВнешниеИсточникиДанных
112 H A D G E H O G s
 
03.02.21
14:59
(108) Несколько лет работает обмен с wms, ниче не отвалилось
113 TormozIT
 
гуру
03.02.21
15:00
(111) Там нет DELETE FROM. Там надо отбор по измерениям делать с одним значением.
114 H A D G E H O G s
 
03.02.21
15:01
(113) Там есть вызов хранимых процедур :-)
115 Вася Теркин
 
03.02.21
15:01
(108) А как разные потоки принудительно на разные рабочие процессы трехзвенки отправить? Или один рабочий процесс можно на нескольких камнях сразу крутить?
116 Вася Теркин
 
03.02.21
15:01
Теперь можно в 8.3 новые rphost открывать по желанию?
117 timurhv
 
03.02.21
15:02
118 Вася Теркин
 
03.02.21
15:03
(108) Несколько фоновых - это не многопоток.
119 H A D G E H O G s
 
03.02.21
15:05
120 timurhv
 
03.02.21
15:05
(118) Почему нет?
121 Ёпрст
 
03.02.21
15:58
(97) РН ? он же еще и итоги вам потом будет пересчитывать...
122 timurhv
 
03.02.21
19:01
(121) Да, откажусь от него. Я в начале не так понял вас про структуру РС, подумал используется только Марка + Статус.
123 dmpl
 
03.02.21
21:23
(54) А если справочник не плоский, а 2-уровневый, например. Первый уровень - "Упаковки" - ссылка на элемент, штрихкод которого реально сканирует оператор (блок, коробка, палета и т.п.), второй уровень - "Состав штрихкодов упаковок" - допустим, N элементов, в ТЧ которого содержатся коды. Допустим, до 1000 кодов в каждом элементе справочника. В ТЧ справочника "Упаковки" содержится список ссылок на справочник "Состав штрихкодов упаковок". В движениях использовать ссылки на справочник верхнего уровня (то, что реально сканирует оператор), но при необходимости можно всегда развернуть до конкретного штрихкода.
124 timurhv
 
03.02.21
21:46
(123) Думал об этом, оператор сканирует блок, уменьшится объем в 10 раз.
Протестирую все варианты: РС независимый со строковыми измерениями, РС с записью ссылок упаковки и содержимого в ТЧ. Только в рознице марка списывается или блок (либо хэш марки добавлять в измерения, либо порядковый номер строки ТЧ справочника).
125 Вася Теркин
 
04.02.21
10:24
(119, 120) См (115)
126 timurhv
 
04.02.21
10:58
(125) Может
127 dmpl
 
04.02.21
15:55
(124) На мой взгляд, не обязательно писать какой-то код в регистр. Пишется либо непосредственно штрихкод, если это неделимая упаковка, либо ссылка на упаковку со списком штрихкодов. В таком случае надо предусмотреть операцию "разборка" для упаковки, которая сделает штрихкод упаковки недоступным для дальнейшего сканирования, ну а отдельные штрихкоды упаковки наоборот станут доступны к сканированию.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан