Имя: Пароль:
1C
1С v8
Вопрос по установке поля код в справочнике
0 Rassvetniy
 
13.07.16
02:22
Приветствую. Есть справочник товара, поле код число, свойство автономерация включено. Работает по принципу максимум +1. Если есть коды 1,2, 100 то следующий добавит 101. А как сделать чтоб не 101 было а 3? В каком месте можно переделать стандартное автоприсваивание кода?
1 PR
 
13.07.16
02:36
приустановкеновогокода
2 Rassvetniy
 
13.07.16
02:48
PR, это обработка события в модуле объекта насколько понимаю?
процедура приУстановкеНовогоКода(Ложь)

конецпроцедуры

а что дальше в этой процедуре писать что то не нашел пока что...
3 PR
 
13.07.16
02:49
(2) Вообще, код туда пишется. Может тебе с чего попроще начать? С чтения ЖКК что ли.
4 Rassvetniy
 
13.07.16
03:44
данный код эффекта не дает:
Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)
    // Вставить содержимое обработчика.
    СтандартнаяОбработка = Ложь;
    Код = 500;
КонецПроцедуры
что то нигде не пишут как обращаться в модуле объекта к текущему элементу который и вызвал событие, во всяком случае пока не нашел
5 PR
 
13.07.16
03:46
(4) Объект.Код

>>что то нигде не пишут как обращаться в модуле объекта к текущему элементу который и вызвал событие
Не гони

>>во всяком случае пока не нашел
А вот это уже больше похоже на правду
6 impulse9
 
13.07.16
04:11
Глобальный контекст (Global context)
ОбновитьНумерациюОбъектов (RefreshObjectsNumbering)
Синтаксис:

ОбновитьНумерациюОбъектов(<Метаданные>)
Параметры:

<Метаданные> (необязательный)

Тип: Массив; ОбъектМетаданных: Куб, ОбъектМетаданных: ТаблицаИзмерения, ОбъектМетаданных: ВнешнийИсточникДанных, ОбъектМетаданных: Поле, ОбъектМетаданных: Таблица, ОбъектМетаданных: HTTPСервис, ОбъектМетаданных: Функция, ОбъектМетаданных: ШаблонURLHTTPСервиса, ОбъектМетаданных: ОпределяемыйТип, ОбъектМетаданных: ПланВидовРасчета, ОбъектМетаданных: ПланСчетов, ОбъектМетаданных: БизнесПроцесс, ОбъектМетаданных: Документ, ОбъектМетаданных: ЖурналДокументов, ОбъектМетаданных: Задача, ОбъектМетаданных: ПланВидовХарактеристик, ОбъектМетаданных: ПланОбмена, ОбъектМетаданных: РегистрБухгалтерии, ОбъектМетаданных: РегистрНакопления, ОбъектМетаданных: РегистрРасчета, ОбъектМетаданных: РегистрСведений, ОбъектМетаданных: Справочник, ОбъектМетаданных: ФункциональнаяОпция, ОбъектМетаданных: ПараметрФункциональныхОпций, ОбъектМетаданных: Команда, ОбъектМетаданных: ГруппаКоманд, ОбъектМетаданных: ХранилищеНастроек, ОбъектМетаданных: ОбщаяКоманда, ОбъектМетаданных: WebСервис, ОбъектМетаданных: WSСсылка, ОбъектМетаданных: Интерфейс, ОбъектМетаданных: Константа, ОбъектМетаданных: КритерийОтбора, ОбъектМетаданных: Нумератор, ОбъектМетаданных: Обработка, ОбъектМетаданных: ОбщаяКартинка, ОбъектМетаданных: Макет, ОбъектМетаданных: ОбщийМодуль, ОбъектМетаданных: Форма , ОбъектМетаданных: Стиль, ОбъектМетаданных: Язык, ОбъектМетаданных: Отчет, ОбъектМетаданных: ПакетXDTO, ОбъектМетаданных: ПараметрСеанса, ОбъектМетаданных: Перечисление, ОбъектМетаданных: ПодпискаНаСобытие, ОбъектМетаданных: Подсистема, ОбъектМетаданных: Последовательность, ОбъектМетаданных: РегламентноеЗадание, ОбъектМетаданных: Роль, ОбъектМетаданных: ЭлементСтиля, ОбъектМетаданных: Графа, ОбъектМетаданных: Измерение, ОбъектМетаданных: ЗначениеПеречисления, ОбъектМетаданных: ОперацияWebСервиса, ОбъектМетаданных: Перерасчет, ОбъектМетаданных: ПараметрWebСервиса, ОбъектМетаданных: ПризнакУчетаПланаСчетов, ОбъектМетаданных: ПризнакУчетаСубконтоПланаСчетов, ОбъектМетаданных: Реквизит, ОбъектМетаданных: ТабличнаяЧасть, ОбъектМетаданных: Ресурс, ОбъектМетаданных: РеквизитАдресации, ОбъектМетаданных: ОбщийРеквизит.
Объект метаданного или массив объектов метаданных, для объектов которого будет выполнено обновление. Если значение параметра не указано, то обновление будет выполнено для всех типов объектов.
Описание:

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

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
--------------------------------------------------------------------------------
7 PR
 
13.07.16
04:13
(6) И че и че?
8 impulse9
 
13.07.16
04:53
(7) в ИТС написано что надо ручками исправить 100 на 3, тогда все пойдет нормально.
http://its.1c.ru/db/metod8dev/content/1550/hdoc

А если прямо надо 1,2,100,3,4, то надо автонумерацию отключать у справочника, и в модуле справочника в ПриЗаписи() или ПриУстановкеНовогоКода() делать поиск нужного номера
9 PR
 
13.07.16
05:47
(8) Я смотрю, чтение не твое.
В (0) написано "поле код число".
10 Rassvetniy
 
15.07.16
00:04
пока не дошли руки читать документацию а тут подсказок и не появилось ))
11 Звездец
 
15.07.16
00:07
(10) та действительно, читать докуметацию. Ишь чего надумали
12 Rassvetniy
 
15.07.16
02:43
единственно что вычитал в документации это обратится к объекту через ЭтотОбъект:
Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)
    // Вставить содержимое обработчика.

    СтандартнаяОбработка = Ложь;
    ЭтотОбъект.Код = 500;

КонецПроцедуры

эффект 0, это событие вообще по ходу не отрабатывает ни на сообщение ни на точку останова 0 реакции
13 Rassvetniy
 
15.07.16
03:11
вру событие обрабатывается если добавить ЭтотОбъект.Записать() и установить отказ на запись то указывает на строку в событии пока эксперименты этим ограничиваются )
14 PR
 
15.07.16
03:18
Бросай это неблагодарное дело, не твое это, видимо
15 Rassvetniy
 
24.07.16
14:13
если кто столкнется с тем же, вот решение вопроса который тут задавал:
Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)
    // Вставить содержимое обработчика.
    СтандартнаяОбработка = Ложь;
         Рез = 1000000;
         Кл = 0;
        Пока Кл < Рез Цикл

    Запрос = Новый Запрос;
        Запрос.Текст = "выбрать максимум(код) как Рез, количество(код) как Кл из справочник.номенклатура где код<&пар ";    
        Запрос.УстановитьПараметр("пар", Рез);

      РезультатЗапроса = Запрос.Выполнить();
      ВыборкаЗаписи = РезультатЗапроса.Выбрать();
     ВыборкаЗаписи.Следующий();        
    Рез =  ВыборкаЗаписи.Рез;
    Кл = ВыборкаЗаписи.Кл;
КонецЦикла;
ЭтотОбъект.Код = Рез+1;
            КонецПроцедуры
в идеале поиск конечно нужно заменить на бинарный, иначе надто много запросов

запутаться можно в том, что ПриУстановкеНовогоКода работает только если поле код пустое и стоит автонумерация, если поле код уже заполнено нужно использовать процедуру ПередЗаписью
16 kosts
 
24.07.16
14:22
Расстрелять за запрос в цикле. И вызывать в передзаписью не нужно иначе нельзя будет вручную ввести свой код, всегда будет меняться.
17 Горогуля
 
24.07.16
14:35
(16) погоди-ка с расстрелом ;)
(15) ну и зачем тут цикл?
18 Aleksey
 
24.07.16
14:52
(16) Если расстреливать тех кто пишет запрос в цикле, то кто тогда типовые от 1С писать будут? Ведь типовые - это кладезь болтов на стандарты и правила. Их там так густо набито...
19 kosts
 
24.07.16
15:34
(18) Не спорю, в некоторых сложных случаях, действительно лучше и проще циклом сделать.