Модификация конфигурации кассового программного обеспечения

Совершенствование кассового программного обеспечения (ПО), добавление новых функциональных возможностей, позволяющих сохранить качественные характеристики, предъявляемые к торговому ПО. Функционал различных маркетинговых акций и дисконтных программ.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 17.03.2013
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

5.1.5 Вывод

Помещение в отделе разработки отраслевых решений на котором была проведена практика соответствует нормам, обеспечивающим комфортную работу. В отделе осуществляет трудовую деятельность 25 человек при площади помещения в 125 м2, высота подвесных потолков 3,4 м. Площадь в пересчёте на одного человека будет составлять 5 м2, а объём 17 м3. Но так как часть сотрудников работает удалённо, то эти параметры существенно отличаются в большую сторону и соответствуют нормам. Помещение оборудовано системами отопления, вентиляции и кондиционирования воздуха для обеспечения оптимального микроклимата. Также соблюдены меры противопожарной безопасности и электробезопасности. Электрические розетки снабжены защитным заземлением, также в помещении имеются огнетушители и установлена система автоматической пожарной сигнализации. Уровень шума на рабочих местах не превышает предельно допустимый в 50 дБ. В помещении уровень естественной освещённости довольно высокий (2 окна по 5 м длиной и 2 высотой). При этом в помещении имеется искусственное освещение состоящее из 25 светильников с люминесцентными лампами (по 2 лампы в каждом). Светильники располагаются равноудалено в несколько рядов и обеспечивают равномерное освещение на всей площади помещения.

5.2 Экологически безопасная утилизация персональных компьютеров, оргтехники и периферийных устройств

В настоящее время компьютеры и оргтехника есть на всех коммерческих предприятиях, в банках, государственных учреждениях, общественных организациях и практически в каждой квартире. И с каждым годом количество производимой техники возрастает в геометрической прогрессии. При этом за 2-3 года компьютер устаревает морально, а за последующие несколько лет он устаревает и физически. Поэтому с каждым годом вопрос утилизации устаревшей или пришедшей в негодность компьютерной техники встаёт всё острее. По мнению экологов, в течение ближайших лет устаревшее компьютерное оборудование станет основным видом твёрдого мусора, загрязняющим нашу планету. По данным агентства по защите окружающей среды (EPA), на долю потребительской электроники, в том числе компьютеров, оргтехники, периферийных устройств, телефонов приходится почти 2% от общего количества городских твёрдых отходов. По оценкам EPA, в период с 1980 по 2007 год было продано 235 млн. т. в данный момент устаревшей электроники. Только лишь 18% от этого числа было сдано на вторичную переработку. Остальное было отправлено на полигоны без какой-либо переработки, что абсолютно недопустимо, т.к. электроника в своём составе содержит такие опасные вещества как ртуть, свинец, мышьяк, бериллий, кадмий, сурьма, медь, никель, а также полибромированный бифенил, которые могут попасть в почву и подземные воды и нанести серьёзный вред здоровью и окружающей среде.

Практически любой компьютер можно переработать и пустить во вторичное использование. При грамотной утилизации около 70-80% отходов техники способны вновь вернуться к нам в том или ином виде. Так на конвейеры переработчиков вторсырья попадают и относительно новые, совершенно исправные аппараты. Это побудило одну из ведущих фирм по производству компьютеров - "Fujitsu-Siemens" - в рамках крупномасштабного эксперимента открыть в Падерборне собственный рециклинговый центр. Поступающие сюда аппараты сортируются на три группы в зависимости от возраста и состояния. На третьей ступени переработки происходит извлечение ценных материалов в качестве вторсырья. На второй, извлекаются отдельные компоненты - дисководы, модули памяти и так далее - в качестве запчастей. И, наконец, существует высшая ступень - аппарат целиком приводится в товарный вид и снова поступает в продажу [8].

Для продажи таких поддержанных компьютеров и запчастей при рециклинговом центре имеется свой магазин. По статистике 90% компьютеров, поступающих в центр, обретают в той или иной форме вторую жизнь. Таким образом, рециклинг может иметь смысл не только с экологической, но и с экономической точки зрения - при условии, что фирма-переработчик знает, что получает [8].

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

Во-первых, пока электроника (устаревшая и уже неиспользуемая) стоит на балансе предприятия, с неё необходимо платить налог на имущество. Поэтому необходимо провести её списание.

Во-вторых, в компьютерах имеется некоторое количество цветных и драгоценных металлов, таких как серебро, золото, платина. В связи с этим все организации должны вести их учёт. За отсутствие такого учёта основных средств, к которым относятся компьютеры, можно поплатиться штрафом. Любая организация обязана документально оформлять поступление, движение, инвентаризацию и выбытие драгметаллов, содержащихся в составных частях офисной техники. На это указывают сразу два документа - Федеральный закон от 26.03.98 № 41 ФЗ "О драгоценных металлах и драгоценных камнях" (п.2 ст. 20) и Инструкция по учёту драгметаллов разработанная в Минфине: "…Организации обязаны вести учёт драгоценных металлов и драгоценных камней во всех видах и состояниях, включая драгоценные металлы и драгоценные камни, входящие в состав основных и оборотных средств, покупных комплектующих деталей…" (пункт 6.3 Инструкции о порядке учёта и хранения драгоценных и драгоценных камней, продукции из них и ведения отчётности при их производстве, использовании и обращении, утверждённой приказом Минфина России от 29.08.01 №68н).

В-третьих утилизация компьютеров и другой оргтехники регламентируется "Методикой проведения работ по комплексной утилизации вторичных драгоценных металлов из отработанных средств вычислительной техники", утверждённой Государственным Комитетом РФ по телекоммуникациям 19 октября 1999 года.

В этом документе определена схема, по которой следует проводить утилизацию данного вида оборудования:

Произвести списание техники с баланса организации.

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

Передать оборудование, подлежащее утилизации, компании, которая имеет все необходимые разрешительные документы, а именно:

- лицензию на деятельность по сбору, использованию, обезвреживанию, транспортировке, размещению опасных отходов, выданную Ростехнадзором с указанием таких типов отходов как "Компьютерная техника, вышедшая из употребления" и "Отходы оргтехники";

- свидетельство о постановке на специальный учёт Пробирной палаты.

- получить полный пакет документов о проведении легальной утилизации.

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

Процесс утилизации можно разделить на несколько этапов:

На первом этапе проводится ручная разборка продукции на отдельные компоненты с выделением опасных элементов и материалов, пригодных для рециклинга. Примером таких опасных отходов являются ртутьсодержащие лампы в мониторах и различная копировальная и множительная техника и др. Известно, что разрушение жидкокристаллического монитора персонального компьютера загрязняет ртутью помещение объёмом 50 м3 до 60 ПДК при допустимом значении ПДК ртути в воздухе равном 0,0003 мг/м3. Такие опасные компоненты помещаются в специальные герметичные контейнеры и направляются на обезвреживание специализированным предприятиям-переработчикам. Компоненты, из которых из которых можно извлекать драгметаллы (например, золото из печатных плат) извлекаются и помещаются в пластиковые контейнеры или полиэтиленовые пакеты. Эти компоненты затем передаются в Госфонд. В дальнейшем отделяются детали, пригодные для дальнейшего рециклинга (полимеры, металл и др.).

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

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

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

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

5.3 Энергосберегающие технологии использования CBT

Несколько крупных компаний, в том числе Google, Dell, Intel, Microsoft и HP, создали экологическую организацию Climate Savers Smart Computing Initiative (CSSCI). Согласно статистике, половину электроэнергии средний компьютер тратит впустую. CSSCI предлагает поработать над энергосберегающими технологиями и сократить потребление электричества компьютерами вдвое. Речь при этом идет не только о пользе для окружающей среды, но и об ощутимой экономии - до 5,5 млрд. долларов. В настоящее время по темпам роста энергопотребления ІТ-сфера уступает только транспортной. Компания Cisco заявила, что на ІТ-сектор приходится 2% от всемирного объема выбросов углекислого газа - столько же, сколько на все самолеты. Таким образом, сохранение энергии - важное требование для сегодняшней офисной техники. В 1992 г. агентством по защите окружающей среды (Environmental Protection Agency) США и изготовителями компьютеров была создана программа Energy Star для содействия эффективности использования энергии и снижения загрязнения воздуха благодаря использованию в домах, организациях и на предприятиях оборудования, которое более эффективно использует энергию. Данный стандарт был предназначен для продвижения решений с низким энергопотреблением. Первыми устройствами, которые соответствовали Energy Star, стали компьютеры и мониторы, однако в настоящее время логотип сертификации соответствия Energy Star можно увидеть и на другой офисной технике (рисунок 5.1). Техника, соответствующая требованиям Energy Star, потребляет энергии на 30-75% меньше, чем традиционная техника аналогичного класса. При этом устройства, получившие квалификацию Energy Star, выполняют все те же функции, что и стандартные. С помощью же опции сохранения мощности и возможности двусторонней печати принтеры и копировальные аппараты, получившие квалификацию Energy Star, дают возможность значительно снизить расходы на электроэнергию.

Рисунок 5.1 - Логотип Energy Star

На сегодня около четверти всех продаваемых компьютеров имеют логотип Energy Star. Средства управления питанием позволяют снизить энергопотребление путем отключения ряда устройств компьютера без полного его отключения. Паузы (периоды времени до отключения этих компонентов) можно активизировать, настроить или отключить с помощью соответствующих программ настройки компьютера.

5.3.1 Требования энергосбережения к мониторам

Сам по себе монитор потребляет немного энергии, но количество используемых мониторов растет, а значит, увеличиваются и суммарные энергозатраты. При работе мониторов происходит выделение тепла, что в больших учреждениях ведет к заметному локальному нагреванию воздуха. Существует ряд нормативных документов в области экономии энергии. Среди них - разработанный в США стандарт Energy Star и шведский NUTEK. Эти стандарты устанавливают максимальные уровни мощности, потребляемой монитором в режиме экономии энергии. Система управления энергопотреблением монитора, основанная на спецификации Energy Star, позволяет снизить энергопотребление системы в режиме бездействия на 60-80% по сравнению с тем, сколько монитор потребляет энергии при работе в высоком разрешении и при большой глубине представления цвета [8].

Управление энергопотреблением происходит автоматически после включения режима энергосбережения. При этом можно снизить уровень потребления энергии вплоть до 2 Вт в режиме полного отключения, хотя при работе монитор потребляет в среднем 80-90 Вт. В режиме "Standby" (режим временного переключения в режим ожидания) монитор потребляет менее 4 Вт. Кроме экономии энергии, использование режимов энергосбережения позволяет снизить тепловое излучение от работающего монитора. Выход из режима ожидания происходит при нажатии любой клавиши на клавиатуре или движении манипулятора "мышь". DPMS (Display Power Management Signaling) - это стандарт консорциума VESA (рисунок 4.2). DPMS определяет режимы управления энергопотреблением, которые могут быть использованы, когда монитор бездействует. При этом можно выбрать один из трех режимов: "Standby" (кратковременная пауза), "Suspend" (долговременная пауза) и "Off" (полное отключение). Однако использовать эти режимы можно только в том случае, если и компьютер, и видеоадаптер, и операционная система поддерживают спецификацию DPMS, рекомендованную VESA.

Рисунок 5.2 - Логотип VESA

Шведская спецификация NUTEK ("Национальный совет индустриального и технического развития Швеции") требует, чтобы переход монитора в первый режим сохранения энергии ("Standby") происходил автоматически, если мышь или клавиатура не использовались более пяти минут (но менее часа); при этом вернуться в нормальное состояние монитор должен за три секунды. В этом режиме потребляемая мощность должна обязательно быть менее 30 Вт (желательно - менее 15 Вт). Через 70 минут мощность, потребляемая монитором, должна быть обязательно снижена до уровня менее 8 Вт (желательно - до уровня менее 5 Вт); время выхода из этого второго режима ("Off") не определено. Уровни экономного потребления энергии, определенные NUTEK, были включены в аттестационные системы ТСО'92 и ТСО'95.

Благодаря затемнению экрана можно экономить энергию монитора на 20%. Функции управления расходом мощности гарантируют отключение питания долго не используемого монитора. Активировать работу монитора можно нажатием клавиши на клавиатуре или движением мыши. Еще больше сэкономить энергию можно полным отключением монитора от электросети.

5.3.2 Требования энергосбережения к принтерам, сканерам и копировальным аппаратам

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

В режиме ожидания лампа сканера под стеклом экспонирования автоматически отключается, что позволяет экономить энергию и увеличить срок службы лампы. При сканировании лампа автоматически включается через определенное время, необходимое для ее разогрева.

У сканеров также можно указать период времени, в течение которого лампа остается включенной после завершения сканирования. У всех периферийных устройств в соответствии со спецификацией Energy Star также предусмотрено несколько режимов энергосбережения. В таблице 5.3 приведены параметры энергосбережения для лазерных принтеров HP LaserJet 6Р и 6MP [8].

Таблица 5.3 Энергосберегающие характеристики принтеров HP LaserJet 6Р и 6MP

Режимы

Значения

В процессе печати

175 Вт (среднее)

В режиме ожидания (мгновенная экономия энергии)

8 Вт

В режиме ожидания

8 Вт

5.3.3 Требования энергосбережения к жестким дискам, BIOS и блокам питания

Система энергосбережения - это набор протоколов, используемых в ПК и позволяющих уменьшить энергопотребление компьютера, особенно когда ПК находится в режиме ожидания. В накопителе на жестких дисках все время в течение его активной работы вращается шпиндель. Это - основной потребитель энергии в винчестере. Поэтому многие схемы энергосбережения включают в себя остановку шпиндельного двигателя, если в течение некоторого времени компьютер находится в режиме ожидания, и повторную раскрутку шпиндельного двигателя при возобновлении работы с компьютером. [8]

Самое очевидное назначение системы энергосбережения BIOS - перевод системы в один из трех режимов энергосбережения: "Doze" (снижение частоты CPU), "Standby" (отключение дисков и видео) или "Suspend" (понижение частоты и выключение всех устройств) в соответствии со счетчиками отсутствия активности (таймерами). При этом предполагается слежение за активностью тех или иных устройств и подсчет секунд отсутствия активности, после чего включается один из режимов энергосбережения.

Важная характеристика блока питания - его КПД, т.е. процентное отношение отдаваемой мощности к мощности, получаемой из сети. Значение КПД при номинальной нагрузке для компьютерных блоков питания составляет обычно около 80% - можно считать, что остальные 20% идут на нагрев компонентов блока питания. Многие современные блоки питания, соответствующие требованиям Energy Star 4.0, имеют КПД не ниже 80% при любой нагрузке выше 20%. При низкой же нагрузке КПД падает примерно до 65%: это означает, что если вы используете в компьютере со скромной конфигурацией мощный блок питания "про запас", то вы не только зря потратили деньги при его покупке, но и постоянно приплачиваете лишнее за электричество.

Жесткие диски будущего будут тихими, быстрыми, энергосберегающими и устойчивыми к механическим воздействиям благодаря отсутствию в них движущихся частей. Сегодня такие накопители называют "твердотельными дисками" - Solid State Disk (SSD). По мнению специалистов компании Samsung, дни накопителей на жестких магнитных дисках уже сочтены. Диски же SSD, представляющие собой, по сути, модули быстродействующей flash-памяти, обеспечивают большую скорость передачи данных, намного меньшее энергопотребление отсутствие шума и минимум тепловыделения. Например, когда данные не передаются, энергопотребление накопителя SSD мизерное - всего 0,03 Вт, а во время работы оно составляет около 0,9 Вт.

5.3.4 Технология энергосбережения для процессоров

Одним из основных потребителей энергии в системном блоке является процессор. Постоянный рост тактовой частоты и соответственно количества полупроводниковых элементов в схеме процессора приводит к увеличению его энергопотребления. Однако при выполнении определенного рода работ или при простое необходимости в работе процессора на полную мощность нет. В связи с этим была разработана и внедрена технология энергосбережения. Cool'n'Quiet - технология понижения скорости и энергопотребления центрального процессора. Ее действие заключается в снижении частоты и напряжения при неполной загруженности ЦП. Цель данной технологии - снизить общее энергопотребление и тепловыделение, позволяя тем самым уменьшить скорость вращения вентилятора (отсюда и название - "Cool'n'Quiet"). В ходе работы операционная система следит за загрузкой процессора, и если она не максимальна, то делает попытку перевести процессор в одно из младших состояний. Для этого система обращается к драйверу процессора. Этот драйвер программирует регистры процессора, запуская процедуру перехода в запрошенное состояние. Снизив частоту и напряжение, процессор будет потреблять меньше энергии (примерно в два-три раза), а значит, будет и меньше нагреваться. Шум тоже снизится, если кулер имеет термоконтроль. Тем самым будет достигнута цель - уменьшить температуру и шум от системы. Если же операционная система обнаруживает увеличение нагрузки, то она снова запрашивает изменение состояния процессора, но на этот раз - в сторону увеличения его частоты [8].

Заключение

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

Поддержка и сопровождение данного программного продукта говорит о его востребованности и позволяет ПО "Штрих-М: Кассир 5" в полной мере соответствовать реалиям современного рынка, предъявляемым к данному классу программ. При модификации системы были учтены и выполнены все требования, предъявляемые к такому ПО, что позволит сохранить высокую скорость и надёжность работы программы.

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

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

В организационно-экономическом разделе была рассчитана стоимость разработки системы в целом и стоимость разработки функционала подарочных сертификатов, определена трудоемкость на каждом этапе разработки, проанализирована информация о стоимости внедрения данного ПО и его экономический и социальный эффект.

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

Список используемых источников

1. Радченко М.Г., Хрусталева Е. Ю.1С Предприятие 8.2: Практическое пособие разработчика - М.: ООО "1С: Паблишинг", 2009. - 872 с.

2. Шестакова О.1С Предприятие 8.2: руководство разработчика - изд.82.002.15 - М.: Фирма "1С", 2011.

3. Шестакова О.1С Предприятие 8.2: руководство администратора - изд.82.003.15 - М.: Фирма "1С", 2011 - 297 с.

4. Бабкина О., Конфигурация системы "1С: Предприятие 8" "Штрих-М: КАССИР v.5.0. Руководство пользователя - М.: фирма "Штрих-М" - 2011 - 283 с.

5. Бронникова Т.С., Маркетинг. Теория, методика, практика - изд. "КноРус", 2012 - 208 с.

6. Швальбе Х., переводчики Гутник В., Гавриш С., Грабовский С., Аржанова Е. Практика маркетинга для малых и средних предприятий, букинистическое издание - изд. "Республика", 1995 - 317 с.

7. Парамонова Т.Н., Красюк И.Н., Конкурентоспособность предприятия розничной торговли - изд. "КноРус", 2010 - 120 с.

8. Логинов М.Д., Логинова Т.А., Техническое обслуживание средств вычислительной техники: учебное пособие - изд. "Бином". Лаборатория знаний, 2010 - 319 с.

9. ГОСТ 12.2.032-78. Система стандартов безопасности труда. Рабочее место при выполнении работ сидя. Общие эргономические требования.

10. ГОСТ 21.889-76 ССБТ. Система "человек машина" Кресло человека-оператора. Общие эргономические требования.

11. Санитарные правила и нормы СанПиН 2.2.4.548-96 "Гигиенические требования к микроклимату производственных помещений".

12. ГОСТ 12.1.003-83. Допустимые уровни шумов в производственных помещениях.

13. Строительные нормы и правила. Часть II. Нормы проектирования. Глава 4. Естественное и искусственное освещение СНиП II-4-79.

14. СНиП II-12-77. Защита от шума.

15. Интернет-ресурсы:

16. Ресурсы сайта фирмы "1С": http://www.v8.1c.ru

17. Ресурсы сайта фирмы "Штрих-М": http://www.shtrih-m.ru/

18. Ресурсы свободной энциклопедии Википедия: http://ru. wikipedia.org

19. http://deon.ru/uchityvaem-podarochnye-sertifikaty/

20. http://loyaltymarketing.ru/articles/2006/12/11/борьба-за-клиента-программы-лояльности

21. http://www.business-magazine.ru/mech_new/marketing_n/pub286246

Приложения

Приложение А

(обязательное)

Исходный код процедур функционала подарочных сертификатов

Обработка "Кассир5_DataAccess"

Функция ВыбратьСертификат (Знач ВладКод, Знач ЗначениеРеквизита = Неопределено, Знач НаименованиеРеквизита = Неопределено) Экспорт

Запрос = Новый Запрос;

Запрос. Текст = "ВЫБРАТЬ

Сертификаты. Код,

Сертификаты. Наименование КАК Наименование,

Сертификаты. СрокГодности,

Сертификаты. Номинал,

Сертификаты. Статус,

Сертификаты. ТекстДляЧека,

Сертификаты. НачалоДействияАкции,

Сертификаты. Владелец. Код,

Сертификаты. Остаток

ИЗ

Справочник. Сертификаты КАК Сертификаты

ГДЕ

Сертификаты. Владелец. Код = &ВладКод";

Если НаименованиеРеквизита <> Неопределено Тогда

Запрос. Текст = Запрос. Текст + " И Сертификаты." + НаименованиеРеквизита + " = &ЗначениеРеквизита";

Запрос. УстановитьПараметр ("ЗначениеРеквизита", ЗначениеРеквизита);

КонецЕсли;

Запрос. Текст = Запрос. Текст + Символы. ПС + "УПОРЯДОЧИТЬ ПО Наименование";

Запрос. УстановитьПараметр ("ВладКод", ВладКод);

Возврат Запрос. Выполнить (). Выгрузить ();

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

Обработка "Регистрация"

Форма "Форма"

Процедура ВнешнееСобытие (Источник, Событие, Данные)

Если АктивнаяФорма <> ЭтаФорма Тогда

Возврат;

КонецЕсли;

Обработчик = Кассир5_DataAccess. ПолучитьОбработчик ("Регистрация. ВнешнееСобытие. ПредОбработка", ЭтаФорма);

Если Обработчик <> Неопределено Тогда

Обработчик. Регистрация_ВнешнееСобытие_ПредОбработка (Источник, Событие, Данные);

Если Обработчик. _Отказ Тогда

Возврат;

КонецЕсли;

КонецЕсли;

Кассир5_DataAccess. НачалоБездействия = ТекущаяДата ();

Если ЗаписыватьСобытия = Истина Тогда

Кассир5_DataAccess. Контекст. ЗаписатьМакрос (Источник, Событие, Данные);

КонецЕсли;

Если СброситьГлавноеПоле Тогда

ОбнулитьГлавноеПоле ();

КонецЕсли;

Если Режим = 0 Или Режим = 1 Или Режим = 2 Или Режим = 3 Тогда

Режим =? (ПечатьПД, 4,5);

ОбновитьЭлементыФормыРегистрации ();

КонецЕсли;

НажатаМышью = Ложь;

Если Источник = "Клавиатура" Тогда

Если Событие = "Нажатие клавиши" Тогда

Стр = РаскладкаКлавиатуры. Найти (Данные, "КодКлавиши");

Если Стр <> Неопределено Тогда

ОбработатьНажатиеКлавиатуры (Стр. Функция);

Иначе

НашелВГК = Ложь;

Если Кассир5_DataAccess. ИспользоватьГорячиеКлавиши Тогда

гк = Справочники. ГорячиеКлавиши. НайтиПоРеквизиту ("КодКлавиши", Данные);

Если Не гк. Пустая () Тогда

НашелВГК = Истина;

ОбработатьГорячуюКлавишу (гк);

КонецЕсли;

КонецЕсли;

КодКнопки = Число (Лев (Данные,

3));

Если (НЕ НашелВГК) И ОбрабатываемаяКлавишаСимвол (КодКнопки) Тогда

// это просто нажата клавиша

Ctrl_Alt = Число (Прав (Данные,

2));

Если Ctrl_Alt > 0 Тогда

// Нажата Ctrl или Alt

Возврат;

Иначе

Символ = Кассир5_DataAccess. Контекст. ПолучитьСимволПоКоду (Число (Лев (Данные,

3)));

ОбработатьНажатиеКлавишиСимвола (Символ);

КонецЕсли;

КонецЕсли;

КонецЕсли;

КонецЕсли;

ИначеЕсли Источник = "Кассир5_DataAccess. Весы Штрих АС POS" Тогда

Кассир5_DataAccess. Весы. EventNumber = Данные;

Весы_ПолучитьМассу (Масса, ПризнакТары);

Кассир5_DataAccess. Весы. DeleteEvent ();

ОбновитьЭлементыФормыРегистрации ();

ИначеЕсли Кассир5_DataAccess. РаботаСоСканером И Источник = "BarCodeScaner" Тогда

Данные = Кассир5_DataAccess. ПолучитьДанныеОтСканера (Данные);

Если (ТипЧека_Продажа И Кассир5_DataAccess. ПравоДоступно ("РегистрацияПоШтрихКодуСканером")) Или (Не ТипЧека_Продажа И Кассир5_DataAccess. ПравоДоступно ("АннулированиеВозвратПоШтрихКодуСканером")) Тогда

Если Кассир5_DataAccess. ДополнятьШтрихкод Тогда

тДанные = ДополнитьСтрокуСлева (Данные, 13, "0");

Иначе

тДанные = Данные;

КонецЕсли;

Кассир5_DataAccess. Контекст. ДобавитьПозициюПоШтрихкоду (тДанные);

КонецЕсли;

// ФормаВыбораСертификата. ВыбратьСоответствиеТоварВидСертификата (Данные,1);

ИначеЕсли Кассир5_DataAccess. РаботаСРидером И Источник = "MagneticStripeCardReader" Тогда

// продажа сертификата

// Ищем такой сертификат по коду в данных

Данные = Кассир5_DataAccess. ПолучитьДанныеОтСканера (Данные);

ТоварСертификат = Кассир5_DataAccess. ПолучитьОбщийОбъект ("Регистрация. ФормаВыбораСертификата"). ВыбратьСоответствиеТоварВидСертификата (Данные,0);

Если (ТоварСертификат <> Неопределено) И (ТоварСертификат. Количество () > 0) Тогда

Если Кассир5_DataAccess. ПолучитьТовар (ТоварСертификат [0]. Код, "Код"). Пустая Тогда

Возврат;

КонецЕсли;

Если Кассир5. ДобавитьПозициюПоКодуАртикулу (ТоварСертификат [0]. Код, "Код", "", - 1) Тогда

Покупка = СоставЧека [СоставЧека. Количество () - 1];

СтрокаСерт = СертификатыПроданные. Добавить ();

СтрокаСерт. НомерСтрокиСоставаЧека = Покупка. НомерСтроки;

СтрокаСерт. Штрихкод = Данные;

Покупка. Штрихкод = Данные;

Если ТоварСертификат [0]. Номинал = 0 Тогда

СтрокаСерт. Номинал = Покупка. ОригЦена;

Иначе

СтрокаСерт. Номинал = ТоварСертификат [0]. Номинал;

КонецЕсли;

СтрокаСерт. ВидСертификата = ТоварСертификат [0]. ВидСертификата;

V = Кассир5_DataAccess. ВыбратьСертификат (СтрокаСерт. ВидСертификата. Код, Данные, "Код");

Если V. Количество () = 0 Тогда

СтрокаСерт. Сертификат = Неопределено;

Иначе

СтрокаСерт. Сертификат = V [0];

КонецЕсли;

Кассир5_DataAccess. ПисатьВремТранзакцию (Покупка. НомерСтроки * 100 + 6, 72, Неопределено, Покупка. Секция, СтрокаСерт. Штрихкод, СтрокаСерт. Номинал, 0, 0, Покупка. НомерЛУККМ, "");

КонецЕсли;

Возврат;

КонецЕсли;

// // // // // // // // // // //

// ВтораяДорожка = Данные;

// Если Лев (ВтораяДорожка, 1) < "0" Или Лев (ВтораяДорожка, 1) > "9" Тогда

// ВтораяДорожка = Сред (ВтораяДорожка, 2, СтрДлина (ВтораяДорожка) - 1);

// КонецЕсли;

// Если Прав (ВтораяДорожка, 1) < "0" Или Прав (ВтораяДорожка, 1) > "9" Тогда

// ВтораяДорожка = Сред (ВтораяДорожка, 1, СтрДлина (ВтораяДорожка) - 1);

// КонецЕсли;

//

// Данные = ВтораяДорожка;

//

// Если Кассир5_DataAccess. ИгнорироватьСрокДействияКарты Тогда

// Поз = Найти (ВтораяДорожка, "=");

// Если Поз > 0 Тогда

// Данные = Лев (ВтораяДорожка, Поз - 1);

// КонецЕсли;

// КонецЕсли;

// // Добавили для вызова фикс скидки по картам

ФиксСкидки = Кассир5_DataAccess. ПолучитьГлобальныйКэшСкидок (). ФиксСкидки;

Для Каждого Выборка Из ФиксСкидки Цикл

Если (НажатаПромИтог И Выборка. НаЧек) Или ( (Не НажатаПромИтог) И Выборка. НаПозицию) Тогда

Если СокрЛП (Выборка. Префикс) <> "" И Лев (Данные, СтрДлина (СокрЛП (Выборка. Префикс))) = СокрЛП (Выборка. Префикс) Тогда

// лВыходРазрешен = Истина;

// Закрыть (Выборка. Ссылка);

// ф_ФиксированнаяСкидка ();

ф_ФиксированнаяСкидка (Выборка. Код);

Возврат;

КонецЕсли;

КонецЕсли;

КонецЦикла;

дКарта = Кассир5_DataAccess. ПолучитьДисконтнуюКарту (Данные);

Если дКарта. Пустая Тогда

Кассир5_DataAccess. Контекст. FnVC_DiscountCard (Данные, 3,7);

Кассир5_DataAccess. ИнтерфОшибка (41);

КонецЕсли;

Если дКарта. КартаЗапрещена Тогда

Кассир5_DataAccess. Контекст. FnVC_DiscountCard (Данные, 3,8);

Конецесли;

ф_ДисконтнаяКарта (СокрЛП (дКарта. Код));

Если ДисконтнаяКарта <> Неопределено Тогда

Кассир5_DataAccess. Контекст. FnVC_DiscountCard (Данные, 3, 0);

КонецЕсли;

ИначеЕсли Источник = "Мышь" Тогда

Поз1 = Найти (Данные, " (");

Поз2 = Найти (Данные, "; ");

ид = Сред (Данные, 1, Поз1 - 1);

// ЭтаФорма. ТекущийЭлемент = ЭтаФорма. ЭлементыФормы. СоставЧека;

Если Не СобытиеМышиПредназначеноФорме (ид, ИД_Окна) Тогда

Возврат;

КонецЕсли;

мКоордината_X = Число (Сред (Данные, Поз1 + 1, Поз2 - Поз1 - 1));

мКоордината_Y = Число (Сред (Данные, Поз2 + 1, СтрДлина (Данные) - Поз2 - 1));

кн = НайтиЭлеменПоКоординатам (мКоордината_X, мКоордината_Y);

Если кн = Неопределено Тогда

ОтжатьКнопку (Событие);

Возврат;

Иначе

Стр = ЭлементыФормы [кн. Элемент];

Если не Стр. Видимость Тогда

ОтжатьКнопку (Событие);

Возврат;

КонецЕсли;

КонецЕсли;

// Если анимация разрешена, картинки кнопок должны менятья при нажатии,

// и обработка кнопок вызывается на отпускание кнопки мыши. В противном

// случае, обработка вызывается при нажатии кнопки мыши, без перерисовки картинок.

Если Кассир5_DataAccess. РазрешитьАнимациюКнопок Тогда

Если Событие = "WM_LBUTTONDOWN" Тогда

Если Лев (Стр. Имя,

4) = "дкл_" Тогда

НажатаяКнопка = Неопределено;

Если Стр. Доступность Тогда

НажатаяДопКлавиша = Стр;

НажатаяДопКлавиша. Рамка = РамкаВогнутая;

Иначе

Возврат;

КонецЕсли;

Иначе

НажатаяДопКлавиша = Неопределено;

Если кн. Доступность Тогда

НажатаяКнопка = Стр;

НажатаяКнопкаК = кн. Картинка;

// НажатаяКнопкаК. Записать ("c: \1. bmp");

НажатаяКнопкаКНаж = кн. Картинка_н;

// НажатаяКнопкаКНаж. Записать ("c: \2. bmp");

НажатаяКнопка. Картинка = НажатаяКнопкаКНаж;

КонецЕсли;

КонецЕсли;

ИначеЕсли Событие = "WM_LBUTTONUP" Тогда

ОтжатьКнопку (Событие);

Если Стр = Неопределено Тогда

НажатаяКнопка = Неопределено;

НажатаяДопКлавиша = Неопределено;

Возврат;

КонецЕсли;

Если НажатаяКнопка = Стр Тогда

Если кн. Функция = Справочники. РаскладкаКлавиатуры. ПустаяСсылка () Тогда

Возврат;

КонецЕсли;

НажатаМышью = Истина;

ОбработатьНажатиеКлавиатуры (кн. Функция. Функция);

КонецЕсли;

Если НажатаяДопКлавиша = Стр Тогда

НажатиеГК (Стр);

КонецЕсли;

НажатаяКнопка = Неопределено;

НажатаяДопКлавиша = Неопределено;

КонецЕсли;

Иначе // (Не РазрешитьАнимациюКнопок)

Если Лев (Стр. Имя,

4) = "дкл_" Тогда

НажатиеГК (Стр);

Иначе

Если кн. Доступность Тогда

Если кн. Функция = Справочники. РаскладкаКлавиатуры. ПустаяСсылка () Тогда

Возврат;

КонецЕсли;

НажатаМышью = Истина;

ОбработатьНажатиеКлавиатуры (кн. Функция. Функция);

КонецЕсли;

КонецЕсли;

КонецЕсли;

Возврат;

КонецЕсли;

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

Форма "ФормаРасчета"

Процедура ВнешнееСобытие (Источник, Событие, Данные)

Если АктивнаяФорма <> ЭтаФорма Тогда

Возврат;

КонецЕсли;

Кассир5_DataAccess. НачалоБездействия = ТекущаяДата ();

Если ЗаписыватьСобытия = Истина Тогда

Кассир5_DataAccess. Контекст. ЗаписатьМакрос (Источник, Событие, Данные);

КонецЕсли;

Если Источник = "Клавиатура" Тогда

ОбработатьНажатиеКлавиатуры (ОбработатьСобытиеКлавиатуры (ЭтаФорма, Событие, Данные));

ИначеЕсли Источник = "Таймер" Тогда

Если Событие = "Оповещение" Тогда

ОбновлениеОтображения ();

КонецЕсли;

ИначеЕсли Кассир5_DataAccess. РаботаСРидером И Источник = "MagneticStripeCardReader" Тогда

ДобавитьСертификат (Кассир5_DataAccess. ПолучитьОбщийОбъект ("Регистрация. ФормаВыбораСертификата"). ВыбратьСертификат (0, Неопределено, Кассир5_DataAccess. ПолучитьДанныеОтСканера (Данные), Сертификаты));

ИначеЕсли Кассир5_DataAccess. РаботаСоСканером И Источник = "BarCodeScaner" Тогда

ДобавитьСертификат (Кассир5_DataAccess. ПолучитьОбщийОбъект ("Регистрация. ФормаВыбораСертификата"). ВыбратьСертификат (1, Неопределено, Кассир5_DataAccess. ПолучитьДанныеОтСканера (Данные), Сертификаты));

ИначеЕсли Источник = "Мышь" Тогда

ОбработатьНажатиеКлавиатуры (ОбработатьСобытиеМыши (ЭтаФорма, Событие, Данные));

КонецЕсли;

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

Функция ВыбратьСертификат (Тип, ВидСертификата, Данные, лСертификаты) Экспорт

НайденыеСертификаты = Новый ТаблицаЗначений ();

НайденыеСертификаты. Колонки. Добавить ("ВидСертификата");

НайденыеСертификаты. Колонки. Добавить ("Сертификат");

НайденыеСертификаты. Колонки. Добавить ("ВыборИзСписка");

НайденыеСертификаты. Колонки. Добавить ("НомерСертификата");

Если лСертификаты <> Неопределено Тогда

Сертификаты = лСертификаты. Скопировать ();

КонецЕсли;

Если Тип = 3 Тогда

ВидСерт =? (ВидСертификата = Неопределено, ВыбратьВидСертификатаИзСписка (), ВидСертификата);

Если ВидСерт = Неопределено Тогда

Возврат Неопределено;

КонецЕсли;

Если Не ВидСерт. РазрешенВыборИзСписка Тогда

Возврат Неопределено;

КонецЕсли;

Если ПроверитьСрокДействияСертификата (ВидСерт) И ПроверитьВозможностьДобавленияВидаСертификата (ВидСерт) Тогда

ВыборкаСерт = Кассир5_DataAccess. ВыбратьСертификат (ВидСерт. Код, Неопределено, Неопределено);

Стр = НайденыеСертификаты. Добавить ();

Стр. ВидСертификата = ВидСерт;

Стр. Сертификат = Неопределено;

Стр. ВыборИзСписка = (ВыборкаСерт. Количество () > 0);

Стр. НомерСертификата = "";

Иначе

Возврат Неопределено;

КонецЕсли;

Иначе

Если СокрЛП (Данные) = "" Тогда

Возврат Неопределено;

КонецЕсли;

оригДанные = Данные;

Данные = СокрЛП (Данные);

Для Каждого ВидСерт Из Кассир5_DataAccess. ВыбратьВсеВидыСертификатов (Неопределено) Цикл

Если (ВидСертификата <> Неопределено) И (ВидСертификата. Код <> ВидСерт. Код) Тогда

Продолжить;

КонецЕсли;

// проверяем тип и возможность применения данного типа ввода

Если (Тип = 0) И Не ВидСерт. РазрешенВводРидером Тогда

Продолжить;

КонецЕсли;

Если (Тип = 1) И Не ВидСерт. РазрешенВводСканером Тогда

Продолжить;

КонецЕсли;

Если (Тип = 2) И Не ВидСерт. РазрешенВводВручную Тогда

Продолжить;

КонецЕсли;

Если (СтрДлина (ВидСерт. ПрефиксКода) <> 0) И (ВидСерт. ПрефиксКода <> Лев (Данные, СтрДлина (ВидСерт. ПрефиксКода))) Тогда

Продолжить;

КонецЕсли;

Если (ВидСерт. ДлинаКода <> 0) И (ВидСерт. ДлинаКода <> СтрДлина (Данные)) Тогда

Продолжить;

КонецЕсли;

Если Не ПроверитьСрокДействияСертификата (ВидСерт) Тогда

Продолжить;

КонецЕсли;

Если Не ПроверитьВозможностьДобавленияВидаСертификата (ВидСерт) Тогда

Продолжить;

КонецЕсли;

Если ВидСерт. ИнформацияВКоде Тогда

кНоминал = 0;

кКодНоминала = 0;

кНомерСертификата = "";

Если РаскодироватьИнфомациюКарты (ВидСерт, Данные, кНоминал, кНомерСертификата, Неопределено, кКодНоминала, Неопределено) Тогда

Стр = НайденыеСертификаты. Добавить ();

Стр. ВидСертификата = ВидСерт;

Стр. ВыборИзСписка = Ложь;

Стр. НомерСертификата = кНомерСертификата;

// если указан код сертификата, у которого взять номинал

Если кКодНоминала <> "" Тогда

Серт = Кассир5_DataAccess. ВыбратьСертификат (ВидСерт. Код, кКодНоминала, "Код");

Если Серт <> Неопределено Тогда

Стр. Сертификат = Серт [0];

Иначе

НайденыеСертификаты. Удалить (Стр);

КонецЕсли;

Иначе

Стр. ВыборИзСписка = (Кассир5_DataAccess. ВыбратьСертификат (ВидСерт. Код, Неопределено, Неопределено). Количество () > 0);

КонецЕсли;

КонецЕсли;

Иначе

// проверка на то, что Данные<>"" была выше

ВыбСерт = Кассир5_DataAccess. ВыбратьСертификат (ВидСерт. Код, Данные, "Код");

Если ВыбСерт. Количество () = 0 Тогда

// НайденыеСертификаты. Удалить (Стр);

Иначе

Стр = НайденыеСертификаты. Добавить ();

Стр. ВидСертификата = ВидСерт;

Стр. ВыборИзСписка = Ложь;

Стр. Сертификат = ВыбСерт [0];

Стр. НомерСертификата = СокрЛП (Стр. Сертификат. Код);

КонецЕсли;

КонецЕсли;

КонецЦикла;

КонецЕсли;

Если НайденыеСертификаты. Количество () = 0 Тогда

Возврат Неопределено;

ИначеЕсли НайденыеСертификаты. Количество () = 1 Тогда

Рез = НайденыеСертификаты [0];

Иначе

ФормаВыбораНомер1 = Кассир5_DataAccess. ПолучитьОбщийОбъект ("Регистрация. ФормаВыбораНомер1");

ФормаВыбораНомер1. СписокЧеков. Очистить ();

ФормаВыбораНомер1. ТипФормы = 9;

Для Каждого Стр Из НайденыеСертификаты Цикл

ФормаВыбораНомер1. СписокЧеков. Добавить (НайденыеСертификаты. Индекс (Стр), Стр. ВидСертификата. Наименование);

КонецЦикла;

Стр = ФормаВыбораНомер1. ОткрытьМодально ();

Если Стр = Неопределено Тогда

Возврат Неопределено;

КонецЕсли;

Стр = НайденыеСертификаты [Рез. Значение];

КонецЕсли;

Если Не ПроверитьСрокДействияСертификата (Стр. ВидСертификата, Стр. Сертификат, Данные, Истина) Тогда

Возврат Неопределено;

КонецЕсли;

Если Стр. Сертификат <> Неопределено Тогда

Возврат СоздатьСтруктурыВыбранногоСертификата (Данные, Стр. ВидСертификата, Стр. Сертификат, Стр. НомерСертификата);

КонецЕсли;

Если Стр. ВыборИзСписка = Истина Тогда

Стр. Сертификат = Диалог_ВыбратьСертификатПоВиду (Стр. ВидСертификата);

Если Стр. Сертификат = Неопределено Тогда

Возврат Неопределено;

КонецЕсли;

Если Стр. НомерСертификата = "" Тогда

Стр. НомерСертификата = СокрЛП (Стр. Сертификат. Код);

КонецЕсли;

Возврат СоздатьСтруктурыВыбранногоСертификата (Данные, Стр. ВидСертификата, Стр. Сертификат, Стр. НомерСертификата);

КонецЕсли;

Возврат СоздатьСтруктурыВыбранногоСертификата (Данные, Стр. ВидСертификата, Неопределено, Стр. НомерСертификата);

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

Процедура ДобавитьСертификат (Серт)

Если Серт = Неопределено Тогда

Возврат;

КонецЕсли;

Если (Не Серт. ВидСертификата. НеГасимый) И (Серт. Сертификат <> Неопределено) И (Сертификаты. Найти (СокрЛП (Серт. Сертификат. Код), "КодСертификата")) <> Неопределено Тогда

Кассир5_DataAccess. ИнтерфОшибка (323);

Возврат;

КонецЕсли;

Если Серт <> Неопределено Тогда

Если (Серт. Остаток <= 0) Или ( (Серт. Сертификат <> Неопределено) И (Серт. Сертификат. Статус <> 0)) Тогда

Кассир5_DataAccess. ИнтерфОшибка (309);

Иначе

Если СуммаКлиента + Серт. Остаток > СуммаЧека Тогда

Сообщ = Кассир5_DataAccess. ПолучитьЯзыковуюСтроку (300) + Символы. ПС;

Иначе

Сообщ = "";

КонецЕсли;

Если Кассир5_DataAccess. ИнтерфВопросДаНет (Сообщ + Кассир5_DataAccess. ПолучитьЯзыковуюСтроку (315, Новый Структура ("п1, п2, п3", Серт. ВидСертификата. Наименование, Формат (Серт. Номинал, "ЧДЦ=2; ЧРД=.; ЧН=0.00; ЧГ="), Кассир5_DataAccess. НазваниеВалюты))) = "Да" Тогда

СтрСерт = Сертификаты. Добавить ();

СтрСерт. Наименование = Серт. ВидСертификата. Наименование;

СтрСерт. НомерСертификата = Серт. НомерСертификата;

СтрСерт. Номинал = Серт. Остаток;

Если СуммаКлиента + Серт. Остаток > СуммаЧека тогда

СтрСерт. Сумма = СуммаЧека - СуммаКлиента;

Иначе

СтрСерт. Сумма = Серт. Остаток;

КонецЕсли;

СтрСерт. ВидСертификата = Серт. ВидСертификата;

СтрСерт. КодВидаСертификата = Серт. ВидСертификата. Код;

СтрСерт. Сертификат = Серт. Сертификат;

СтрСерт. КодСертификата =? (Серт. Сертификат = Неопределено, "", СокрЛП (Серт. Сертификат. Код));

СтрСерт. Код122 = Серт. ДанныеОтУстройстваВвода;

СтрСерт. Код73 =? (Серт. Сертификат = Неопределено, "", СокрЛП (Серт. Сертификат. Код));

СтрСерт. СтрокаВидаОплаты = ЗаполненыеВидыОплаты. Добавить ();

СтрСерт. СтрокаВидаОплаты. ВидОплаты = Серт. ВидСертификата. НомерВидаОплаты;

СтрСерт. СтрокаВидаОплаты. Наименование = Серт. ВидСертификата. Наименование;

СтрСерт. СтрокаВидаОплаты. МаксСумма = Серт. Остаток;

СтрСерт. СтрокаВидаОплаты. Сумма = СтрСерт. Сумма;

СтрСерт. СтрокаВидаОплаты. Количество = СтрСерт. Сумма;

ЭлементыФормы. ЗаполненыеВидыОплаты. ТекущаяСтрока = СтрСерт. СтрокаВидаОплаты;

ОбновитьЭлементы ();

КонецЕсли;

КонецЕсли;

КонецЕсли;

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

Форма "ФормаВыбораСертификата"

Функция ВыбратьСоответствиеТоварВидСертификата (Данные, Тип) Экспорт

// Данные - код сертификата

ВозврТЗ = Новый ТаблицаЗначений;

ВозврТЗ. Колонки. Добавить ("Код");

ВозврТЗ. Колонки. Добавить ("Номинал");

ВозврТЗ. Колонки. Добавить ("ВидСертификата");

СписокВидовСертификатов = новый СписокЗначений;

ВидыСертификатов = Кассир5_DataAccess. ВыбратьВсеВидыСертификатов (Неопределено);

Для Каждого ВидСерт Из ВидыСертификатов Цикл

// проверяем тип и возможность применения данного типа ввода

Усл = ( (Тип = 0) И ВидСерт. РазрешенВводРидером) Или ( (Тип = 1) И ВидСерт. РазрешенВводСканером);

Если Усл Тогда

// Проверка префикса

Усл = (СтрДлина (ВидСерт. ПрефиксКода) = 0) Или (ВидСерт. ПрефиксКода = Лев (Данные, СтрДлина (ВидСерт. ПрефиксКода)));

// Проверка длины кода

Усл = Усл И (ВидСерт. ДлинаКода = 0 Или ВидСерт. ДлинаКода = СтрДлина (Данные)); // длина кода 0 или та что надо

Если Не Усл Тогда

Продолжить;

КонецЕсли;

СписокВидовСертификатов. Добавить (ВидСерт. Код);

КонецЕсли;

КонецЦикла;

РезультатТЗ = Кассир5_DataAccess. ВыборТоваровДляПродажиСертификатов (СписокВидовСертификатов);

// выбранные соответствия будут упорядочены по убыванию. таким образом,

// сертификат с префиксом 0 (равным префиксу вида) будет подобран последним,

// если другие не найдутся.

Для Каждого Результат из РезультатТЗ Цикл

// Пока Результат. Следующий () Цикл

Усл = (СтрДлина (Результат. Префикс) = 0) Или (Результат. Префикс = Лев (Данные, СтрДлина (Результат. Префикс)));

Если Не Усл Тогда

Продолжить;

КонецЕсли;

// нашли первый похожий и выходим.

СтрВозврТЗ = ВозврТЗ. Добавить ();

СтрВозврТЗ. Код = Результат. Код;

СтрВозврТЗ. ВидСертификата = ВидыСертификатов. Найти (Результат. КодВидаСертификата, "Код");

СтрВозврТЗ. Номинал = Результат. Номинал;

Прервать;

КонецЦикла;

Возврат ВозврТЗ;

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

Функция РаскодироватьИнфомациюКарты (ВидСерт, Данные, кНоминал, кНомер, СрокГодности, кКодНоминала, внНачалоАкции)

// Если ВидСерт. Пустая () Тогда

// Возврат Ложь;

// КонецЕсли;

Если Не ВидСерт. ИнформацияВКоде Тогда

Возврат Ложь;

КонецЕсли;

кНоминал = 0;

кНомер = "";

СрокГодности = '00010101';

внНачалоАкции = '00010101';

кКодНоминала = "";

Если ВидСерт. НоминалЗакодированВКоде Тогда

Попытка

кНоминал = Число (Сред (Данные, ВидСерт. НачальнаяПозицияНоминалаВКоде, ВидСерт. ДлинаНоминалаВКоде)) * ВидСерт. МножительНоминалаВКоде;

Исключение

Возврат Ложь;

КонецПопытки;

КонецЕсли;

Если ВидСерт. НомерСертификатаВКоде Тогда

кНомер = Сред (Данные, ВидСерт. НачальнаяПозицияНомераВКоде, ВидСерт. ДлинаНомераВКоде);

КонецЕсли;

Если ВидСерт. СрокГодностиЗакодированВКоде Тогда

Стр = Сред (Данные, ВидСерт. НачальнаяПозицияСрокаГодностиВКоде, СтрДлина (ВидСерт. ФорматСрокаГодностиВКоде));

поз = Найти (ВидСерт. ФорматСрокаГодностиВКоде, "YYYY");

Если поз > 0 Тогда

СтрСрок = Сред (Стр, поз,

4);

Иначе

поз = Найти (ВидСерт. ФорматСрокаГодностиВКоде, "YY");

Если Поз > 0 Тогда

СтрСрок = "20" + Сред (Стр, поз,

2);

Иначе

СтрСрок = Формат (ТекущаяДата (), "ДФ=yyyy");

КонецЕсли;

КонецЕсли;

Поз = Найти (ВидСерт. ФорматСрокаГодностиВКоде, "MM");

Если Поз > 0 Тогда

СтрСрок = СтрСрок + Сред (Стр, поз,

2);

Иначе

СтрСрок = СтрСрок + "01";

КонецЕсли;

Поз = Найти (ВидСерт. ФорматСрокаГодностиВКоде, "DD");

Если Поз > 0 Тогда

СтрСрок = СтрСрок + Сред (Стр, поз,

2);

Иначе

СтрСрок = СтрСрок + "01";

КонецЕсли;

Попытка

СрокГодности = Дата (СтрСрок);

Исключение

Возврат Ложь;

конецПопытки;

КонецЕсли;

Если ВидСерт. НачалоСрокаГодностиЗакодированВКоде Тогда

Стр = Сред (Данные, ВидСерт. НачальнаяПозицияНачалаСрокаГодностиВКоде, СтрДлина (ВидСерт. ФорматНачалаСрокаГодностиВКоде));

поз = Найти (ВидСерт. ФорматНачалаСрокаГодностиВКоде, "YYYY");

Если поз > 0 Тогда

СтрСрок = Сред (Стр, поз,

4);

Иначе

поз = Найти (ВидСерт. ФорматНачалаСрокаГодностиВКоде, "YY");

Если Поз > 0 Тогда

СтрСрок = "20" + Сред (Стр, поз,

2);

Иначе

СтрСрок = Формат (ТекущаяДата (), "ДФ=yyyy");

КонецЕсли;

КонецЕсли;

Поз = Найти (ВидСерт. ФорматНачалаСрокаГодностиВКоде, "MM");

Если Поз > 0 Тогда

СтрСрок = СтрСрок + Сред (Стр, поз,

2);

Иначе

СтрСрок = СтрСрок + "01";

КонецЕсли;

Поз = Найти (ВидСерт. ФорматНачалаСрокаГодностиВКоде, "DD");

Если Поз > 0 Тогда

СтрСрок = СтрСрок + Сред (Стр, поз,

2);

Иначе

СтрСрок = СтрСрок + "01";

КонецЕсли;

Попытка

внНачалоАкции = Дата (СтрСрок);

Исключение

Возврат Ложь;

конецПопытки;

КонецЕсли;

Если ВидСерт. КодНоминалаЗакодированВКоде Тогда

кКодНоминала = Сред (Данные, ВидСерт. НачальнаяПозицияКодаНоминалаВКоде, ВидСерт. ДлинаКодаНоминалаВКоде);

КонецЕсли;

Возврат Истина;

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

Функция ПроверитьСрокДействияСертификата (ВидСертификата = Неопределено, Сертификат = Неопределено, Данные = "", СообщатьОбОшибке = Ложь)

Перем СрокГодности, НачалоАкции;

Если ВидСертификата <> Неопределено Тогда

Если (ВидСертификата. СрокДействияАкции <> '00010101') И (ВидСертификата. СрокДействияАкции < НачалоДня (ТекущаяДата ())) Тогда

Если СообщатьОбОшибке <> Ложь Тогда

Кассир5_DataAccess. ИнтерфОшибка (299);

КонецЕсли;

Возврат Ложь;

КонецЕсли;

Если (ВидСертификата. НачалоДействияАкции <> '00010101') И (ВидСертификата. НачалоДействияАкции > НачалоДня (ТекущаяДата ())) Тогда

Если СообщатьОбОшибке <> Ложь Тогда

Кассир5_DataAccess. ИнтерфОшибка (306);

КонецЕсли;

Возврат Ложь;

КонецЕсли;

Если ВидСертификата. ИнформацияВКоде И (Данные <> "") Тогда

Если РаскодироватьИнфомациюКарты (ВидСертификата, Данные, Неопределено, Неопределено, СрокГодности, Неопределено, НачалоАкции) Тогда

Если (СрокГодности <> '00010101') И (СрокГодности < НачалоДня (ТекущаяДата ())) Тогда

Если СообщатьОбОшибке <> Ложь Тогда

Кассир5_DataAccess. ИнтерфОшибка (299);

КонецЕсли;

Возврат Ложь;

КонецЕсли;

Если (НачалоАкции <> '00010101') И (НачалоАкции > НачалоДня (ТекущаяДата ())) Тогда

Если СообщатьОбОшибке <> Ложь Тогда

Кассир5_DataAccess. ИнтерфОшибка (306);

КонецЕсли;

Возврат Ложь;

КонецЕсли;

КонецЕсли;

КонецЕсли;

КонецЕсли;

Если Сертификат <> Неопределено Тогда

Если (Сертификат. СрокГодности <> '00010101') И (Сертификат. СрокГодности < НачалоДня (ТекущаяДата ())) Тогда

Если СообщатьОбОшибке <> Ложь Тогда

Кассир5_DataAccess. ИнтерфОшибка (299);

КонецЕсли;

Возврат Ложь;

КонецЕсли;

Если (Сертификат. НачалоДействияАкции <> '00010101') И (Сертификат. НачалоДействияАкции > НачалоДня (ТекущаяДата ())) Тогда

Если СообщатьОбОшибке <> Ложь Тогда

Кассир5_DataAccess. ИнтерфОшибка (306);

КонецЕсли;

Возврат Ложь;

КонецЕсли;

КонецЕсли;

Возврат Истина;

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

Функция СоздатьСтруктурыВыбранногоСертификата (Данные, ВидСертификата, Сертификат, НомерСертификата)

Перем тНоминал;

РезСтруктура = Новый Структура;

РезСтруктура. Вставить ("ВидСертификата", ВидСертификата);

РезСтруктура. Вставить ("Сертификат", Сертификат);

РезСтруктура. Вставить ("Остаток", ПолучитьОстатокСертификата (ВидСертификата, Сертификат, Данные, тНоминал));

РезСтруктура. Вставить ("НомерСертификата", НомерСертификата);

РезСтруктура. Вставить ("Номинал", тНоминал);

РезСтруктура. Вставить ("ДанныеОтУстройстваВвода",? (Данные = Неопределено, "", Строка (Данные)));

Возврат РезСтруктура;

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

Размещено на Allbest.ru


Подобные документы

  • Цели и задачи программной инженерии. Понятие программного обеспечения. Шесть принципов эффективного использования программного обеспечения. Виды программного обеспечения: общесистемное, сетевое и прикладное. Принципы построения программного обеспечения.

    курсовая работа [30,4 K], добавлен 29.06.2010

  • Понятие программного обеспечения, вопросы его разработки и использования. Общая характеристика системного программного обеспечения и работа операционной системы. Специфика процесса управления разработкой программного обеспечения и его особенности.

    курсовая работа [636,2 K], добавлен 23.08.2011

  • Определение понятия и сущности программного обеспечения. Рассмотрение основ интерпретируемых и компилируемых программ. Особенности несвободных, открытых, свободных, системных, прикладных и инструментальных программ; основные принципы их применения.

    реферат [25,6 K], добавлен 06.11.2014

  • Схемы взаимодействия между заказчиком и разработчиком программного обеспечения. Качество программного обеспечения и определение основных критериев его оценка на современном этапе, особенности управления на стадиях жизненного цикла, анализ достаточности.

    презентация [114,7 K], добавлен 14.08.2013

  • Изучение основных видов угроз программного обеспечения. Выявление наиболее эффективных средств и методов защиты программного обеспечения. Анализ их достоинств и недостатков. Описания особенностей лицензирования и патентования программного обеспечения.

    курсовая работа [67,9 K], добавлен 29.05.2013

  • Последовательность конфигурирования клиентского программного обеспечения для работы в сети. Парметры настройки и подключения сетевого принтера. Обновление конфигурации программы 1С: Предприятие. Анализ аппаратного обеспечения сети данной организации.

    отчет по практике [1,6 M], добавлен 22.01.2011

  • Основные международные стандарты в области информационных технологий. Международный стандарт ISO/IEC 9126. Качество и жизненный цикл. Характеристика внутренних и внешних атрибутов качества. Анализ функциональных возможностей программного обеспечения.

    доклад [94,4 K], добавлен 13.06.2017

  • Изучение различных видов тестирования программного обеспечения. Выявление в программной системе скрытых дефектов до того, как она будет сдана заказчику. Тестирование методом черного ящика. Требования, предъявляемые к процессу тестирования больших систем.

    курсовая работа [3,0 M], добавлен 19.11.2009

  • Проблема надежности программного обеспечения, ее показатели и факторы обеспечения. Методы контроля процесса разработки программ и документации, предупреждение ошибок. Этапы процесса отладки ПО, приемы структурного программирования и принцип модульности.

    презентация [379,5 K], добавлен 30.04.2014

  • Исследование объектно-ориентированного подхода к проектированию программного обеспечения будильника. Модель программного обеспечения. Взаимодействие между пользователями и системой. Диаграммы и генерация программного кода при помощи средств Rational Rose.

    курсовая работа [355,8 K], добавлен 26.09.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.