Поле | Тип | Назначение |
KodNovosti | Int | Автоинкрементное ключевое поле |
Avtor | Int | Ссылка на _Menedzeri |
Novost | C(600) | Новость |
Data | C(12) | Дата создания новости |
Таблица 10 – заказы оптовиков.
Поле | Тип | Назначение |
KodZakaza | Int | Автоинкрементное ключевое поле |
Obrabotan | Date | Когда обработан |
Status | smallint | Статус (подтврждён, обработан) |
Polzovatel | Int | Ссылка на _Polzovateli |
Data | Date | Дата и время создания |
Sym | money | Сумма заказа |
Таблица 11 – Товары в заказе.
Поле | Тип | Назначение |
KodPozicii | Int | Автоинкрементное ключевое поле |
Zakaz | Int | Ссылка на _Zakazi |
Nomen | Int | Ссылка на _Nomenklatura |
Cena | money | Цена одной позиции |
Kolichestvo | Int | Количество |
Sym | money | Сумма (Cena*Kolichestvo) |
4 ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРИЛОЖЕНИЯ
4.1 Программные средства для создания и поддержания распределённой БД
4.1.1 Обработка на центральной базе «Выгрузка накладной»
Внешний вид программы (внешней обработки) показан на рисунке 8

Рисунок 8 – Окно подпрограммы «Выгрузка накладной»
Пользователю требуется выбрать каталог, куда будут сохранены dbf файлы с информацией по накладной, и сам документ. Алгоритм работы обработки таков:
а. Создание каталога по имени документа,
б. Создание трёх «DBF» файлов и выгрузка в них данных по каждой позиции выгружаемой номенклатурной позиции, включая данные для построения древовидной структуры,
в. Последовательный проход по элементам документа «Реализация» с выгрузкой в файлы «DBF» таких свойств как:
- Единица измерения,
- Цена,
- Страна происхождения,
- Производитель (как основное свойство),
- Наименование для печати,
- Ставка НДС.
Синтаксис языка позволяет использовать в качестве операторов русские слова, что делает программы легко понимаемыми неопытными в 1С программистами.
4.1.2 Обработка на удалённой торговой точке - «Загрузка документов»
Флеш накопитель доставляется в магазин вместе с товаром, вставляется кассиром в системный блок.
Далее кассир по инструкции (инструкция пользователя находится в разделе 5.1.8) открывает из 1С обработку загрузки документа, представленную на рисунке 9.

Рисунок 9 – Окно подпрограммы «Загрузка документов»
Выбирает каталог, совпадающий с именем поступившей накладной, жмёт на кнопку «загрузить» и ждёт результата операции. По окончании пользователю выдаётся печатная форма (отчёт) с ценниками на впервые поступивший(новый) товар и на товар с изменёнными ценами.
В данной обработке использовался запрос, извлекающий из регистра «ОстаткиТМЦ» остатки по всем номенклатурным позициям:
ТекстЗапроса =
"//{{ЗАПРОС(Выгр_Ост)
|РегНом= Регистр. ОстаткиТМЦ. Номенклатура;
|РегНомКод=Регистр. ОстаткиТМЦ. Номенклатура. Код;
|РегСклд= Регистр. ОстаткиТМЦ. Склад. Код;
|РегКол= Регистр. ОстаткиТМЦ. Количество;
|Группировка РегНом без Групп;
|Группировка РегСклд;
|Функция КОН = КонОст(РегКол);"//}}ЗАПРОС
;
Если Запрос. Выполнить(ТекстЗапроса) = 0 Тогда
Предупреждение("Ошибка в запросе");
КонецЕсли;
Этот запрос позволяет избежать перебора записей и ускорить выборку по сравнению с простым перебором в десятки раз. Время выполнения этого запроса занимает менее 8 секунд. Но как видно – синтаксис сложен и не понятен на первый взгляд. Описать работу запроса можно так: используя индексы DBF файлов, происходит выборка из регистра остатков по всей номенклатуре. В запросе вводятся локальные переменные «РегНом», «РегНомКод», «РегСклд», «РегКол», доступ к которым возможен например при переборе результатов запроса через конструкцию «Запрос.Параметр». Так как в запросе явно не указан временной период, то по умолчанию используется «точка актуальности» - термин, введённый 1С, обозначающий рабочую дату или точку актуальности итогов, то есть время, по которое системой 1С гарантируется, что данные в регистрах соответствуют действительности. Слово «Группировка» осуществляет группировку записей по внутренним переменным, позволяя перебирать результаты выполненного запроса по группировке, а функция «КонОст» указывает запросу вернуть значение переменной на конец периода (в нашем случае – на «точку актуальности»).
Также на этом маленьком фрагменте можно увидеть преимущества использования русских слов при написании программы. Комментарии в коде просто не нужны.
Так же, как и при описании обработки сохранения данных на флеш накопитель.
4.2 Автоматизация работы кассира в магазине
Кроме создания распределённой базы данных автоматизация включает в себя такие пункты как:
- Создание обработки, позволяющей ускорить печать ценников,
- Доработка документа «Реализация» для печати чеков продажи на фискальном регистраторе,
- Доработка документа «Возврат продажи» для печати чеков возврата продажи,
- Создание обработки, выводящей отчёт по продажам кассирам в указанном временном интервале,
- Изменение интерфейса кассира.
Разработка данной части комплекса заняла относительно не много времени, поэтому не буду останавливаться на ней подробно. Ранее подробно описаны две обработки, обеспечивающих перенос данных.
Работа пользователя с обработками и моими доработками ядра системы подробно описана в руководстве пользователя, представленного в разделе 5.1.
Фискальный регистратор – устройство для печати чеков по операциям купли-продажи. Данные по суммам продаж хранятся во внутренней памяти. Устройство регистрируется в налоговых органах, и ими же могут проверяться такие моменты:
- Каждому покупателю выдаётся чек,
- Каждый чек содержит информацию о компании – продавце,
- Сумма продаж и возвратов продаж за месяц.
В компании используются фискальные регистраторы модели «ШТРИХ ФР-К». К каждому устройству прилагаются драйвера, документация и пример работы для «1С Предприятия 7.7». Устройство подключается к компьютеру через интерфейс «RS-232». С помощью прилагаемого программного обеспечения были настроены параметры вывода информации на чек:
- Наименования отделов,
- Вывод дробной части суммы,
- Информационное сообщение.
Возврат может осуществляться только при наличии чека. Для сопоставления чека с документом «Реализация» на каждом чеке выводится номер документа – реализации. При оформлении возврата оператору надо выбрать документ-основание, номер которого она берёт из чека. Номер печатается под служебной информацией, без пояснения, не привлекая взгляд.
В течении дня на каждую покупку в базе делается документ «Реализация», при проведении которого автоматически печатается чек на фискальном регистраторе. Как упоминалось ранее, база центральная и база магазинная имеют одинаковые «ядра», но работают по разному. Порядок работы системы определяется константой «Магазинная версия», а внешний вид и возможности пользователя определяются его правами в системе. Кассиру запрещено: изменять проведённые документы (по которым уже распечатан чек), формировать отчёты (чтобы не мог анализировать деятельность предприятия и видеть приватную информацию) и пользоваться документами, использование которых не предусмотрено руководителем предприятия. Всё это было настроено с помощью программы «Конфигуратор 1С».
При возврате продажи оформляется документ «возврат продажи», при проведении которого автоматически печатается чек на возврат.
В конце рабочего дня оператор должен запустить обработку «Акт сверки», которая покажет ему сумму продаж (за минусом возвратов) за день. Данная сумма должна совпадать с фискальным отчётом (отчёт фискального регистратора по продажам при закрытии смены) и денежной суммой в кассе. Данная обработка представлена в разделе 5.1.6.
4.3 WEB приложение
Стартовая страница приложения показана на рисунке 10.



Рисунок 10 – стартовая страница web портала
На рисунке 10 отмечены пользовательские элементы управления.
4.3.1 Условия на работу WEB приложения у удалённого пользователя.
При разработке Интернет портала приходится выбирать между кроссплатформеностью и наглядностью приложения. В данном случае было выбранно удобство и красота конечного продукта. При возникновении потребности приложение может быть модернизировано соответствующим образом. Требования к компьютеру WEB пользователя таковы:
- Internet Explorer 6 x,
- Разрешение экрана выше, либо равное 1024x768,
- Разрешение всплывающих окон (для Windows XP SP2),
- Разрешение использования Java Script.
4.3.2 Используемые средства
4.3.2.1 Стандартные средства «WEB программирования»
В приложении активно использовались JavaSript’ы, CSS. В отдельные, подключаемые файлы, таблицы стилей не выносились. Использование данных средств позволило сделать интерфейс красивее, понятнее и удобнее для полььзователя.
4.3.2.2 2.0
Были использованы следующие объекты 2.0:
- FileUpload – используется на странице «men. aspx». Объект служит для загрузки выбранного пользователем файла на сторону сервера. Данный объект был использован для загрузки на сторону сервера файла «ost. dbf», содержащего остатки розничного магазина. Этот файл автоматически сохраняется на внешний носитель информации при выгрузке накладной через обработку, описанную в разделе 5.1.8,
- DataView – таблица отображения данных. В «Visual Studio 2003» для отображения данных в табличном виде использовался компонент «DataGrid», требующий большего объёма программного кода, чем «DataView». В данном компоненте автоматизированы такие действия, как: постраничный вывод указанного количества записей, выбор строки, редактирование строки. В качестве источника данных используется объект типа «SqlDataSource»,
- Label. Для отображения пояснительных надписей,
- Login. Данный класс служит для авторизации пользователя. Представляет собой объединённые в одну структуру поля для ввода имени пользователя, пароля, и поясняющие надписи к ним.
4.3.2.3
Большая часть кода приложения – это работа с БД. Для работы с SQL Server использовались классы: «SqlConnection», «SqlCommand». Не буду описывать работу из Visual Studio с MS SQL Server. Она хорошо описана в [16], [22], [23].
Были использованы такие методы работы с данными как:
- Выполнение хранимых процедур на SQL Server’e без возврата значения (напиример «NomenObnovi», «DobTov»)
- Выполнение хранимых процедур на SQL Server’e с возвратом значений («NewZakaz»)
- Выполнение SQL кода, сформированного WEB сервером по параметрам (например сохранение прайс-листа в формате Excel представлен в приложении Е).
- Выгрузка данных в DataSet с помощью метода Fill.
Тексты некоторых хранимых процедур представлены в приложении Е.
4.3.3 Получение данных от WEB Службы
Для подключения к WEB службе используется мастер Visual Studio. После этого в окне «SolutionExplorer» появляется пункт «WebReferences» с ссылкой на WEB службу. После этого доступ к методам WEB службы можно получить лишь одной строкой: «Sluzba. Service ws = new Sluzba. Service();». Теперь методы WEB можно вызывать с помощью конструкции: ws.«Имя метода».
Фрагмент кода страницы «men», работы с Web службой представлен в приложении Д. Важное свойство WEB службы – это время ожидания ответа (Timeout). По умолчанию оно составляет 1 минуту. Но максимальное время работы методов WEB службы разрабатываемой АИС составляет 3 минуты, поэтому этому свойству было присвоено значение равное 5 минутам (задаётся в секундах). Далее работа с Web службой такая же, как с обычным классом.
Получение результата от WEB службы занимает максимум 3 минуты. Полторы минуты занимает перенос в таблицу «_Nomenklatura» (10 000 записей), 70 секунд занимает перенос в таблицу «_Ostatki» (10 000 записей) и чуть более двух минут происходит выгрузка цен (63 000 записей). Более долгая задержка выгрузки цен объясняется не большим (ударение на «о») количеством записей, а большим временем, затрачиваемым системой 1С на расчёт динамических цен. Я считаю, что было получено максимально допустимое быстродействие по получению и передачи данных.
4.3.4 Кэширование данных
В языке разметки HTML для предотвращения повторной загрузки одних и тех же данных используются фреймы. Страница делится на области (фреймы), которые могут быть повторно загружены с сервера, либо остаться на машине клиента без обновления. Данная технология считается устаревшей. Теперь для предотвращения повторной загрузки одних и тех же данных используется кэширование. Кэширование может быть явное и не явное. Не явное кэширование используется по умолчанию. WEB сервер сам взаимодействует с браузером пользователя, минимизируя передаваемый трафик.
В WEB приложении было использовано и явное кэширование. Для предотвращения повторной загрузки дерева номенклатуры в файле «derev. ascx» используется директива: «<%@ OutputCache Duration = "600" VaryByParam="none" %>». Данная строка указывает, что данный фрагмент страницы нужно кэшировать и на стороне пользователя и на стороне сервера (это выставленно по умолчанию) в течении 600 секунд.
4.3.5 Отправка электронной почты
Для отправки сообщений на электронную почту используется учётная запись внутреннего почтового сервера «*****@***com». В Visual Studio 2005 произошли изменения и в новом продукте используется иная схема отправки сообщений, нежели чем в Visual Studio 2003. Страницы, с которых отправляются электронные письма показаны на рисунке 11.

Рисунок 11 – Форма отправки тестового сообщения
4.3.6 Полномочия пользователей
В соответствии с требованиями к программному продукту пользователи делятся на две группы – не авторизированные и авторизированные.
Не авторизированные пользователи, они же – «гости» имеют права на просмотр есть ли товар на розничной точке (без указания конкретного количества) и видят его цену по 1 прайсу (чем выше номер прайса, тем дешевле стоит товар). Делать заказ пользователи данного типа не могут.
Авторизированные пользователи – это покупатели - оптовики, которым имя пользователя и пароль выдаётся менеджерами. Покупать товар они могут по номеру прайса, заданного менеджером. Номер прайса зависит от двух критериев: объемы предыдущих закупок и частота покупок. Данная группа пользователей может оформлять заказы на товар.
Все остальные возможности у обеих групп одинаковы.
Информационно – функциональная схема «работа авторизированного пользователя в системе» показана на рисунке 12.

Рисунок 12 - работа авторизированного пользователя в системе
«Отчёт по товару» для выгрузки в формате Excel абсолютно идентичен данным, выводимым в DataView.
2.4.7 Проблемы и их решение
Проблемы и их решение:
- Невозможность взаимодействия JavaScript с кодом на C#. Решение: использовать параметры, передаваемые в строке запроса,
- Отсутствие документации на русском языке. Решение: изучение иностранного языка,
- Отсутствие средств отладки JavaScript. Решение: использование окон сообщений «ShowAlert» для отображения значений переменных. Мне это очень помогло при поиске зацикливания в одной из процедур.
5 ТЕХНОЛОГИЯ ЭКСПЛУАТАЦИИ ПРИЛОЖЕНИЯ
5.1 Инструкция оператора системы 1С на удалённом магазине
Содержание инструкции:
- Общие сведения,
- Порядок работы,
- Продажа (реализация),
- Возврат продажи,
- Использование меню фискального регистратора(ФР),
- Акт сверки,
- Печать ценников по подбору,
- Загрузка накладных.
5.1.1 Общие сведения
База данных ведётся пользователем с правами Кассира. Доступны такие действия, как:
- отпуск товара с распечаткой чека,
- оформление возврата с печатью чека на возврат продажи,
- загрузка накладных, полученных с основной базы, с добавлением новой номенклатуры и изменением цен в справочнике цен,
- формирование акта сверки.
Используется фискальный регистратор «Штрих ФР-К»
5.1.2 Порядок работы:
В течении дня оформляются продажи в текущем времени. Если нужно обменять товар, то оформляются последовательно возврат и продажа. В конце дня закрывается смена – делается полный отчёт с гашением на ФР и печатается акт сверки по указанному ниже алгоритму. В итоге получаем итоги, которые должны совпадать – наличность, итог по акту сверки из 1С и итог по итоговой ленте ФР.
5.1.3 Продажа (Реализация):
Для оформления продажи нужно:
а. щёлкнуть по пиктограмме «реализация» на панели управления. После этого откроется окно, поля которого должны уже быть заполнены по умолчанию (менять ничего не нужно). Окно показано на рисунке 13.
|
Рисунок 13 – Окно документа «Реализация»
б. Прейти на закладку «Табличная часть». Развернуть окно, два раза щёлкнув на его заголовке или на пиктограмме «развернуть». После чего нажать на кнопку «Цены…» и в появившемся окне выбрать тип цен «Розничная» и установить галку на «Включён в сумму». Результат показан на рисунке 14.
![]()
![]()

Рисунок 14 - Настройка документа «Реализация»
Надо нажать кнопку «ОК» и подобрать товар, используя кнопку «Подбор».
|
![]()
|
Рисунок 15 - подбор номенклатуры
В поле «Запрашивать» для удобства работы должно быть выставлено «Количество». Для ускорения поиска желательно пользоваться кнопкой «Поиск», учитывая, что код состоит из 9 символов, а в начале идут нули.
После подбора выбранный товар появляется в нижней таблице. Нажатием кнопки «Ок» он переносится в тело документа.
в. После подбора внизу окна высвечивается сумма, которую должен уплатить покупатель. В поле «Сумма от покупателя» надо обязательно ввести сумму, которую внёс покупатель. Потому что при печати чека будет выведена сумма сдачи.
После этого если вы хотите сделать реализацию с печатью чека, то нажимайте кнопку «Печать чека», а если без, то просто «Провести». После этого документ будет недоступен для редактирования. Появится информационное окно, в котором будет отображено – удачна ли попытка проведения. Если удачна, то закройте его. Если неудачна – попытайтесь устранить причину.
5.1.4 Возврат продажи
Для оформления возврата продажи:
а. Щёлкните мышкой по иконке с красным крестиком в панели инструментов 1С.
б. Открывается окно. Аналогично предыдущему документу поля на вкладке «Шапка» должны быть установлены должным образом по умолчанию. Жмите на кнопку «Основание», выбирайте документы «Реализация» и ищите документ, по которому был отпущен товар (номер документа печатается на чеке). На вопрос – заполнять ли документ по документу основанию отвечаете утвердительно «да».
в. Переходите к вкладке «ТМЦ и услуги (по отпускным ценам)».
В таблице отображаются все товары, которые прошли по документу – основанию. Нам нежно оставить лишь те, которые действительно возвращают. Цены должны стоять те, по которым отпускали товар. Удалить не нужные позиции можно кликая на нужной правой кнопкой мыши и выбирая пункт «Удалить строку», либо активируя строчку и нажимая на клавиатуре клавишу «Delete»(что будет быстрее).
Форма удаления показана на рисунке 16.

Рисунок 16 - Удаление позиций из документа «Возврат продажи»
г. Нажать кнопку «Провести». Если ФР не подключён, то вывалится сообщение о невозможности распечатать чек, но товар будет возвращён на склад.
д. Закройте окно документа (если оно не закрылось автоматически)
5.1.5 Использование меню фискального регистратора (ФР):
В меню программы 1С имеется меню «ФР»:
Элементы меню выполняют следующие функции:
- «Суточный отчёт с гашением» - закрывает смену, выводит полный фискальный отчёт по продажам с момента прошлого закрытия смены.
- «Суточный отчет без гашения» - выводит отчет по продажам с начала смены.
- «Отменить чек» - отмена чека системным администратором. Если произошла отмена чека, то надо будет перепечатать чек. Чек отменяется, если он не распечатался и фискальник «завис». Это может быть – если несвоевременно поменяли бумагу (кончилась при печати), либо зажевало бумагу, либо сбилось питание.
- «Проверка связи» - выдаст ошибку, если нет связи с фискальным регистратором.
5.1.6 Акт сверки:
Данная обработка показывает – что прошло по программе за указанный период.
Обработка вызывается из «Файл - > Открыть». Далее нужно выбрать каталог «С:\Base\Внешние обработки мира посуды» и дважды щёлкнуть по файлу «акт сверки для магазина. ert». После чего откроется обработка, внешний вид которой показан на рисунке 17.
![]()

Рисунок 17 - Акт сверки
Нужно указать период, покупателя и магазин. Склад можно не указывать (тогда будет по всем складам). Также можно не указывать покупателя, тогда соответственно будет выдан отчёт по всем покупателям. Хочу обратить внимания на кнопочки, выделенные на рисунке. Они позволяют сохранять и загружать параметры по умолчанию. То есть – один раз выбрав нужные вам параметры вы сохраняете настройку, а при следующей загрузке параметры будут выставлены так, как вы их выставляли в прошлый раз. Не надо будет каждый раз делать одно и то же.
После задания параметров следует нажать кнопку «сформировать». Будет получен отчёт, показанный на рисунке 18.

Рисунок 18 - отчёт по акту сверки
В случае расхождений между фискальным отчётом, актом сверки и наличностью – ищите причины ошибки.
5.1.7 Печать ценников по подбору:
Данная обработка позволяет напечатать ценники (по 16 ценников на страницу) на выбранный товар.
Внешний вид обработки показан на рисунке 19:

Рисунок 19 - «Печать ценников по подбору»
Как видно из рисунка 19. Требуется отобрать в левой части экрана нужную позицию, дважды щёлкнуть по ней, или нажать на кнопку « > », после чего она попадёт в правую часть экрана.
Для ускорения подбора можно пользоваться поиском по коду, либо менять порядок сортировки и отображения номенклатуры в левой части окна.
После выбора всех позиций, по которым требуется распечатать ценники нужно выбрать тип цен и нажать на кнопку «Распечатать ценники», после чего на экране появится отчёт с ценниками, по номенклатуре, находящейся в правой части окна, готовый к печати. Данный отчёт показан на рисунке 20.

Рисунок 20 - ценники
Выберите в меню пункт «Файл», далее – «Печать».
5.1.8 Загрузка накладных:
Для загрузки накладной в БД требуется:
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |


