PDA

Просмотр полной версии : Очень нужна помощь в программировании!



StefanRal0618
14.06.2016, 22:54
1.Имеется вот такая вот процедура. В справочнике ИнформационныеКарты ( это часть кода )
2.Имеется переменная " КодКарты ", которая является реквизитом у некоего справочника.
3.В режиме предприятия она естественно имеет поле Код Карты, которое задаётся в ручную.
4.Предприятие 8.3. Розница 2.2.2.0

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



Процедура ПередЗаписью(Отказ)


Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;

Если ВидКарты = Перечисления.ВидыИнформац� �онныхКарт.Штриховая Тогда
КодКарты = ("");
КонецЕсли;

Если ТипЗнч(ВладелецКарты) = Тип("СправочникСсылка.Контраге� �ты")
ИЛИ ТипКарты = Перечисления.ТипыИнформац� �онныхКарт.Регистрационная Тогда
ДатаСледующегоОпроса = Дата("00010101");

КонецЕсли;
КонецПроцедуры

avm3110
15.06.2016, 08:59
Ybxtuj yt gjyznyj


1.В справочнике ИнформационныеКарты ( это часть кода )
2.Имеется переменная " КодКарты ", которая является реквизитом у некоего справочника.

Так код карты это реквизит какого-то справочника или же это реквизит справочника "ИнформационныеКарты"?




- поле Код Карты, которое задаётся в ручную.
- Вопрос, как сделать, чтобы эта переменная при каждой новой записи автоматически выдавала
новое значение. А величина приращения была единицей?

Так Код карты задается вручную или же должен задаваться системой?

P.S. Заведи константу КодКарты в которой будет "последний занятый номер" и при записи номер карты бери из константы плюс один и записывай в константу новый номер.

StefanRal0618
15.06.2016, 16:34
1. Это реквизит "ИнформационныеКарты".
2. Должен задаваться автоматически при создании новой карты.

avm3110
15.06.2016, 16:51
Должен задаваться автоматически при создании новой карты.
В модуле объекта есть обработчик события "ПриУстановкеНовогоКода"

Вот в нём обращайтесь к константе, чтобы получить следующий номер для новой карты и изменить саму константу

StefanRal0618
16.06.2016, 01:24
Большое спасибо! Очень помогли. В общем и целом я разобрался.

Но кое-что всё-же не фурычит, а именно константа не увеличивается. В связи с этим последний вопрос.


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

Процедура ПриУстановкеНовогоКода(Ст� �ндартнаяОбработка, Префикс)
// Вставить содержимое обработчика.

КодКарты = ПолучитьПрефиксНомера();

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

Функция ПолучитьПрефиксНомера() Экспорт

Возврат Константы. КодКарты.Получить();

avm3110
16.06.2016, 08:49
его здесь не хватает, чтобы константа при создании новой записи увеличивалась на единицу?
Хм-м-м.. Ну не знаю..:confused: На мой взгляд тут явно, кроме функции "получить" номер из константы, не хватает процедуры "установить" в константу новый номер (увеличенный на единицу).

или я не прав?:blush:

StefanRal0618
16.06.2016, 15:47
Боюсь показаться дураком, но с 1с я познакомился совсем недавно и то по острой необходимости. Ибо кроме меня заняться больше некому. С обработчиками я не очень понимаю как работать.


Процедура ПриУстановкеНовогоКода(Ст� �ндартнаяОбработка, Префикс)
// Вставить содержимое обработчика.

КодКарты = ПолучитьПрефиксНомера();

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


Функция ПолучитьПрефиксНомера() Экспорт

Возврат Константы. КодКарты.Получить();

КонецФункции



Процедура УстановитьНовыйНомер();

Константы.КодКарты.Установ ить();

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

Процедура как я понимаю должна быть такая. Однако что в ней сделать, чтобы константа с каждой записью брала предыдущее значение и прибавляла единицу ума не приложу. Там цикл нужен или что?

avm3110
16.06.2016, 16:03
Процедура как я понимаю должна быть такая. Однако что в ней сделать, чтобы константа с каждой записью брала предыдущее значение и прибавляла единицу ума не приложу. Там цикл нужен или что?

Ну вначале нужно определиться типом данных... Тип НомерКарты и тип Констатна.КодКарты это число или строка?

Если число, тогда

Процедура ПриУстановкеНовогоКода(Ст� �дартнаяОбработка, Префикс)
// Вставить содержимое обработчика.

КодКарты = ПолучитьПрефиксНомера();

УстановитьНовыйНомер (КодКарты + 1);

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


Функция ПолучитьПрефиксНомера() Экспорт

Возврат Константы.КодКарты.Получит ь();

КонецФункции



Процедура УстановитьНовыйНомер(Новы� �Номер);

Константы.КодКарты.Установ ить(НовыйНомер);

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

Ну а если же КодКарты и Константа.КодКарты это например строка, то тогда меняется лишь оператор

УстановитьНовыйНомер (Формат(Число(КодКарты) + 1));

StefanRal0618
16.06.2016, 16:39
Ещё раз большое спасибо!