Имя: Пароль:
1C
1C 7.7
v7: Где можно хранить данные об акцизных марках
0 gugolovski
 
31.05.19
06:48
1с 7.7 торговля/склад.

Вопрос про алкоголь, который поштучный и приходит в разрезе 1 и 3 регистров.

приходит нечто вроде: Водка Колосок 0,5л
справка: FB-000000000000304

к этой справке привязаны несколько акцизов:
<ce:amc>09001785400000118984310PX8051522100000476712617218613594213116182124151</
ce:amc>
<ce:amc>09001785400000118984310PX8051522100000476712617218613594213116182124152</
ce:amc>
<ce:amc>09001785400000118984310PX8051522100000476712617218613594213116182124153</
ce:amc>
<ce:amc>09001785400000118984310PX8051522100000476712617218613594213116182124154</
ce:amc>

поскольку каждый акциз уникален, то количество у каждого будет 1.

Где можно сохранять эти данные, чтобы потом к ним легко было обращаться. Можно ли использовать регистры для хранения это информации (только не соображу как)?

Пока могу только представить, что эти данные можно записывать в некую таблицу значений и после ее сохранять в текстовик. Затем обращаться к нему. Но может это будет ненадежно ил громоздко на дистанции.
Может есть какой удобный способ для сохранения записей подобного типа.
1 Злопчинский
 
31.05.19
07:42
по всякому можно...
https://content.screencast.com/users/Che66/folders/Jing/media/7ea2eacd-3b55-45fc-996d-074503a66f90/2018-11-27_0628.png
.
регистр - а зачем? по сути накопления нет никакого, только да\нет.
2 Сияющий в темноте
 
31.05.19
08:55
регистров сведения в 7.7 нет
так что в справочнике.
там приходят справки,и список марок к каждой справке.
справки в подчинение к алкогольной продукции,марки в подчинен е к справкамв наименование hash,так как наименование более 100 быть не может,а по hash-у все найдется быстрее.
3 NorthWind
 
31.05.19
09:01
(0) в семерке - только справочник.
4 ChMikle
 
31.05.19
09:02
Сделать документ специальный и его привязывать к поступлениям
5 gugolovski
 
31.05.19
09:16
(2) мне нравиться
но два вопроса или один)
-неясно как обойти ограничение в 100 символов
-hash что это
6 gugolovski
 
31.05.19
09:36
наверное проще дополнительный реквизит создать, для хранения марки
7 NikVars
 
31.05.19
10:05
(6) Мы твоих объемов не видим. Скуль или дбф нам не ведомо.
Создай тест, в тесте прикрути что тебе нужно, оцени изменение размеров базы и отдельных файло, посмотри как вспухнет база и наскольно хватит твоих доработок при текущих объемах.
8 MWWRuza
 
гуру
31.05.19
10:37
Я у себя храню в справочнике "Марки", подчиненном справочнику "СпрF2", который в свою очередь, никому не подчинен. Вся связь с документами движения марок, идет через текстовые поля, поиском с помощью SqlLite(базы обычные, DBF). Да, не совсем красиво... Но, зато, я имею возможность удалять давно проданные марки, не затрагивая документы. Решение конечно спорное, но у меня работает, в нескольких организациях, и пока оправдывает себя. Организации - розничные магазины, обороты от маленьких до средних. Пока, в реальности, еще не приходилось пользоваться предусмотренной функцией удаления давно проданных марок - размеры справочника марок пока далеки до максимума. Поиск марок через SqlLite сделан с единственной целью - что-бы не создавать лишний индекс, устанавливая "галочку" сортировка. Без нее, штатный метод "НайтиПоРеквизиту" не работает, а SqlLite ищет нормально и очень быстро.
По сути, это решение - как-бы отдельная база данных, но в пределах одной базы. Она не связана ссылками с основной частью базы, как если бы она была совершенно отдельно, под чем-то типа какой-то внешней СУБД, или, как автор предлогал "текстовик"...

PS Делать жесткую связь ссылками, как обычно, я чего-то побоялся - думал объемы будут "зашкаливать", но пока, уже скоро год, ни у кого проблем не возникло, можно было и не городить огород. Но, что сделано - то сделано. Работает, нормально, и ладно.
9 MWWRuza
 
гуру
31.05.19
10:46
(5)-неясно как обойти ограничение в 100 символов

А что за ограничение? Наименование? Вот по этому я и создал реквизит длиной 150 символов, потому как в наименование больше 100 не запихнешь. В наименовании я храню 68 символов для "старых" марок, если они приходят "поштучно", и 14 первых символов от новой марки. Весь ШтрихКод и для старых и для новых марок я храню в отдельном реквизите "КодНовМарк". Так-же есть реквизит "ШкКоробки", длиной 50 символов. Ну, и перечисление статус - "Принята, Продана, Возвращена, Списана". И еще один реквизит 0/1 - проверена. Туда единичку подставляю, когда сканируют марку при приемке.
10 Злопчинский
 
04.06.19
23:39
С длиной наименования больше 50 символов был/есть хитрый глюк/фича. В чем он - не помню, разжевывали то ли здесь, то ли на инфостарте. Епрст может подскажет. И, кстати, в типовых - почти везде наименование штатно 50 символов
11 MWWRuza
 
гуру
05.06.19
05:39
(10)Интересно... А в чем смысл глюка/фичи -?
Вот у меня в справочнике наименование 68 символов, совершенно штатно, без использования "недокументированных" возможностей:
https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-274.jpg
Вот больше 100 символов, да, не дает... Может тут можно что-то "схитрить"-?
PS Мне по большому счету не нужно, у меня реквизит "КодНовМарк" имеет длину 150 символов, но, вдруг пригодится в будущем...
12 Mikeware
 
05.06.19
07:18
(10) больше 100.
Собственно, можно обойти, ставя длину наименования в 0, и первый реквизит любой длины. Представление будет по первому реквизиту.
только тут как в картинке про булку хлеба и троллейбус...
Ну и, естественно, нужно понимать, что делаешь, как это будет реализовано внутри и к каким последствиям это приведет/может привести.
13 MWWRuza
 
гуру
05.06.19
07:35
Ну, я решил, что для конкретной задачи заморачиваться с представлением не стоит. В наименовании храню все 68 символов для "старых" марок, и только 14 символов(это тип, серия, номер) для новых. Сами ШК хранятся в отдельном реквизите, полностью, и 68, и 150 символов. В этом даже есть некое преимущество - открыв список марок, сразу видно, где новая, а где старая. А все остальные символы новой марки, с 15 по 150, нам видеть и не обязательно - это "крипто-хвост", и прочая служебная информация, ничего ценного для нас в ней нет...
14 Mikeware
 
05.06.19
07:44
(13) а зачем их все хранить в наименовании?
Если в марке есть "криптохвост", КЧ/КС и т.п., и формат известен и контрольные можно отделить от идентифицирующих - может идентифицироваться по идентифицирующим, а по реквизиту проверять полноту и правильность?
Кстати, (0) можно порекомендовать - если формат всегда такой: 23 цифры+2 буквы+47 цифр - просто поднять систему счисления для цифровой части?
15 MWWRuza
 
гуру
05.06.19
16:30
(14)а зачем их все хранить в наименовании?
Да тут все просто... Старое наследство. Писалось это тогда, когда о марках длиной 150 символов еще и слухов не было. Была марка 68 символов, и все тут. Поэтому, и решил на тот момент хранить ее в наименовании, она туда прекрасно пролазила. Искал при сканировании методом "НайтиПоНаименованию"... А какая разница, по наименованию все равно индекс строится. Потом, когда в связи с "новыми веяниями" пошли марки по 150 символов, это не прокатило. Поэтому, добавил отдельный реквизит. Но, "НайтиПоРеквизиту", работает только для реквизитов с установленным признаком "Сортировка". А это дополнительный индекс, который не всегда корректно обрабатывается, особенно при добавлении реквизита в такой справочник. Поэтому, устанавливать признак "Сортировка" не стал, а сделал поиск через SqlLite
16 MWWRuza
 
гуру
05.06.19
16:36
Естественно, старые марки тоже стал пихать в этот реквизит, кроме наименования, для унификации алгоритмов.

PS А вообще, сейчас понимаю, что по большому счету, все это лишнее - в новых марках первые 14 символов уникальны. По большому счету, вообще незачем хранить все 150 символов ШК. Зачем они в УС-? Просто при сканировании выделять из ШК первые 14 символов, и искать по ним. Тогда и реквизит не нужен, можно в наименовании хранить этот фрагмент кода. Но, уже сделано так, переделывать смысла особо не вижу, работает нормально.
17 HawkEye
 
05.06.19
17:08
(0) я в справочнике храню... больше негде...
18 victuan1
 
06.06.19
06:42
(16) Искать можно и по первым 14 символам. а вот сравнивать отсканированный ШК нужно полному 150-значному коду в БД учетной системы.
Иначе как защититься от контрафактной марки, в которой первые 14 символов совпали, а в криптохвосте записана ерунда?
19 Сияющий в темноте
 
06.06.19
08:58
это как раз и есть аналог хэш.
только хэш это мд5 от строки,который 32 символа,и по нему отбор и уже сравниваем с полем в 150.символов,которое можно не индексировать.
вартант с 14 уникальными символами хорош,но кто даст гарантию,что они уникальны,а формат не поменяют-от этих чудиков всего можно ожидать-в 150 символов можно все,что угодно записать.
опять же,если там 36ричная система,то кто мешает ее сначала в двоичную перевести,а потом в другую,например 64ричную и т.п.,если взять все заглавные символы,допустимые в наименовании?
20 MWWRuza
 
гуру
06.06.19
10:09
(18)Иначе как защититься от контрафактной марки, в которой первые 14 символов совпали, а в криптохвосте записана ерунда?

Ну, по большому счету - да. Можно было-бы хранить марки во входящей ТТН, и сравнивать при приемке, но, тоже не вариант - где хранить? Это не снеговик, с несколькими ТЧ... В подчиненном документе? Можно извратиться конечно, а смысл? Справочник с реквизитом КодМарки проще, и надежнее, да и не ресурсо-затратно, как оказалось.
21 Mikeware
 
06.06.19
10:23
(20) >>Это не снеговик, с несколькими ТЧ.
хосспадя, ну какая в опу разница, как организованы таблицы? смысл от этого не меняется....
22 victuan1
 
07.06.19
05:20
(20) Лучшим вариантом будет хранение таблицы марок во внешнем источнике. Поэтому я за SQLite.
23 Сияющий в темноте
 
07.06.19
08:47
(22)если внешний источник выбрать sqlExpress или еще какой то нормальный sql,то потом возникнет вопрос,а зачем вообще 1с.
24 Mikeware
 
07.06.19
09:10
(23) интерфейс.
25 yevgeniyv
 
07.06.19
11:20
(15) поделитесь кодом функции? спасибо
26 MWWRuza
 
гуру
07.06.19
12:03
(25)Какой именно функции? Поиска по реквизиту без "галочки" "сортировка" - ???
Если так, то вот:

Функция НайтиМаркуSqlLite(ШК) Экспорт
    Перем Запрос;
    Попытка
        БазаДанных = СоздатьОбъект("SQLiteBase");
    Исключение
        ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
        БазаДанных = СоздатьОбъект("SQLiteBase");
    КонецПопытки;
    БазаДанных.Открыть(":memory:");
    Запрос = БазаДанных.НовыйЗапрос();
    Запрос.ВыполнитьЗапрос("create virtual table Марки using dbeng(Справочник.Марки)");
    Текст =     "SELECT
                |code Код,
                |id [Марка :Справочник.Марки]
                |FROM Марки
                |WHERE ismark <> '*'";
            
    Текст = Текст + "
                |AND КодНовМарк LIKE '%" + СокрЛП(ШК) + "%'";
                
    Попытка
        Тз = Запрос.ВыполнитьЗапрос(Текст);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    Если Тз.КоличествоСтрок() > 0 Тогда
        ИскМарка    = Тз.ПолучитьЗначение(1, "Марка");
        Возврат ИскМарка;
    Иначе
        Возврат 0;    
    КонецЕсли;    
КонецФункции
27 yevgeniyv
 
07.06.19
12:18
(26) оно, спасибо