Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Завершение редактирования строки штрих-кода
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Fabri
Есть такая неудобная вещь в данной конфигурации: Справочники - Номенклатура. Вкладка Штрихкоды - табличное поле - Штрихкоды (РегистрСведенийСписок.Штрихкоды). При добавлении новой строки, в таблице происходит переход в режим редактирования, т.е. активно поле ввода Тип Штрихкода, если сразу сканером добавить штрих-код - естественно он не добавляется, а добавляется только в том случае, если запись уже добавлена и активирована. Чтоб добавить штрихкод номенаклуры, приходится кликать на кнопочку добавить, потом кликать мышкой в любую пустую область таблицы, запись добавляется и стает активной. Это очень не практично и не удобно, особенно есть 1С запущена на планшете или нетбуке с диагональю экрана 10".

Пробовал добавлять код:
Этаформа.ЭлементыФормы.Штрихкод.ЗавершитьРедактированиеСтроки(Ложь); // Ефекта 0


По форумах искал - нигде толкогово ответа. Подскажите как после добавления записи в табличное поле, выйти с режима редактирования и записать новосозданную строку.
Ardi
Активировать программно другое поле.
Fabri
Я сделал чуток иначе, удалил стандартную кнопку добавления строки в таблицу, и добавил свою, с кодом:

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

ТекЗапись.Владелец         = Ссылка;
ТекЗапись.ЕдиницаИзмерения = ЕдиницаХраненияОстатков;
ТекЗапись.ТипШтрихкода     = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
ТекЗапись.Качество         = Справочники.Качество.Новый;
ТекЗапись.Штрихкод         = "";

Попытка
ТекЗапись.Записать();
Исключение
КонецПопытки;

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


Единтсвенный вопрос, как в таблице активизировать данный элемент? или хотя бы элемент с индексом 0 (новая запись всегда первая в списке)
logist
Я бы сделал окно запроса штрихкода, и уже потом запись его в строку. Это проще, чем записывать строку, активизировать поле и вписывать туда.
Fabri
Цитата(logist @ 06.02.13, 15:43) необходимо зарегистрироваться для просмотра ссылки
Я бы сделал окно запроса штрихкода, и уже потом запись его в строку. Это проще, чем записывать строку, активизировать поле и вписывать туда.


А зачем изобретать велосипед? В стандартном модуле работы с шк прописана замена активного элемента. Теперь выводить окно запроса, на нем кнопку добавить - много лишних движений. Проще 1 раз нажать добавить, и засканировать код.

Никто так и не подскажет как активировать строку в табличном поле?
Vofka
Цитата(Fabri @ 06.02.13, 16:29) необходимо зарегистрироваться для просмотра ссылки
Никто так и не подскажет как активировать строку в табличном поле?

Почему не подскажет? Подскажет:
ЭлементыФормы.Штрихкоды.ТекущаяСтрока = Штрихкоды[0];
logist
Цитата(Fabri @ 06.02.13, 16:29) необходимо зарегистрироваться для просмотра ссылки
А зачем изобретать велосипед?

Так это Вы изобретаете велосипед. Я бы просто изменил одну стандартную процедуру, добавив в нее три строчки:
Процедура ШтрихкодыПриНачалеРедактирования(Элемент, НоваяСтрока)

    ТекущаяСтрока = Элемент.ТекущиеДанные;

    Если НоваяСтрока Тогда
        // Вставлено
        НовыйШК = "";
        ВвестиЗначение(НовыйШК);         
        ТекущаяСтрока.Штрихкод = НовыйШК;
        // ---
        
        ТекущаяСтрока.ТипШтрихкода     = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
        ТекущаяСтрока.Владелец         = Ссылка;
        ТекущаяСтрока.ЕдиницаИзмерения = ЕдиницаХраненияОстатков;
        ТекущаяСтрока.Качество         = Справочники.Качество.Новый;
    КонецЕсли;

КонецПроцедуры // ШтрихкодыПриНачалеРедактирования()
Fabri
Цитата(logist @ 06.02.13, 18:09) необходимо зарегистрироваться для просмотра ссылки
Так это Вы изобретаете велосипед. Я бы просто изменил одну стандартную процедуру, добавив в нее три строчки:
Процедура ШтрихкодыПриНачалеРедактирования(Элемент, НоваяСтрока)

    ТекущаяСтрока = Элемент.ТекущиеДанные;

    Если НоваяСтрока Тогда
        // Вставлено
        НовыйШК = "";
        ВвестиЗначение(НовыйШК);         
        ТекущаяСтрока.Штрихкод = НовыйШК;
        // ---
        
        ТекущаяСтрока.ТипШтрихкода     = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
        ТекущаяСтрока.Владелец         = Ссылка;
        ТекущаяСтрока.ЕдиницаИзмерения = ЕдиницаХраненияОстатков;
        ТекущаяСтрока.Качество         = Справочники.Качество.Новый;
    КонецЕсли;

КонецПроцедуры // ШтрихкодыПриНачалеРедактирования()


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

Можно в принципе сделать проще, добавить к справочнику простую форму с написью "Просканируйте штрихкод", и в обработчике получившего новый штрих код, проверять открыта ли данная форма, если да то добавить новую запись, если нет, то изменить текущую активную запись.
Но все же хочется как-то попроще сделать.

Установкой ЭтаФорма.ЭлементыФормы.Штрихкоды.ТекущаяСтрока - некатит, так как выскакивает ошибки - не обнаружен ключ записи. В отладчике видно - ЭтаФорма.ЭлементыФормы.Штрихкоды.ТекущаяСтрока - это тип РегистрСведенийКлючЗаписи.Штрихкоды.

Короче как решить незнаю пока, буду игратся. Если у кого-то будут идеи по решению данного вопроса, буду благодарен.
Batchir
Цитата(Fabri @ 06.02.13, 13:12) необходимо зарегистрироваться для просмотра ссылки
если сразу сканером добавить штрих-код - естественно он не добавляется, а добавляется только в том случае, если запись уже добавлена и активирована

Так в чем дело? Обработчик не найденного ШК уже присутствует в форме элемента номенклатуры.
Сканируете штрихкод в карточке номенклатуры:
1. если он не найден в БД, то вопрос "Добавить сосканированный штрихкод?" (ДаНет)
Если да, то добавляете программно в регистр запись.
2. если он не найден в БД и при этом активирована строка с уже имеющимся штрихкодом, то вопрос "заменить выбранный штрихкод?"
Если да, то изменяете.
Fabri
Batchir - Спасибо большое, самое оптимальное решение.

Дописал код, все отлично работает. Почему не додумался раньше до такого решения - незнаю, видимо идеология сыргала свою роль, что нужно сначала кнопочку добавить, а потом уже добавлять и не иначе smile.gif

Если кому-то пригодится - могу выложить сюда код с комментариями.
Vofka
Цитата(Fabri @ 07.02.13, 11:30) необходимо зарегистрироваться для просмотра ссылки
Если кому-то пригодится - могу выложить сюда код с комментариями.

Выложите конечно. Если даже сейчас никому не надо, может быть кто-то в будущем посмотрит на него и вспомнит вас добрым словом smile.gif .

Fabri, перенес ваше сообщение с описанием решения в необходимо зарегистрироваться для просмотра ссылки. Даже нажал палец wink.gif .
Fabri
Цитата(Vofka @ 07.02.13, 13:04) необходимо зарегистрироваться для просмотра ссылки
Fabri, перенес ваше сообщение с описанием решения в отдельную тему. Даже нажал палец .


Спасибо, ещё подскажите, в какую ветку форума выставлять свои обработки? Выставлю обработку для добавления фото номенклатуры, переименовав имя файла на номер кода номенклатуры (в написании которой, к стати, тоже помогали мне тут на форуме).
Vofka
Fabri, если это по 8 - тогда необходимо зарегистрироваться для просмотра ссылки (предварительно ознакомившись с необходимо зарегистрироваться для просмотра ссылки wink.gif ). И если у вас ещё подобного рода вопросы будут возникать - задайте их по ЛС кому-то из администрации, чтоб не разводить офтоп в темматических ветках.
zetovich
Сканер подключен через com (всегда выбираю такой, что и ВАм советую). 100% утверждать не буду - но вроде все работает без всяких дополнительных телодвижений. Т.е. открыли закладку, поднесли к сканеру и добавляется запись в регистр сама.
Batchir
Цитата(zetovich @ 09.02.13, 23:05) необходимо зарегистрироваться для просмотра ссылки
Сканер подключен через com (всегда выбираю такой, что и ВАм советую). 100% утверждать не буду - но вроде все работает без всяких дополнительных телодвижений. Т.е. открыли закладку, поднесли к сканеру и добавляется запись в регистр сама.


Ну у Fabri я так понимаю тоже либо ком, либо с эмуляцией, либо с дровами раз вызывается обработка внешнего события. А вот сама запись вроде не добавляется, точнее добавляется только если активировна уже имеющаяся строка.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.