Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 ноя 2024, 21:17

Генератор случайных чисел

Автор trialex3, 12 апр 2018, 10:08

0 Пользователей и 1 гость просматривают эту тему.

trialex3

Цитата: KOI8-R от 12 апр 2018, 13:21
И еще в дополнение:
Вы когда проверяете наличие штрихкода в регистре, вы по факту с относительной уверенностью можете в пределах одного документа только первый штрихкод проверить. Т.к. проверяя второй вы не делаете запись первого провернного штрихкода в регистр. Соответственно система его не найдет и посчитает, что его можно присвоить и еще одной позиции в табличной части.
а если в цикл добавить в конце принудительную запись?
Движения.АР_РегистрМаркировки.Записывать = Истина;
Движения.АР_РегистрМаркировки.Очистить();
Для Каждого ТекСтрокаОтработано Из Отработано Цикл
Движение = Движения.АР_РегистрМаркировки.Добавить();
Движение.ШтрихКод = АР_ГенерацияУи.ГенерацияУИ(Дата) + " "+ТекСтрокаОтработано.Характеристика;
Движение.ТипШтрихКода = "ТипШтрихкода";
Движение.Год = Прав(Год(Дата),2);
Движение.Месяц = Формат(Месяц(Дата),"ЧЦ=2; ЧВН=");
Движение.Дата = Дата;
Движение.ДокРегистратор = Ссылка;
Движение.КодИзделия = "2";
Движение.ЗаказНаПроизводство = ЗаказНаПроизводство;
Движение.ХарактеристикаНоменклатуры = ТекСтрокаОтработано.Характеристика;
Движение.НомерСтрокиРегистрМаркировки = ТекСтрокаОтработано.НомерСтроки;
Движения.АР_РегистрМаркировки.Записать();
КонецЦикла;



УПД добавил принудительную запись и теперь частично генерятся уникальные номера.
https://yadi.sk/i/FA3tkDfX3UM7pH

Sandi

Запись в цикле не есть гут.
генерируйте штрих код, ищите его в табличной части документа и если дублей нет, добавляйте в набор записей регистра запись.
а потом один раз записывайте весь набор

trialex3

Цитата: Sandi от 12 апр 2018, 13:39
Запись в цикле не есть гут.
генерируйте штрих код, ищите его в табличной части документа и если дублей нет, добавляйте в набор записей регистра запись.
а потом один раз записывайте весь набор
понял. попробую реализовать. и Вот еще вопрос. Сейчас у меня Серийник записывается в реквизит "КодИзделия" регистра. Как мне его продублировать в измерение "Штрихкод"? Что бы в реквизите был серийник а в штрихкоде тот же серийник + Характеристика.

Sandi

Цитата: trialex3 от 12 апр 2018, 14:23
Сейчас у меня Серийник записывается в реквизит "КодИзделия" регистра. Как мне его продублировать в измерение "Штрихкод"? Что бы в реквизите был серийник а в штрихкоде тот же серийник + Характеристика.

Вы сами же и описали, как это сделать:
1. Генерируете серийник
2. генерируете штрихкод как Серийник + Характеристика
3. при проведении документа в "КодИзделия" пишете серийник, в Штрихкод пишете Штрихкод.

Возможно, я неправильно поняла вопрос, но я не вижу тут сложности....


Движения.АР_РегистрМаркировки.Записывать = Истина;
    Движения.АР_РегистрМаркировки.Очистить();
    Для Каждого ТекСтрокаОтработано Из Отработано Цикл
        Движение = Движения.АР_РегистрМаркировки.Добавить();
       
        .........
     
        Движение.КодИзделия = СерийныйНомер;
        Движение.Штрихкод =Штрихкод;
   КонецЦикла;

Движения.АР_РегистрМаркировки.Записать();

вот как-то так :dfbbdrfb:

trialex3

Цитата: Sandi от 12 апр 2018, 13:39
Запись в цикле не есть гут.
генерируйте штрих код, ищите его в табличной части документа и если дублей нет, добавляйте в набор записей регистра запись.
а потом один раз записывайте весь набор
Вчера вечером и сегодня пытаюсь осуществить ваше предложение. Ничего не получается.
Если без набора записей, то движение у меня сейчас выглядит так:
Движения.АР_РегистрМаркировки.Записывать = Истина;
Движения.АР_РегистрМаркировки.Очистить();
Для Каждого ТекСтрокаОтработано Из Отработано Цикл
Для Счетчик = 1  По ТекСтрокаОтработано.Кол  Цикл
СерийныйНомер = АР_ГенерацияУи.ГенерацияУИ(ДатаВыполнения);
Движение = Движения.АР_РегистрМаркировки.Добавить();
Движение.ШтрихКод = СерийныйНомер +ТекСтрокаОтработано.Характеристика;
Движение.Год = Прав(Год(ДатаВыполнения),2);
Движение.Месяц = Формат(Месяц(ДатаВыполнения),"ЧЦ=2; ЧВН=");
Движение.Дата = Дата;
Движение.КодИзделия = СерийныйНомер;
Движение.ЗаказНаПроизводство = ЗаказНаПроизводство;
Движение.ХарактеристикаНоменклатуры = ТекСтрокаОтработано.Характеристика;
Движения.АР_РегистрМаркировки.Записать();
КонецЦикла;
КонецЦикла;

Но если создать набор записей как потом его весь правильно в движении записать?
Добавлено: 13 апр 2018, 11:57


Цитата: Sandi от 12 апр 2018, 13:39
Запись в цикле не есть гут.
генерируйте штрих код, ищите его в табличной части документа и если дублей нет, добавляйте в набор записей регистра запись.
а потом один раз записывайте весь набор
Вот попробовал воот так, но записывается только одна запись из табличной части
Для Каждого ТекСтрокаОтработано Из Отработано Цикл
Для Счетчик = 1  По ТекСтрокаОтработано.Кол  Цикл
СерийныйНомер = АР_ГенерацияУи.ГенерацияУИ(ДатаВыполнения);
НаборЗаписей = РегистрыСведений.АР_РегистрМаркировки.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Ссылка);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.ШтрихКод = СерийныйНомер +ТекСтрокаОтработано.Характеристика;
НоваяЗапись.Год = Прав(Год(ДатаВыполнения),2);
НоваяЗапись.Месяц = Формат(Месяц(ДатаВыполнения),"ЧЦ=2; ЧВН=");
НоваяЗапись.Дата = ДатаВыполнения;
НоваяЗапись.КодИзделия = СерийныйНомер;
НоваяЗапись.ЗаказНаПроизводство = ЗаказНаПроизводство;
НоваяЗапись.ХарактеристикаНоменклатуры = ТекСтрокаОтработано.Характеристика;
КонецЦикла;
КонецЦикла;

НаборЗаписей.Записать(Ложь);
НаборЗаписей.Очистить();

Добавлено: 13 апр 2018, 12:13


А если пытаться записать документ с 2мя записями в табличной части то генерятся почему то 2 одинаковых серийника.

Sandi

Вы меня неправильно поняли, а я по-видимому, неправильно выразилась.
под набором записей я подразумевала движения вашего документа.

Ваш первый вариант кода правильный, надо просто вынести запись движений за цикл.

Движения.АР_РегистрМаркировки.Записывать = Истина;
    Движения.АР_РегистрМаркировки.Очистить();
    Для Каждого ТекСтрокаОтработано Из Отработано Цикл
        Для Счетчик = 1  По ТекСтрокаОтработано.Кол  Цикл
        СерийныйНомер = АР_ГенерацияУи.ГенерацияУИ(ДатаВыполнения);
        Движение = Движения.АР_РегистрМаркировки.Добавить();
        Движение.ШтрихКод = СерийныйНомер +ТекСтрокаОтработано.Характеристика;
        Движение.Год = Прав(Год(ДатаВыполнения),2);
        Движение.Месяц = Формат(Месяц(ДатаВыполнения),"ЧЦ=2; ЧВН=");
        Движение.Дата = Дата;
        Движение.КодИзделия = СерийныйНомер;
        Движение.ЗаказНаПроизводство = ЗаказНаПроизводство;
        Движение.ХарактеристикаНоменклатуры = ТекСтрокаОтработано.Характеристика;
         КонецЦикла;
     КонецЦикла;
     
Движения.АР_РегистрМаркировки.Записать();

Добавлено: 13 апр 2018, 17:29


Цитата: trialex3 от 13 апр 2018, 11:11
Вот попробовал воот так, но записывается только одна запись из табличной части
Для Каждого ТекСтрокаОтработано Из Отработано Цикл
Для Счетчик = 1  По ТекСтрокаОтработано.Кол  Цикл
СерийныйНомер = АР_ГенерацияУи.ГенерацияУИ(ДатаВыполнения);
НаборЗаписей = РегистрыСведений.АР_РегистрМаркировки.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Ссылка);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.ШтрихКод = СерийныйНомер +ТекСтрокаОтработано.Характеристика;
НоваяЗапись.Год = Прав(Год(ДатаВыполнения),2);
НоваяЗапись.Месяц = Формат(Месяц(ДатаВыполнения),"ЧЦ=2; ЧВН=");
НоваяЗапись.Дата = ДатаВыполнения;
НоваяЗапись.КодИзделия = СерийныйНомер;
НоваяЗапись.ЗаказНаПроизводство = ЗаказНаПроизводство;
НоваяЗапись.ХарактеристикаНоменклатуры = ТекСтрокаОтработано.Характеристика;
КонецЦикла;
КонецЦикла;

НаборЗаписей.Записать(Ложь);
НаборЗаписей.Очистить();

А если пытаться записать документ с 2мя записями в табличной части то генерятся почему то 2 одинаковых серийника.

Для записей движений документа не надо создавать наборы записей подчиненного регистр и потом читать их.
Движения по регистру это и есть набор записей.

А этот код неправильный и еще по одной причине: в цикле каждый раз создается новый набор записей,в итоге записывается только последний набор.

Теги:  

Похожие темы (5)

Рейтинг@Mail.ru

Поиск