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

Справочник. Автоматическое заполнение реквизита.

Автор dds1990, 08 ноя 2015, 15:11

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

dds1990

Всем доброго времени суток!

Существует такая задачка - Необходимо заполнять справочник при проведении документа, в целом с ней я справился, но есть один нюанс... В один из реквизитов справочника необходимо генерировать числовой код, который в свою очередь не должен совпадать с числовыми кодами сгененированными ранее. Буду благодарен любой помощи!

// Заполнение справочника УникальныеНомера

  Для Каждого СтрокаТабличнойЧасти ИЗ ТабОборотНоменклатуры Цикл
КоличествоНоменклатуры = СтрокаТабличнойЧасти.Количество;
Пока КоличествоНоменклатуры > 0 Цикл
НовыйЭлемент = Справочники.УникальныеНомера.СоздатьЭлемент();
НовыйЭлемент.Наименование = СтрокаТабличнойЧасти.Наименование;
НовыйЭлемент.УникальныйНомер = ; // На этом этапе у меня возникает вопрос.
НовыйЭлемент.Записать();
КоличествоНоменклатуры = КоличествоНоменклатуры - 1;
КонецЦикла;
КонецЦикла;

Дмитрий@

А почему нельзя использовать стандартные свойства справочника "Автонумерация"?

DmitriyF

Цитата: dds1990 от 08 ноя 2015, 15:11
Всем доброго времени суток!

Существует такая задачка - Необходимо заполнять справочник при проведении документа, в целом с ней я справился, но есть один нюанс... В один из реквизитов справочника необходимо генерировать числовой код, который в свою очередь не должен совпадать с числовыми кодами сгененированными ранее. Буду благодарен любой помощи!

// Заполнение справочника УникальныеНомера

  Для Каждого СтрокаТабличнойЧасти ИЗ ТабОборотНоменклатуры Цикл
КоличествоНоменклатуры = СтрокаТабличнойЧасти.Количество;
Пока КоличествоНоменклатуры > 0 Цикл
НовыйЭлемент = Справочники.УникальныеНомера.СоздатьЭлемент();
НовыйЭлемент.Наименование = СтрокаТабличнойЧасти.Наименование;
НовыйЭлемент.УникальныйНомер = ; // На этом этапе у меня возникает вопрос.
НовыйЭлемент.Записать();
КоличествоНоменклатуры = КоличествоНоменклатуры - 1;
КонецЦикла;
КонецЦикла;

так в чем проблема то, получаешь последний код и делай с ним что хочешь. Увеличивай уменьшай. Если конечно по порядку.

dds1990

Цитата: Дмитрий@ от 08 ноя 2015, 15:42
А почему нельзя использовать стандартные свойства справочника "Автонумерация"?

Я думал об этом, в перспективе это должно стать печатным штрих кодом, автонумерация не очень в этом плане подходит.
Добавлено: 08 ноя 2015, 15:55


Цитата: DmitriyF от 08 ноя 2015, 15:48
Цитата: dds1990 от 08 ноя 2015, 15:11
Всем доброго времени суток!

Существует такая задачка - Необходимо заполнять справочник при проведении документа, в целом с ней я справился, но есть один нюанс... В один из реквизитов справочника необходимо генерировать числовой код, который в свою очередь не должен совпадать с числовыми кодами сгененированными ранее. Буду благодарен любой помощи!

// Заполнение справочника УникальныеНомера

  Для Каждого СтрокаТабличнойЧасти ИЗ ТабОборотНоменклатуры Цикл
КоличествоНоменклатуры = СтрокаТабличнойЧасти.Количество;
Пока КоличествоНоменклатуры > 0 Цикл
НовыйЭлемент = Справочники.УникальныеНомера.СоздатьЭлемент();
НовыйЭлемент.Наименование = СтрокаТабличнойЧасти.Наименование;
НовыйЭлемент.УникальныйНомер = ; // На этом этапе у меня возникает вопрос.
НовыйЭлемент.Записать();
КоличествоНоменклатуры = КоличествоНоменклатуры - 1;
КонецЦикла;
КонецЦикла;

так в чем проблема то, получаешь последний код и делай с ним что хочешь. Увеличивай уменьшай. Если конечно по порядку.

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

Дмитрий@


DmitriyF

dds1990, а какая разница? у тебя уже код есть по умолчанию. используй его да и все.
Добавлено: 08 ноя 2015, 16:06


Дмитрий@, я так понимаю он не знает алгоритма. ему нужен полный рандом

dds1990

Цитата: Дмитрий@ от 08 ноя 2015, 15:42
А почему нельзя использовать стандартные свойства справочника "Автонумерация"?

Создаваться должно по типу
xxx-yyy + 1

где x - вид номенклатуры выраженный числом, а y - единица номенклатуры.


DmitriyF

ГСЧ = Новый ГенераторСлучайныхЧисел(255);
ГСЧ.СлучайноеЧисло(0, 10000);

Добавлено: 08 ноя 2015, 16:12


Цитата: dds1990 от 08 ноя 2015, 16:07
Цитата: Дмитрий@ от 08 ноя 2015, 15:42
А почему нельзя использовать стандартные свойства справочника "Автонумерация"?

Создаваться должно по типу
xxx-yyy + 1

где x - вид номенклатуры выраженный числом, а y - единица номенклатуры.
прочитай свое первое сообщение. мы сами должны гадать что у тебя к чему.
Добавлено: 08 ноя 2015, 16:40


так в чем точнее проблема? у тебя уже есть некоторые данные. правильно? ты более точнее напиши что не получается

Дмитрий@

Если длина номера не фиксирована и не дополняется нулями, то можно так
Цитировать&НаСервере
Функция УстановитьУникальныйНомерНаСервере()
   
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ РАЗРЕШЕННЫЕ
   |   ПОДСТРОКА(Номенклатура.Код, 7, 5) КАК Номер
   |ИЗ
   |   Справочник.Номенклатура КАК Номенклатура";
   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();
   ТаблицаЗначений = Новый ТаблицаЗначений;
   МассивТипов = Новый Массив;
   МассивТипов.Добавить(Тип("Число"));
   КвалификаторыЧисла = Новый КвалификаторыЧисла(5,0);
   ОписаниеТипов = Новый ОписаниеТипов(МассивТипов,,КвалификаторыЧисла);
   ТаблицаЗначений.Колонки.Добавить("Номер",ОписаниеТипов);
   Пока Выборка.Следующий() Цикл
      НоваяСтрока = ТаблицаЗначений.Добавить();
      НоваяСтрока.Номер = Число(Выборка.Номер);
   КонецЦикла;
   Запрос.Текст =
   "ВЫБРАТЬ
   |   Таблица.Номер
   |ПОМЕСТИТЬ ВТТаблица
   |ИЗ
   |   &Таблица КАК Таблица
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ ПЕРВЫЕ 1
   |   Таблица.Номер
   |ИЗ
   |   ВТТаблица КАК Таблица
   |
   |УПОРЯДОЧИТЬ ПО
   |   Таблица.Номер УБЫВ";
   Запрос.УстановитьПараметр("Таблица",ТаблицаЗначений);
   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();
   МаксимальныйНомер = 0;
   Пока Выборка.Следующий() Цикл
      МаксимальныйНомер = Выборка.Номер;
   КонецЦикла;
   Возврат МаксимальныйНомер;
   
КонецФункции

&НаКлиенте
Процедура УстановитьУникальныйНомер(Команда)
   МаксимальныйНомер = УстановитьУникальныйНомерНаСервере();
   УникальныйНомер = "ВидНоменклатуры"+"ЕдиницаНоменклатуры"+Строка(МаксимальныйНомер+1);
КонецПроцедуры

Теги:

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

Рейтинг@Mail.ru

Поиск