Имя: Пароль:
1C
 
Закончились штрихкоды
, , ,
0 Кокос
 
20.10.16
10:56
Вот задачка такая. куплен блок еан13 шк из 100000. 77500 уже занято. много пропусков, но последний номер 99999. надо типовую переделывать.

Кто нибудь делал? что посоветуете?

мучаю консоль запросов. вот думаю где нибудь индекс рисовать в регистре сведений или еще где.
1 Кокос
 
20.10.16
11:07
оооо  http://catalog.mista.ru/public/439218/ во чо искал
2 Кокос
 
20.10.16
12:28
ВЫБРАТЬ
    "0" КАК Цифра,
    0 КАК Позиция,
    1 КАК Вес
ПОМЕСТИТЬ СистемаСчисления

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "1",
    1,
    10

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "2",
    2,
    100

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "3",
    3,
    1000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "4",
    4,
    10000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "5",
    5,
    100000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "6",
    6,
    1000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "7",
    7,
    10000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "8",
    8,
    100000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "9",
    9,
    1000000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "10",
    10,
    10000000000
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    "0" + ПОДСТРОКА(ШтрихкодыНоменклатуры.Штрихкод, 8, 5) КАК Номер,
    ШтрихкодыНоменклатуры.Штрихкод,
    ШтрихкодыНоменклатуры.Номенклатура,
    ШтрихкодыНоменклатуры.Характеристика
ПОМЕСТИТЬ ЗанятыеШтрихкоды
ИЗ
    РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
ГДЕ
    ШтрихкодыНоменклатуры.Штрихкод ПОДОБНО &Кусок
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗанятыеШтрихкоды.Штрихкод,
    МИНИМУМ(СтепениДесяти.Вес) КАК Вес,
    СУММА(СтепениДесяти.Вес * Цифры.Позиция) / МИНИМУМ(СтепениДесяти.Вес) КАК номер
ПОМЕСТИТЬ Дано
ИЗ
    ЗанятыеШтрихкоды КАК ЗанятыеШтрихкоды
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СистемаСчисления КАК СтепениДесяти
        ПО (ИСТИНА)
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СистемаСчисления КАК Цифры
        ПО (ПОДСТРОКА(ЗанятыеШтрихкоды.Номер, 6 - СтепениДесяти.Позиция, 1) = Цифры.Цифра)

СГРУППИРОВАТЬ ПО
    ЗанятыеШтрихкоды.Штрихкод
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Дано.Штрихкод,
    Дано.номер + 1 КАК НомерПары,
    Дано.номер КАК НижняяГраница,
    Дано.номер КАК ВерхняяГраница
ПОМЕСТИТЬ Тур0
ИЗ
    Дано КАК Дано
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Тур0.Штрихкод,
    ВЫРАЗИТЬ(Тур0.НомерПары / 2 КАК ЧИСЛО(15, 0)) КАК НомерПары,
    МИНИМУМ(Тур0.НижняяГраница) КАК НижняяГраница,
    МАКСИМУМ(Тур0.ВерхняяГраница) КАК ВерхняяГраница,
    МИНИМУМ(Тур0.ВерхняяГраница) КАК НачалоИнтервала,
    МАКСИМУМ(Тур0.НижняяГраница) КАК КонецИнтервала
ПОМЕСТИТЬ Тур1
ИЗ
    Тур0 КАК Тур0

СГРУППИРОВАТЬ ПО
    Тур0.Штрихкод,
    ВЫРАЗИТЬ(Тур0.НомерПары / 2 КАК ЧИСЛО(15, 0))
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Тур1.Штрихкод,
    Тур1.НачалоИнтервала,
    Тур1.КонецИнтервала
ПОМЕСТИТЬ Интервалы
ИЗ
    Тур1 КАК Тур1
ГДЕ
    Тур1.НачалоИнтервала + 1 < Тур1.КонецИнтервала
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Интервалы.Штрихкод,
    Дано1.Штрихкод КАК Штрихкод2
ИЗ
    Интервалы КАК Интервалы
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Дано КАК Дано1
        ПО Интервалы.Штрихкод = Дано1.Штрихкод
            И Интервалы.НачалоИнтервала = Дано1.номер
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Дано КАК Дано2
        ПО (Интервалы.Штрихкод = Дано1.Штрихкод)
            И Интервалы.КонецИнтервала = Дано2.номер
3 Кокос
 
20.10.16
12:28
не работает
4 Кокос
 
20.10.16
12:28
пойду индекс делать
5 Naf_kultura
 
20.10.16
12:29
у тебя же 13(12) цифр, а там только 10
6 Кокос
 
20.10.16
12:33
(5) не. у меня 5 цифр свободных. префикс 6 цифр и упр символ постфикс. остается 5. я запрос переделал. он формирует номера правильно. а потом я в парах запутался.
7 Кокос
 
20.10.16
12:34
(5) &Кусок это префикс из 7 цифр. 7 то есть а не 6. с упр 8. остается 5
8 Кокос
 
20.10.16
12:34
пришлось правда "0" в начале плюсовать 6м символом. иначе он там номера большие делала на 5м разряде
9 Кокос
 
20.10.16
12:37
до таблицы "Дано" все работает ок. ее буду использовать для индекса
10 Кокос
 
20.10.16
14:45
//
ВЫБРАТЬ
    "0" КАК Цифра,
    0 КАК Позиция,
    1 КАК Вес
ПОМЕСТИТЬ СистемаСчисления

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "1",
    1,
    10

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "2",
    2,
    100

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "3",
    3,
    1000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "4",
    4,
    10000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "5",
    5,
    100000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "6",
    6,
    1000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "7",
    7,
    10000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "8",
    8,
    100000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "9",
    9,
    1000000000

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "10",
    10,
    10000000000
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    "0" + ПОДСТРОКА(ШтрихкодыНоменклатуры.Штрихкод, 8, 5) КАК Номер,
    ШтрихкодыНоменклатуры.Штрихкод
ПОМЕСТИТЬ Дано
ИЗ
    РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
ГДЕ
    ШтрихкодыНоменклатуры.Штрихкод ПОДОБНО &ПрефиксЕАН
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Дано.Штрихкод,
    СУММА(СтепениДесяти.Вес * Цифры.Позиция) / МИНИМУМ(СтепениДесяти.Вес) КАК номер
ПОМЕСТИТЬ ЗанятыеШтрихкоды
ИЗ
    Дано КАК Дано
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СистемаСчисления КАК СтепениДесяти
        ПО (ИСТИНА)
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СистемаСчисления КАК Цифры
        ПО (ПОДСТРОКА(Дано.Номер, 6 - СтепениДесяти.Позиция, 1) = Цифры.Цифра)

СГРУППИРОВАТЬ ПО
    Дано.Штрихкод
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    10000 * Таб5.Позиция + 1000 * Таб4.Позиция + 100 * Таб3.Позиция + 10 * Таб2.Позиция + Таб1.Позиция + 1 КАК Число
ПОМЕСТИТЬ ВТ_Числа
ИЗ
    СистемаСчисления КАК Таб1,
    СистемаСчисления КАК Таб2,
    СистемаСчисления КАК Таб3,
    СистемаСчисления КАК Таб4,
    СистемаСчисления КАК Таб5
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Числа.Число КАК Номер,
    ЕСТЬNULL(ЗанятыеШтрихкоды.Штрихкод, "") КАК Штрихкод
ПОМЕСТИТЬ ИндексШК
ИЗ
    ВТ_Числа КАК ВТ_Числа
        ЛЕВОЕ СОЕДИНЕНИЕ ЗанятыеШтрихкоды КАК ЗанятыеШтрихкоды
        ПО (ЗанятыеШтрихкоды.номер = ВТ_Числа.Число)
ГДЕ
    ВТ_Числа.Число < 100000
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1
    Свободные.Номер
ИЗ
    ИндексШК КАК Свободные
ГДЕ
    Свободные.Штрихкод = ""
//
11 Кокос
 
20.10.16
14:45
2.7 секунды блин
12 Мойдодыр
 
20.10.16
14:48
Заведи таблицу: Свободные Штрихкоды
13 Кокос
 
20.10.16
14:54
(12) хотел. для этого и писал запрос. предыдущую таблицу в нее забить и при записи штрихкода там забивать ячейки. может так и сделаю
14 Мойдодыр
 
20.10.16
14:59
Проще тупо в тз загнать все номера до 100000 и вычесть те что есть
15 Кокос
 
20.10.16
15:01
(14) имхо это не будет 2.7 сек....
16 Базис
 
naïve
20.10.16
15:03
Это надо сделать 1 раз, потом удалять из тз/справочника/внешнего файла эти записи.
17 Кокос
 
20.10.16
15:05
(16) а тут вообще тогда ничего не надо создавать. забил нужную порцию и получил
Независимо от того, куда вы едете — это в гору и против ветра!