gifts2017

Простые решения

Опубликовал г. Казань Рустем Гумеров (Rustig) в раздел Программирование - Практика программирования

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

Этюд 1. «Не читается штрихкод»

История началась с того, что надо было внедрить «1С:Управление торговлей, 10.3», подобрать и подключить торговое оборудование для небольшого магазина одежды и обуви. На кассу был закуплен проводной ручной сканер (имиджер) QuickScan Lite QW2100, который себя оправдал – автоматически распознает штрихкод при поднесении этикетки, имеет лазерное наведение как у снайперских винтовок. Так как отдельной статьи не будет по поводу моих впечатлений от сканера, позволю себе заметить здесь, что я к нему не смог привыкнуть – у меня два раза считывался штрихкод: если при поднесении этикетки сканер не считывал ШК, я инстинктивно нажимал на кнопку считывания вместо того, чтобы подождать. В результате - дважды считанный штрихкод.

 

Для проведения инвентаризации товаров на складе (который представляет из себя отдельную комнату) и в зале магазина я закупил беспроводной ручной сканер (лазер, Bluetooth, 512K) CipherLab 1562 (фото сверху). Очень интересная «штучка» - меня этот сканер впечатлил с первого теста. Особенно легко было с ним работать после работы с ТСД CipherLab 8000 (фото снизу).

Демонстрация подключенного беспроводного сканера прошла успешно: я ходил по залу, сканировал случайно выбранные этикетки, штрихкод считывался даже из далеких уголков магазина, а в блокноте и в 1С садился штрихкод  или соответствующий товар (в документ Чек ККМ).
Но случилось так, что в течение месяца, пока производился запуск и адаптация программы, уволился продавец. Чтобы его рассчитать, надо было провести инвентаризацию товаров. Хотелось задействовать типовой механизм проведения инвентаризации УТ 10.3, поэтому начали процесс инвентаризации с одноименного документа «Инвентаризация товаров».  При сканировании товара «подряд», натолкнулся на штрихкод «2000000003610», который считывался как «200000000361». А при сканировании штрихкода «2000000003603» распознавалось число «20000000036». В общем, первый ноль в конце штрихкода распознавался как "конец строки".
Столкнувшись впервые с неожиданным поведением системы (программа + оборудование), зачастую тратится много времени на то, чтобы элементарно понять, в чем причина, и заодно решить проблему. Мой поиск ни к чему не привел.

Потерял несколько дней на понимание. Полученные рекомендации взял на заметку,  но воплощать в жизнь не стал, или так: попробовал до первой фатальной ошибки. Сказать, что я получил опыт решения таких проблем, не могу – будет новый сканер с той же проблемой, я все равно буду искать решение «по новой».
Решение вопроса пришло из «ниоткуда». Я рассуждал так, в блокноте штрихкод считывается, а в документе 1С – нет. Значит, сделаю блокнот в 1С.

Использовал для заполнения ПолеТекстовогоДокумента. При считывании штрихкода каретка переходила на новую строку автоматически. После считывания ШК-ов можно обработать их, нажав на кнопку «Обработать». При этом создается документ «Инвентаризация товаров» с заполненными товарами и фактическим количеством. Также можно вернуться к этому документу, выбрав его в соответствующем поле, просканировать товар, после чего нажать «Обработать».
Так как ситуация вышла не типовая, я присутствовал на инвентаризации товаров. Мне было важно увидеть, насколько обработка удобна для проведения инвентаризации. Подтверждаю: удобно! Обработано 1000 товаров за неполных 4 часа, создано 10 документов по каждой группе товаров. При этом следует уточнить технологию: сначала вручную создается документ «Инвентаризация», устанавливается отбор по группе товаров, документ заполняется товарами, сохраняем документ, закрываем. Далее открываем обработку, указываем этот документ в поле «Инвентаризация», начинаем сканировать товар.
Обработка доступна для скачивания. Код настолько прост, что не стоит его обсуждать.

 

Этюд 2. «Наценка по сложной формуле»

Столкнулся с такой задачей: имеется конфигурация «Управление торговлей, 10.3», надо реализовать формулу расчета оптовой цены для наценки 130% и 15%. Цена зависит от закупочной цены и от цены доставки. Доставка зависит от веса товара, от тарифа на кг коробки, от тарифа на кг упаковки, от тарифа на перевозку 1 кг, от курса доллара, от страховки на доставку.
Формула на бумаге выглядит так.

Подчеркнутые двумя линиями коэффициенты являются периодическими. Курс доллара и курс юаня – по определению, периодические. Формула отображает пересчет закупочной цены (в юанях) в рубли с учетом доставки и наценки.  Формула расчета цены доставки представлена в виде функции, потому как не столь важно сейчас показывать вам саму формулу.  
Задача настолько проста – создать периодические регистры сведений на каждый тариф, прописать регистры в алгоритмах получения соответствующих тарифов – что даже не хотелось делать – делать именно так. Интуиция подсказывала, что не нужно создавать новые регистры сведений: а вдруг потом добавится еще один тариф? И что, снова создавать регистр сведений? И так до бесконечности? Надо придумать универсальный механизм. Такой универсальный механизм я увидел в механизме использования валют, курсов валют. Далее можно не писать, скриншот сам за себя скажет.

Далее, можно реализовать алгоритм расчета оптовой цены в документе «Установка цен номенклатуры», используя типовой регистр сведений «КурсыВалют».


Заключение

Я хотел написать легкую статью. Надеюсь, у меня получилось. Если у вас есть подобные истории, напишите, пожалуйста.


Спасибо за внимание! И всего доброго!

Центр автоматизации, ИП Гумеров Р.И. http://готовые-решения-1с.рф/


Скачать файлы

Наименование Файл Версия Размер
Обработка "Инвентаризация товаров" 5
.epf 7,67Kb
04.07.14
5
.epf 7,67Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Александр Капустин (kapustinag) 04.07.14 19:20
(0), насчет Этюда 2,
- "... Задача настолько проста – создать периодические регистры сведений на каждый тариф..." - это мог написать только человек, совсем забывший либо не знающий про наличие механизма типов цен номенклатуры.

- "... Такой универсальный механизм я увидел в механизме использования валют, курсов валют ..." - может быть, более естественно было бы увидеть такой универсальный механизм в механизме типов цен номенклатуры, типов цен номенклатуры контрагентов?
Тогда, если контрагент выставит счет за услуги по доставке, или контрагент или мы сами окажем кому-то услуги по упаковке, то никаких проблем - все документы оформляются совершенно штатным образом.
А в случае показанных на картинке валют, да еще если из разных мест и/или от разных контрагентов тариф доставки будет разный - что, будем еще валюты заводить?
2. Тимофей Шантин (ShantinTD) 04.07.14 23:52
(1) kapustinag, резонное замечание, но суть статьи не в том. Автор показывает, что иногда можно обойтись штатным механизмом лишь немного его развернув. Так сказать - подшлифовать под свои нужды, а не допиливать.
3. Сергей Созинов (Созинов) 07.07.14 15:03
Настолько просто, что даже не понял зачем было писать статью :) Решение проблемы со сканером интересно.
4. г. Казань Рустем Гумеров (Rustig) 07.07.14 15:36
(1) доставка до физлиц, контрагентов нет по задаче, то есть других разрезов учета, кроме как периода не надо,
в целом я пришел к выводу, что если в УТ 10.3 надо будет добавить периодический регистр сведений без дополнительных измерений, то можно воспользоваться регистром "курсы валют", естественно по обстоятельствам и ситуации.

И еще: так как курсы валют есть и в БП 2.0, и в БП 3.0, и в УТ 11 и во многих других конфигурациях, то столкнувшись раз с таким использованием этого "всенародного" регистра, у нас появляется шанс воспользоваться подобным подходом для решения других задач, не внося особых изменений в цф-шник.

(3) все же пример решения неочевиден, поэтому поделиться им стоит. плюс свою дольку удовольствия вы получили, прочитав статью. не так ли? :)
сложно конечно убедить вас что решение не очевидное, когда так подробно о нем написано. но по факту, я задал эту задачку двум разработчикам, они предложили "шаблонное" решение - создать столько регистров, сколько показателей. после этого мне показалось, что об этом стоит написать. попробуйте задать эту задачу своим знакомым 1С-никам. интересна статистика ответов :)
5. anry mc (AnryMc) 08.07.14 21:01
(2) ShantinTD,
Так сказать - подшлифовать под свои нужды, а не допиливать.


А в чём "грань" между подшлифовать и допилить?
6. Александр Гурин (zyx2002) 08.07.14 21:55
1. Решение со сканером интересно, можно использовать, когда несколько человек считают одновременно, а потом свести в один документ.

2. Регистр курсов валют есть во всех типовых конфигурациях, а к примеру реализовать заполнение табличных частей можно и внешними обработками. Тогда получается изменений в конфигурации вообще не будет, а хранение значений будет.
DrAku1a; Rustig; +2 Ответить 1
7. г. Казань Рустем Гумеров (Rustig) 08.07.14 22:19
(6) Вы молодец! Сильно порадовали меня! Вы сделали над собой усилие и задумались дальше - и пришли к хорошим идеям.
8. Евгений Чернявский (otrazhenie) 22.07.14 15:04
а у меня маленький Чифер так и не завелся под УТ......