Установка проекта Розница

From SunFlurry wiki
Jump to: navigation, search

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

Программа установки

Для выполнения установки Вам потребуются административные права (для регистрации сервера в сервисах операционной системы и копирования файлов в папки, защищенные для копирования для обычных пользователей). Проект можно устанавливать на операционные системы Windows, начиная с Windows XP и позже, либо серверные операционные системы Microsoft (Windows 2000 может также быть использована, но работоспособность на ней не проверялась длительное время). Требования к оборудованию: практически любой процессор (с Celeron 1.8Ггц и даже более младшие версии), для небольших торговых точек -- дополнительная память не требуется, для больших базы данных может возникнуть необходимость в использовании 2Гб памяти (для систем Windows 7 и ниже) и 4Гб памяти (для систем Windows 8, 10 и выше).

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

Далее диалог позволяет выбрать место на диске, куда будет происходить установка. В рабочих условиях, возможно, более удобно и правильно производить установку в папку SunFlurry непосредственно на диске C:, а не в подчиненную папку папки "Program Files", где базу данных будет сложнее найти и файлы резервного копирования могут быть забыты. Для удобства описания, примем, однако, что установка была выполнена по умолчанию и произведена в папку C:\Program Files (x86)\SunFlurry. Диалог также позволяет выбрать, какие из компонентов подлежат установке (см. рис. 1).

После окончания установки на рабочем столе появится иконка клиента "SunFlurry Розница", программы для работы оператора, и, если Вы также устанавливали Студию, иконка "SunFlurry Studio". Для дальнейшей настройки, запустите программу-клиента с помощью ярлыка "SunFlurry Розница" (создание структуры базы данных, которое будет происходить сразу после установки, может занять несколько секунд, поэтому, если клиент не запускается по причине недоступности сервера, подождите минуту и попробуйте снова). В диалоге регистрации пользователя для начала работы необходимо ввести имя учетной записи и пароль администратора локального компьютера (пользователя, входящего в группу "Администраторы"). Это предоставит Вам полные права в программе, и с помощью этих прав можно будет настроить учетные записи других пользователей, если в этом есть необходимость.

Начальная настройка базы данных торговой точки

После запуска клиент задаст вопрос о начальном заполнении базы данных (которая в данный момент совершенно пуста), вопрос показан на рис 2. Вам необходимо ответить "да", так как иначе многие справочники придется заполнять вручную (техническая деталь: проект предлагает начальное заполнение, если переменная префикса информационной базы пуста).

На экран будет выведен мастер начального заполнения, состоящий из 6 шагов. Для основных справочников (номенклатура, контрагенты) мастер создает только папки, другие важные справочники (план счетов и виды субконто бухгалтерского учета) будут заполнены полностью. На шаге 2 мастер дает возможность загрузить справочник городов и улиц (KLADR) Вашего региона. Это рекомендуется сделать даже если Вы просто тестируете возможности программы, так как это позволит удобно заполнять адреса юридических лиц. Для загрузки KLADR Вам необходимы два файла KLADR.DBF и STREET.DBF, которые можно скачать бесплатно с государственных сайтов в Интернет.

Для тестирования возможностей программы, а также для обычной установки торговой точки, рекомендуется оставить все поля мастера без изменения по умолчанию. На шаге 4 будет предложено ввести идентификатор процедуры резервного копирования, однако настройке по умолчанию, резервное копирование выполняется по расписанию, заданному в файле инициализации сервера, поэтому, это поле необходимо оставить пустым. Пункт 5 требует дополнительного ввода информации (см. рис. 3). Если торговая точка не будет торговать алкогольной продукцией, поля "код точки ЕГАИС" и "Адрес сервера ЕГАИС" можно не заполнять

Добавление и настройка драйверов устройств

Чтобы торговая точка заработала, необходимо выбрать и настроить драйверы оборудования. Для этого в главном меню "Справочники" выберите пункт "Магазины". В открывшемся окне есть только одна запись -- магазин, который был создан в момент начального заполнения базы данных. Для настройки драйверов необходимо открыть форму этой записи. Внешний вид элемента справочника магазины показан на рис. 4.

Для добавления оборудования необходимо использовать кнопку "Оборудование". Обычно для магазина требуется добавить и настроить нужный драйвер кассового терминала (ККМ). Вид настроек зависит от определенного драйвера и может представлять собой редактирование текстового файла или визуальную форму с настройками. После настройки оборудования, оно добавляется в рабочее место кассира или администратора. Рабочие места заданы на закладке "Рабочие места" элемента магазина, в каждое из рабочих мест можно добавить любые настроенные драйверы, однако, нужно понимать, что для правильной работы с кассой, в одном рабочем месте может быть выбран только один драйвер ККМ. Рабочие места должны быть ассоциированы с учетной записью -- пользователем. С первым пользователем, под которым был выполнен вход в программу, ассоциируется рабочее место "Администратор". Для настройки выбора рабочего места для текущего пользователя используйте кнопку "Установки пользователя" на панели с иконками под главным меню.

Для пробития чеков в ККМ требуется также ассоциировать текущего пользователя с контрагентом (так как необходимы имя, фамилия и отчество кассира). Для этого, необходимо создать контрагента в папке сотрудники и ассоциировать его с текущим пользователем в форме "установки пользователя".

Минимальный комплект драйверов, требуемых для работы программы в режиме кассового терминала, это драйвер ККТ (по умолчанию это виртуальный ККТ, который необходимо удалить из рабочего места для работы с реальными продажами) и драйвер сканера штрихкодов. Также необходимо заполнить адрес УМТ ЕГАИС (обычно 127.0.0.1:8080) и код точки ЕГАИС, если будут происходить продажи алкоголя. После настройки требуемых драйверов и добавления их в рабочее место пользователя для того, чтобы настроенные драйвера были загружены в память без выхода из программы, необходимо выполнить переподключение драйверов в форме "установки пользователя". После того, как драйверы настроены и загружены, можно заходить в форму рабочего места продавца (либо значок монеты на панели инструментов, либо "Отделы учета" - "Розница" - "Рабочее место продавца" в главном меню), открыть смену и начинать продажи.

Для настройки процедуры резервного копирования, Вы можете отредактировать файл sfsrv.ini, который при установке по умолчанию, находится в папке C:\Program Files (x86)\SunFlurry\Server. Содержимое этого файла рекомендуется изменять только техническим специалистам. Для более подробного описания, обратитесь к статье Установки сервера.

Импорт товаров и остатков из 1С:Розница

Для демострации простого импорта товаров и остатков в проект была создана внешняя обработка для экспорта справочников и остатков из 1С:Розница. Обработку можно скачать по этой ссылке. Обработку необходимо запустить в 1С:Розница, на рис. 5 показан общий вид обработки. Для выгрузки необходимо выбрать один магазин. Нужно иметь в виду, однако, что все остатки будут загружаться на одно юридическое лицо, поэтому, если Ваши магазины работают на разных юр. лицах, необходимо будет выгрузить их отдельными файлами.

После выгрузки текстового файла (скажем, Розница.txt), его необходимо загрузить в базу SunFlurry. В базе уже должны быть заполнены общие справочники (т.е., процедура начального заполнения справочников должна быть выполнена). Обработка загрузки находится в меню "Отделы учета", далее "Административные", "Розница" и "Загрузка справочников и остатков из 1С:Розница". Общий вид формы загрузки показан на рис. 6. Для загрузки необходимо выбрать юридическое лицо и папку справочника номенклатуры для импорта товаров (если папка не выбрана, товары будут созданы в корневой папке справочника). Кроме того, если база до этого была пустой, нужно выбрать магазин. Если магазин не будет выбран, новый магазин будет создан в базе данных автоматически.

После загрузки и настройки драйверов ККМ и сканера (см. предыдущий параграф), можно попробовать осуществить продажу, и затем возврат какого-либо товара. Остатки товаров должны быть также загружены. Зайдите в рабочее место продавца с помощью пункта меню "Отделы учета", "Розница", "Рабочее место продавца". Если форма загрузилась, все драйверы настроены корректно. Отсканируйте товар и нажмите на кнопку "Закрыть чек". Будет выведен диалог, показанный на рис. 7. Нажмите на кнопку рядом с суммой наличными (чтобы автоматически заполнить сумму оплаты), после чего нажмите на кнопку "Оплатить".

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

Товары и остатки также можно импортировать с помощью загрузки файла протокола обмена Фронтол (см. настройку обмена ниже), но в случае Фронтола не все нужные справочники будут импортированы (к примеру, марки ЕГАИС не будут импортированы).

Краткий список простых вопросов и ответов при работе с проектом

  • Q: Как изменить пароль для входа в программу?
    • A: В рабочей программе, выбрать пункт меню "Общие" - "Административная панель", перейти на закладку "Учетные записи", два раза кликнуть на своей учетной записи. В появившемся диалоге установить галку "Запись защищена от изменений при синхронизации с ОС" (это означает, в частности, что пароль может не совпадать с паролем ОС). Нажать на кнопку "Сменить пароль", сменить пароль, после чего принять диалог с помощью кнопки "ОК" и нажать кнопку "Сохранить" на нижней напели окна.
  • Q: При попытке зайти в режим продаж с ККМ, программа выдает сообщение Для текущего пользователя не выбран соответствующий элемент контрагента!.
    • A: Из-за того, что программе необходимы имя и фамилия кассира при пробитии чеков, его (кассира) необходимо завести в справочнике контрагентов. Для этого зайдите в справочник "Справочники" - "Контрагенты", перейдите в папку "Сотрудники", нажмите на Insert и введите сотрудника (с типом покупатель). После сохранения элемента, Вам необходимо сопоставить его с Вашей записью о пользователе. Для этого, воспользуйтесь иконкой головы человека на верхней панели иконок программы. В появившемся диалоге (где также можно настроить права доступа к функциям программы), заполнить поле "Контрагент" созданным Вами контрагентом и нажмите на "ОК".
  • Q: Как добавить другого пользователя и настроить его права.
    • A: Пользователя можно добавить в закладке "Учетные записи" административной панели (см. первый вопрос). Однако, обычно это не требуется, так как настройки проекта по умолчанию позволяют заходить в программу любому пользователю с его паролем ОС. При этом, если пользователь входит в группу администраторов, ему будут даны административные права, иначе он будет считаться обычным пользователем (для доп. информации, см. описание файла loginoptions.ini в статье Установки сервера. После того, как пользователь зайдет в программу в первый раз, будет создан его элемент справочника пользователи ("Отделы учета" - "Административные" - "Пользователи"). Администратору необходимо открыть элемент пользователя и настроить его в соответствии с его ролью.
  • Q: Как задать цены на товары.
    • A: Ответ на этот вопрос зависит от того, как Вы создали базу номенклатуры. Если Вы создавали поступления или принимали их из ЕГАИС, цены закупки уже заполнены, необходимо заполнить цены продаж. Если Вы загружали базу из какого-то внешнего источника, возможно, что у Вас заполнены не только цены закупки, но и продажи. Для создания наценок от цен закупки и автоматического заполнения цен продаж, необходимо зайти в "Отделы учета" - "Ценообразование" - "Типы цен". Откройте тип цен продаж, который Вас интересует, и настройте его наценки от типа цен закупок. Чтобы пересчитать цены, требуется воспользоваться обработкой пересчета розничных цен. Зайдите в нее через "Отделы учета" - "Розница" - "Пересчет розничных цен, печать и выгрузка". Там можно распечатать ценники товаров.
  • Q: При сканировании товара, программа говорит, что для товара "не задана розничная цена или не был распечатан ценник", однако, розничная цена пересчитана!
    • A: По умолчанию, программа имеет небольшую защиту от неверных цен в торговом зале. Если цена была изменена, однако, ценник для товара еще не был распечатан (или выведен на экран), программа будет использовать цену на момент предыдущей распечатки ценника. Если товар новый, эта предыдущая цена не задана. Зайдите в "Отделы учета" - "Розница" - "Пересчет розничных цен, печать и выгрузка", "Распечатать ценники номенклатуры" (обработка также доступна напрямую из главного меню), распечатайте ценники, установив галку "Печатать только новые ценники".
  • Q: Марки товаров сканируются неверно или выходят в виде текста, вместо того, чтобы приниматься, как результат сканирования.
    • A: Сканеры в режиме клавиатуры не очень надежны. Если Сканер отдает нажатия слишком медленно, программа может посчитать, что это работает оператор. Кроме того, сканеры могут отдавать необычные символы при сканировании. Начните настройку сканера с его сброса до заводского состояния. Если это не помогает, можно попробовать увеличить максимальное время между сканируемыми символами или настроить перекодировщик символов при сканировании. Для настройки сканера, зайдите в справочник магазинов, выделите нужный магазин и нажмите кнопку "Оборудование", выберите сканер из списка оборудования и откройте его диалог. Зайдите в диалог настройки с помощью кнопки с гаечным ключом в поле "Настройки". В диалоге настройки Вы можете проверить результаты сканирования и настроить корректный префикс и суффикс, используемый сканером Вашей модели. Также можно настроить таблицу перекодирования (к примеру, для замены особой комбинации символов Вашего сканера на символ GS1 для марок ГИС МТ). Если ничего не помогает, попробуйте перейти на драйвер эмуляции COM-порта. В этом режиме работа будет идти быстрее, и сканер будет работать с меньшим числом ошибок.
  • Q: Банковский терминал не работает при пробитии чека.
    • A: Необходимо добавить его в список оборудования рабочего места, под которым происходит работа, либо вводить на нем сумму товара вручную, если драйвер данного банка отсутствует в списке доступных драйверов оборудования проекта. Для добавления зайдите в список рабочих мест в форме магазина, откройте нужное рабочее место (оно сопоставлено с элементом справочника пользователи кассира), нажмите кнопку "добавить" - "добавить оборудование текущего магазина", "Новый элемент", выберите драйвер оборудования, сохраните его ("ОК"), кликните на нем два раза, чтобы добавить в открытое рабочее место, сохраните изменения в рабочем месте ("ОК").
  • Q: Как получить анализ продаж или найти наличные и безналичные продажи за день.
    • A: Анализ продаж -- очень гибкий отчет, позволяющий задавать большое количество фильтров, группировок и полей находит в главном меню "Отчеты" - "Анализы продаж" - "Анализ продаж". Однако, отчет не покажет продажи в разрезе наличных и безналичных оплат. Для этого, используйте простой розничный отчет "Отделы учета" - "Розница" - "Отчет по розничным продажам".
  • Q: Как найти остатки на складе магазина.
    • A: Остатки можно найти несколькими способами. Первый -- остатки номенклатуры с ценами находится в главном меню "Отчеты" - "Номенклатура, ОС, аренда" - "Остатки номенклатуры и прайс-лист". Второй отчет является ведомостью и позволяет показывать движения за период в различных разрезах в т.ч. по документам, информация, недоступная в первом отчете. Ведомость находится в главном меню "Отчеты" - "Номенклатура, ОС, аренда" - "Ведомость по остаткам номенклатуры".
  • Q: Как провести инвентаризацию магазина.
    • A: Для инвентаризации магазина можно использовать т.с.д., сканер штрихкодов, либо выполнить подсчет вручную на листочке. Для использования т.с.д., его нужно подключить как оборудование в текущее рабочее место (см. описание выше подключения банковского терминала). В магазине останавливается рабочая деятельность (это строго рекомендуется, так как без этого придется отнимать от полученных остатков продажи, прошедшие после начала инвентаризации). Необходимо зайти в общий журнал ("Документы" - "Общий журнал документов"), Insert, "Акт по складу и инвентаризация", "Инвентаризация". Выберите юридическое лицо и склад. Можно установить галку "не считать остатки в разрезе по партиям", обычно, подсчет по партиям затруднителен. После этого снимите остатки на текущий момент, -- кнопка "++ Подбор", "Все товарные остатки".
      • Для использования т.с.д. или сканера, выберите снова "++ Подбор", "Подбор со сканера или терминала", выберите терминал, если он есть, и нажмите кнопку "Выгрузить номенклатуру". После сканирования загрузите его результат с помощью кнопки "Загрузить с терминала". Для обычного сканера, можно нажимать последовательно на F3 и сканировать товар или использовать пункт "множество штрихкодов". После заполнения таблицы сканирования, нажмите на кнопку "Принять".
      • Для использования инвентаризации на бумаге, запишите документ и распечатайте печатную форму "Инвентаризация ИНВ3 (для заполнения)", либо воспользуйтесь отчетом по остаткам. Заполните результаты сканирования на бумаге и введите их в документ в поля "фактическое количество".
      • Для окончания инвентаризации, обработайте документ, распечатайте и подпишите печатную форму "Сличительная ведомость ИНВ19". С помощью кнопки "Действия...", введите на основании документа оприходование ТМЦ и списание ТМЦ (документ Регистрация ТМЦ). В этих документах необходимо выбрать правильные партии, иначе учет на складе по партиям будет испорчен. Для списания алкогольного товара, созданное списание необходимо выгрузить в ЕГАИС. Если товар марочный, требуется также отсканировать марки списываемого товара (это может быть проблематичным на данном этапе, но система ЕГАИС иначе не работает). Списание можно не выгружать в ЕГАИС, и произвести списание напрямую из особого отчета по сверке остатков в ЕГАИС из обработки ЕГАИС (такой способ предпочтителен).
  • Q: Как принять новое поступление в ЕГАИС.
    • A: Откройте обработку ЕГАИС ("Бухгалтерия" - "Отчетность" - "Выгрузка и загрузка данных ЕГАИС"). Нажмите на кнопку "Обновить" на нижней панели. Если есть новые поступления, они должны загрузиться в таблицу поступлений, нажмите правую клавишу мыши на требуемом поступлении, выберите пункт "Создать локальный документ поступления на основе входящего документа". В открывшейся таблице представлены все строки с алкогольной продукцией ЕГАИС. Если товар уже принимался базе ранее, локальная номенклатура будет сопоставлена, иначе необходимо два раза кликнуть по незаполненной ячейке в столбце "Номенклатура" и, либо выбрать локальную номенклатуру, либо создать ее на основе входящей информации, нажав кнопку с иконкой отчета.
      • После сопоставления номенклатуры необходимо выполнить сопоставление штрихкода, если он новый или не был поставлен. Для этого необходимо кликнуть два раза по ячейке в столбце "Штрихкод" и выполнить сканирование.
      • После сопоставления штрихкодов необходимо провести сканирование марок принимаемой номенклатуры (только для марочного товара). Для этого необходимо кликнуть два раза по ячейке "Не проверено" в столбце "Проверка марок", будет выведен диалог, ожидающий сканирование штрихкодов ящиков и отдельных марок. Эту процедуру можно игнорировать, если у оператора достаточно прав для этого, но пропуск сканирования не рекомендуется, так как при наличии ошибок от поставщика это выяснится при сканировании на кассе и вернуть такой товар в дальнейшем будет сложно. Также в этом диалоге можно оформить возврат, если каких-то марок из поступления нет в наличии.
      • Когда все процедуры проделаны, и таблица не содержит красных ячеек, нажмите на кнопку "Создать", чтобы создать сам документ. После оформления и обработки документа, вернитесь в обработку ЕГАИС, обновите таблицу входящих документов снова и примите документ в ЕГАИС с помощью правой кнопки мыши "Отправить акт поставщику о принятии товара". Через какое-то время документ будет принят в ЕГАИС, Вы можете убедиться в этом, нажав на кнопку "обновить статусы поступлений", программа также сделает это сама в фоне, если Вы выйдете из обработки ЕГАИС. После принятия поступления, программа автоматически создаст перемещение на регистр 2 для товара без акцизных марок, либо Вы можете форсировать этот процесс из обработки ЕГАИС.
  • Q: Как провести инвентаризацию остатков в ЕГАИС (сравнение с остатками товара в базе).
    • A: Остатки в ЕГАИС могут находиться на первом и втором регистрах, причем, на втором (розничном) регистре остатки не считаются в разрезе партий, поэтому, программе необходимо сделать два запроса по остаткам и объединить их в одну таблицу сравнения. Чтобы сравнение остатков первого регистра работало корректно, необходимо принимать поступления ЕГАИС в локальной базе данных, чтобы локальные партии номенклатуры были привязаны к партиям в ЕГАИС. Для получения остатков ЕГАИС, зайдите в обработку ЕГАИС ("Бухгалтерия" - "Отчетность" - "Выгрузка и загрузка данных ЕГАИС"), нажмите на кнопку "Работа с остатками..." и выберите пункт "Отчеты по сравнению остатков партий номенклатуры с ЕГАИС". В появившемся диалоге выберите "полный отчет" для получения отчета по остаткам, "списание партий ЕГАИС" для таблицы сравнения, в которой можно провести списание лишних партий ЕГАИС (будьте внимательны при списании из ЕГАИС!), либо "отчет на регистре 2", для получения отчета только по регистру 2 (если весь товар без маркировки находится на регистре 2, этого отчета будет достаточно для сравнения).
  • Q: При пробитии чеков, ЕГАИС может передать ошибку, либо ГИС МТ может посчитать марку неверной и т.п. Хотелось бы получить список таких случаев, чтобы найти такие плохие марки по ЕГАИС. Можно ли это сейчас сделать?
    • A: В данный момент такой лог ведется во внешних текстовых файлах, доступных администратору. При желании его можно вести в журнале регистрации событий базы данных. Для получения доступа к файлам, необходимо открыть папку с исходными файлами проекта (по умолчанию C:\Program Files (x86)\SunFlurry\Config\Server\). Разная информация, хранится в разных подпапках:
      • Ошибки фиксации марок ЕГАИС (и другие ошибки ЕГАИС) сохраняются в виде файлов failure_*.txt в подпапке Temp\ЕГАИС\Розница\ЗапросыФиксацииМарок\.
      • Ошибки фиксации марок ГИС МТ сохраняются в виде файлов problem_*.txt в подпапке Temp\Розница\ОшибкиИСМП\.
      • Попытки продажи товаров с нулевой ценой (удобно проверять, какие товары невозможно продать, так как для них не установлена цена, продавцы не всегда записывают и передают такие случаи) сохраняются в виде файлов problem_*.txt в подпапке Temp\Розница\ТоварыБезЦены\.
  • Q: Как быстро выполнить в программе произвольный код (чтобы, к примеру, сделать множественные изменения в справочниках или проверить ту или иную функцию)?
    • A: Зайдите в главном меню в "Административную панель", перейдите на закладку "Вычисление и исполнение". Введите в текстовом редакторе необходимый код (или вставьте его из буфера обмена). Нажмите Ctrl+F9 для его выполнения. Данная функция доступна только администраторам базы данных.
  • Q: Как сделать простое изменение в коде отчета или обработки?
    • A: Будем считать, что Вам необходимо изменить что-то при пробитии чека. Запустите программу "SunFlurry Studio" с рабочего стола. В главное меню выберите "Проект" - "Конфигурация данных...". Для поиска в дереве конфигурации проекта, используйте комбинацию Ctrl+F, введите фразу поиска "продавца", нажмите Enter, курсор будет установлен на обработке "РабочееМестоПродавца". С помощью кнопок [+], откройте дерево обработки и найдите ветку module. Кликните на нее два раза, чтобы открыть редактор исходных текстов. Нажмите Ctrl+F, чтобы произвести поиск внутри текста. Введите фразу поиска "принятие", нажмите Enter, курсор будет установлен на начало функции принятия чека. Сделайте требуемое изменение. Сохраните изменение с помощью Ctrl+S или иконки дискеты на верхней панели инструментов. Для переноса сделанного изменения в рабочие файлы проекта, вызовите компиляцию проекта с помощью Ctrl+F9. По умолчанию, проект настроен таким образом, чтобы, после успешной компиляции, автоматически соединиться с сервером и передать на него обновленные тексты. Иными словами, после нажатия Ctrl+F9 изменения уже в рабочей базе данных. Для некоторых изменений (изменения в глобальных модулях), будет необходимо выйти из программы и зайти снова, чтобы они заработали. При изменениях в обработках достаточно закрыть форму обработки и открыть ее снова.

Настройка обмена между центральной базой и периферийной базой по протоколу Фронтол

Настройка обмена между центральной и периферийной базой по проколу Фронтол, может производиться для разных конфигураций программ клиента и сервера. Это может быть как связка SunFlurry - SunFlurry, так и SunFlurry - сторонняя программа. В случае сторонней программы для простоты будет считать, что это 1С:Розница (для других программ, найдите способ настройки обмена в их документации). Фронтол является файловым обменом, файлы выгрузки и загрузки должны быть перемещены между сервером и клиентом. На данный момент, программа сама не занимается переносом файлов, она только создает их и загружает, сам перенос необходимо осуществить с помощью внешней программы (либо добавить его самостоятельно в исходники протоколов обмена). Позднее будут добавлены способы обмена файлами по ftp, и, возможно, другие. Рассмотрим три возможных случая связки программ клиента и сервера:

  • Случай, когда центральная база работает на SunFlurry, и локальная база магазина (с ККМ) работает также на SunFlurry. Обмен по протоколу Фронтол в этом случае не является идеальным решением, желательно использовать возможности создания распределенной базы в проекте. Однако, если нужен самый простой обмен, можно использовать и протокол Фронтола.
    • Для настройки протокола в центральной базе, зайдите в элемент магазина от которого будут проходить данные (в ц.б. должны быть созданы все магазины с которыми проходит обмен). На закладке "номенклатура" необходимо добавить требуемую для обмена номенклатуру (не включать, к примеру, хоз. товары, основные средства и т.д.). На закладке "Протоколы обмена", необходимо нажать на кнопку "новый элемент", в появившемся диалоге выбрать протокол "Обмен по протоколу Фронтол (центральная база)", сохранить новый элемент с помощью кнопки "Записать", после чего открыть его настройки кнопкой с гаечным ключом в поле "Настройки". В настройках протокола необходимо выбрать кассу, для которой будут загружаться ПКО и РКО, выбрать путь для файлов выгрузки и загрузки. Типы флагов и имена файлов можно оставить по умолчанию. Также необходимо создать расписание выгрузки и загрузки. Обычно два раза в сутки для подобного обмена более чем достаточно.
    • Для настройки протокола в локальной базе с ККМ, зайдите в элемент локального магазина. На закладке "Протоколы обмена", необходимо нажать на кнопку "новый элемент", в появившемся диалоге выбрать протокол "Обмен по протоколу Фронтол (клиент)", сохранить новый элемент с помощью кнопки "Записать", после чего открыть его настройки кнопкой с гаечным ключом в поле "Настройки". Для выполнения настройки:
      • Нажмите на кнопку выбора поля "Коды номенклатуры" и, с помощью клавиши Insert, создайте новый элемент дополнительных свойств, где будут храниться коды номенклатуры центральной базы. Выберите тип справочника "Номенклатура", в столбце "Наименование" введите наименование, к примеру, "Обмен Фронтол". Выберите созданный элемент, два раза кликнув на него.
      • Выберите папку справочника номенклатура, внутри которой будут создаваться товары из центральной базы. К примеру, можно выбрать корневую папку "Товар".
      • Установите галку "Не требовать печати ценников для применения новых цен", если ценники будут печататься из центральной базы.
      • Выберите путь для файлов выгрузки и загрузки, типы флагов и имена файлов можно оставить по умолчанию.
      • Также необходимо создать расписание выгрузки и загрузки. Обычно два раза в сутки для подобного обмена более чем достаточно.
  • Случай, когда центральная база работает на 1С:Розница, и локальная база магазина (с ККМ) работает также на SunFlurry.
    • Для настройки протокола в базе 1С, зайдите в "Администрирование" - "Подключаемое оборудование" - "Офлайн оборудование". Нажмите на кнопку "подключить новое", выберите тип оборудования "ККМ", выберите в поле "обработчик офлайн оборудования" значение "АТОЛ:ККМ Офлайн", далее необходимо выбрать организацию, открыть справочник правил обмена для выбора и создать там новое правило обмена. В правиле обмена необходимо выбрать тип оборудования "ККМ Офлайн", выбрать склад магазина (склад должен уже быть привязан к магазину, в магазине должно быть настроено правило ценообразования), установить галку "Выгружать группы товаров", выбрать соответствующие фильтры отбора номенклатуры. После этого сохраните элемент правил обмена и выберите его в создаваемом подключаемом оборудовании. Сохраните элемент оборудования, зайдите в него снова, нажмите на кнопку "параметры подключения". В параметрах подключения выберите формат обмена (Frontol 6), задайте пути к файлам выгрузки (обычно goods_out.txt, goods_flagin.txt и goods_report.txt). Сохраните элемент. Зайдите в "НСИ" - "Кассы ККМ", зайдите в кассу магазина, выберите пункт "Еще" - "Разрешить редактирование реквизитов". Измените тип кассы на "ККМ Офлайн", выберите "офлайн оборудование", которое мы недавно создали и настроили. Настройте расписание выгрузки и загрузки, после чего можно произвести полную выгрузку, чтобы выгрузить всю номенклатуру и остатки.
    • Для настройки протокола в локальной базе с ККМ, смотрите предыдущий параграф (случай SunFlurry-SunFlurry). 1С не будет контролировать, загружался ли уже текущий день и текущий документ, поэтому, если выгрузить один и тот же день из клиента на сервер, в 1С создадутся два документа отчета о розничных продажах, предыдущий из них необходимо будет удалить вручную. Чтобы избежать этого, SunFlurry будет запоминать последний день выгрузки и не выгружать автоматически дни, которые уже когда-либо были выгружены, кроме того, выгрузка не будет выполняться за текущий (неоконченный) рабочий день, а только для предыдущих дней. Процесс можно сделать еще более устойчивым, если использовать галку "Не производить выгрузку без флага запроса выгрузки". В этом случае, SunFlurry не будет производить выгрузку, пока не получит флаг (по умолчанию goods_flagin.txt). В этом флаге 1С указывает период запроса выгрузки. Также со стороны 1С желательно сделать "патч", выгружающий в файл нестандартную команду $$TRANSACTIONSBYDAYLIST вместо стандартной $$$TRANSACTIONSBYDATERANGE. В файле должны быть перечислены только те дни за предыдущие 2 недели, за которые в 1С нет документов отчет о розничных продажах. SunFlurry будет выгружать только эти дни, что полностью позволит исключить дублирование или пропуск продаж в базе 1С. Пример такого файла показан ниже:
$$$TRANSACTIONSBYDATELIST
03.04.2022;04.04.2022;05.04.2022;06.04.2022;07.04.2022;08.04.2022;09.04.2022;10.04.2022;11.04.2022;12.04.2022;13.04.2022;14.04.2022;15.04.2022;16.04.2022;17.04.2022
  • Случай, когда центральная база работает на SunFlurry, и локальная база магазина (с ККМ) работает также на 1C:Розница невозможно настроить по протоколу Фронтол, так как на данный момент такая выгрузка в 1С не поддерживается. Однако, такой обмен можно настроить, к примеру, если локальная база работает на программе Фронтол.
    • Для настройки протокола в центральной базе SunFlurry см. описание первого случая на параграф выше.
    • Для настройки протокола в базе Фронтола, необходимо обратиться к описанию программы Фронтол. Это стандартный обмен для систем такого типа.

Настройка обмена между центральной базой и периферийной базой по протоколу EnterpriseData

Настройка обмена между центральной и периферийной базой по проколу EnterpriseData, обычно производится для связки 1С -- сервер, SunFlurry -- клиент, но также могут использоваться и другие комбинации. Протокол позволяет обмениваться следующими объектами:

  • Справочники (в терминологии 1С): Склады, Банки, ХарактеристикиНоменклатуры, ЕдиницыИзмерения, ШтрихкодыНоменклатуры, БанковскиеСчета, Контрагенты, ФизическиеЛица, Номенклатура, Организации.
  • Документы: ПеремещениеТМЦ, ПКО, РКО, Реализация, РегистрацияТМЦ (списание и оприходование), РеализацияПрочее, ПоступлениеТМЦ, ПоступлениеПрочее, ВозвратОтПокупателя, ВозвратПоставщику, КомплектацияТовара, КорректировкаДолга. В терминологии 1С эти документы соответствуют ВозвратОтКлиента, ВозвратОтКомиссионера, ВозвратОтРозничногоПокупателя, ВозвратКомитенту, ВозвратПоставщику, ЗакупкаПоИмпорту, ПокупкаУПоставщика, ПриемНаКомиссию, РеализацияТоваровУслуг, ОприходованиеТоваров, СписаниеТоваров, СписаниеЗапасов, ОтчетОРозничныхПродажах, ЧекККМ, СчетФактураВыданный, СчетФактураПолученный, ПеремещениеТоваров, ПКОПолучениеНаличныхВБанке, ПКОПоступлениеИзДругойКассы, ПКОПоступлениеИзКассыККМ, ПКОПрочееПоступление, ПКОПрочиеДоходы, ПКОРасчетыСКонтрагентами, ПКОРозничнаяВыручка, РКОВыдачаВДругуюКассу, РКОВыдачаВКассуККМ, РКОНаБанковскийСчет, РКОПрочийРасход, РКОРасчетыСКонтрагентами, СборкаТоваров, КорректировкаДолга.
  • Ввод остатков по накопителям: Касса, ОстаткиТМЦ, Взаиморасчеты. В терминологии 1С эти вводы остатков осуществляются с помощью документов ОстаткиНаличныхДенежныхСредств, ОстаткиСобственныхТМЦ, ОстаткиРасчетовСПокупателямиАвансы, ОстаткиРасчетовСПокупателямиДолги, ОстаткиРасчетовСПоставщикамиАвансы, ОстаткиРасчетовСПоставщикамиДолги.
  • А также: загрузка и выгрузка цен (в терминологии 1С документы УстановкаЦенНоменклатуры и ПереоценкаТоваровВРознице) и обмен флагами удаления объектов (УдалениеОбъекта).

Настройка обмена на стороне 1С сильно зависит от применяемой конфигурации, поэтому для ее осуществления необходимо обратиться к документации 1С. Для настройки на стороне SunFlurry, необходимо зайти в элемент магазина, для которого будет происходить обмен (даже если обмен будет осуществляться для всех документов определенного юр. лица, необходимо добавить протокол обмена в любой из магазинов юр. лица). На закладке "Протоколы обмена", необходимо нажать на кнопку "новый элемент", в появившемся диалоге выбрать "Обмен по протоколу EnterpriseData", сохранить новый элемент с помощью кнопки "Записать", после чего открыть его настройки кнопкой с гаечным ключом в поле "Настройки". В настройках протокола необходимо выбрать кассу (для обмена по всем документам юр. лица, будут выгружаться все кассовые документы юр. лица, вне зависимости от выбранной здесь кассы) и выбрать путь для файлов выгрузки и загрузки. При указании даты начала работы, выгрузки, ранее этой даты будут содержать документы ввода остатков, вместо обычных документов. Также необходимо создать расписание выгрузки и загрузки. Автоматические выгрузки обычно происходят за определенный период, указываемый в переменной "период выгрузки". Для обмена EnterpriseData необходимо указать уникальный код обмена на стороне SunFlurry (код информационной базы) и код обмена на противоположной стороне.

После настройки обмена и начала обмена система будет создавать таблицу сопоставления кодов элементов справочников и документов (сопоставление номеров документов особенно необходимо для документов вводов остатков, которые создаются виртуально и для документов, которые в 1С представлены как два документа, а в SunFlurry, как одни документ или наоборот). Таблицу сопоставления можно открыть с помощью кнопки "Таблица сопоставления" из формы настроек обмена EnterpriseData.

Пример программного заполнения справочника Номенклатура

При создании информационной базы одна из основных задач состоит в заполнении справочника номенклатуры продаваемыми товарами. Рассмотрим вариант заполнения справочника из текстового файла. Этот код можно использовать для создания своей версии загрузки номенклатуры из других источников (xls, xml, txt и пр.). Кусок кода, представленный здесь, можно запустить на закладке "Вычисление и исполнение" панели управления (административной панели) в рабочей программе (чтобы открыть панель управления, используйте пункт главного меню "Общие", "Административная панель").


  //Локальная функция установки цены, используется ниже по тексту
  Function ЛокУстановитьЦену(зН,ТипЦен,Цена,Магазин,ФлПродажнаяЦена)
    Дата:=BegOfDay(Date());

    Ц:=Ref.цЦены;
    Фл:=0;
    If Ц.Find("@Parent,ТипЦен",зН,ТипЦен) Then
      If Ц.Status()=1 Then
        Ц.Mark(0);
      EndIf;
    Else
      Ц.New();
      Ц.Parent(зН);
      Ц.ТипЦен:=ТипЦен;
      Ц.Save();
    EndIf;
    Ц.SetValue("Цена",Цена,Дата);

    //Кроме установки самой цены, создадим запись о том, что ценник для этой цены уже был распечатан
    //Если этого не сделать, необходимо будет хотя бы один раз распечатать ценники, чтобы новые цены начали работать
    If ФлПродажнаяЦена Then
      пЦ:=Ref.цПечатьЦенников;
      If пЦ.Find("@Parent,Магазин",зН,Магазин)=0 Then
        //Создаем
        пЦ.New();
        пЦ.Parent(зН);
        пЦ.Магазин:=Магазин;
        пЦ.ДатаПечати:=Дата;
        пЦ.ОбщаяСкидка:=0;
        пЦ.Save();
      ElseIf _Or(пЦ.ОбщаяСкидка<>0,isEmpty(пЦ.ДатаПечати),пЦ.ДатаПечати<Дата) Then
        пЦ.ДатаПечати:=Дата;
        пЦ.ОбщаяСкидка:=0;
        пЦ.Save();
      EndIf;
    EndIf;
  EndFunction

//Выбрать файл для загрузки
Файл:="";
If Not OpenFileDialog(Имя,"Выберите файл для загрузки:","Файлы txt (*.txt)|*.txt",0) Then
  Exit;
EndIf;
//Загрузить файл в объект Text
Т:=Text.Create(1);
Т.Load(Файл);

//Найдем по коду корневую папку, в которой будем создавать всю структуру папок
аКорневаяПапка:=DB("Ref.тмцНоменклатура","Code","000000000001");

//Найдем магазин, для которого происходит загрузка (требуется для создания цен)
аМагазин:=DB("Ref.рознМагазины","Code","000000000001");

//Единицы измерения (для упрощения примера)
аЕдиницаШт:=DB("Ref.тмцЕдиницыИзмерения","Name","шт");
аЕдиницаКг:=DB("Ref.тмцЕдиницыИзмерения","Name","кг");

//Цикл для каждой строки файла
For i:=1 To Т.Size() Do
  //Допустим, элементы строки разделены знаками табуляции (_TAB)
  //Допустим, файл также содержит папки товаров
  //Допустим, в файле есть внешние коды (артикли), с помощью которых мы можем найти, что уже было загружено, если загрузка была прервана

  //Получить текущую строку файла
  Стр:=Т.GetLine(i);
  СтрНаименование:=TearStr(Стр,_TAB);
  СтрАртикль:=TearStr(Стр,_TAB);
  СтрАртикльПапки:=TearStr(Стр,_TAB);
  ФлЭтоПапка:=Number(TearStr(Стр,_TAB));
  //Предусмотрим случай, когда для отделения дробной части используется запятая
  ЧлЦенаЗакупки:=Number(Replace(TearStr(Стр,_TAB),",","."));
  ЧлЦенаПродажи:=Number(Replace(TearStr(Стр,_TAB),",","."));
  ...

  //Если это новый элемент, создадим его, иначе найдем
  аН:=Ref.тмцНоменклатура;
  If Not аН.Find("ВнешнийТекстовыйКод",СтрАртикль) Then
    аН.New(ФлЭтоПапка);
    аН.СтрАртикль:=ВнешнийТекстовыйКод;
    аН.Save();
  ElseIf Not IsEmpty(аН.Name) Then
    //Пропускаем уже загруженный ранее элемент
    Continue;
  EndIf;

  //Помещаем элемент в нужную папку
  аПапка:=Ref.тмцНоменклатура;
  If IsEmpty(СтрАртикльПапки) Then
    аПапка:=аКорневаяПапка;
  ElseIf Not аПапка.Find("ВнешнийТекстовыйКод",СтрАртикльПапки) Then
    аПапка:=аКорневаяПапка;   
  EndIf;
  аН.Folder(аПапка);

  //Заполним наименование
  аН.Name:=СтрНаименование;
  //Если это папка, остальные реквизиты не будут нужны
  If аН.IsFolder() Then
    аН.Save();
    Continue;    
  EndIf;

  //Заполняем основные свойства товара
  аН.ВидНоменклатуры:=Enum.ВидыНоменклатуры.Товар;
  аН.СтавкаНДС:=?(ЧлСтавкаНДС=10,Enum.СтавкиНДС.НДС10,Enum.СтавкиНДС.НДС20);
  аН.ОбъемЛитров:=ЧлОбъем;
  аН.базМассаНетто:=ЧлМасса;
  //Обычно задана для табачных изделий
  аН.ЦенаМаксимальнаяПродажная:=ЧлЦенаМаксимальнаяПродажная;
  //Обычно задана для некоторых видов алкоголя
  аН.ЦенаМинимальнаяПродажная:=ЧлЦенаМинимальнаяПродажная;

  //Единицы
  аН.флВесовойТовар:=ЧлВесовойТовар;
  If аН.флВесовойТовар Then
    аН.базЕдиница:=аЕдиницаКг;
  Else
    аН.базЕдиница:=аЕдиницаШт;
  EndIf;
  аН.оснЕдиница:=аН.базЕдиница;
  аН.оснКоэффициент:=1;

  //ЕГАИС и пр.
  аН.флАлкогольнаяПродукция:=ЧлАлкогольнаяПродукция;
  аН.флПодлежитПрослеживаемости:=ЧлПодлежитПрослеживаемости;
  If ЧлАлкогольнаяПродукция Then
    аН.ЕГАИСКодАП:=ЧлКодАП;
    аН.флПартионныйУчет:=1;

    //Создадим или найдем элемент справочника тмцПартииТМЦ: аПартия
    //Здесь код опущен для улучшения читаемости
    ...

    аПартия.ЕГАИСКодАП:=ЧлКодАП;
    аПартия.ЕГАИСКодНоменклатуры:=..;
    аПартия.ЕГАИСКодПроизводителя:=..;
    аПартия.ЕГАИСКодСправок:=..;
    аПартия.Производитель:=..;
    аПартия.флМарочныйУчет:=..;
    аПартия.флИмпортнаяПродукция:=..;
    аПартия.флБезУпаковки:=..;
    ...
    аПартия.Save();    
  EndIf;
  If аН.флПодлежитПрослеживаемости Then
    аН.ГИСМТТоварнаяГруппа:=..;
  EndIf;


  //Установка закупочной и продажной цен
  ЛокУстановитьЦену(аН,аМагазин.ТипЦенПоступления,ЧлЦенаЗакупки,аМагазин);
  ЛокУстановитьЦену(аН,аМагазин.ТипЦенРеализации,ЧлЦенаПродажи,аМагазин,1);   

  //Сохраним все изменения в товаре
  аН.Save();
EndDo;