Сегодня

Информационный киоск покупателя на основе офисного ПК и программы 1С


Инфокиоски, безусловно, вещь нужная и полезная. Они просты и интуитивно понятны в управлении. Благодаря им можно оперативно получить, например, информацию об актуальной цене товара в торговом зале. Но далеко не все они в состоянии "сходу" начать работать в связке с программой 1С:Предприятие "Управление торговлей" без специализированного программного обеспечения, дополнительных настроек и определенных навыков системного администрирования, конфигурирования и программирования

инфокиоск


Компания 1С с партнерами, а также независимые от 1С разработчики софта предлагают широкий спектр отраслевых решений. Конфигурация "Информационный киоск", продаваемая под крылом ООО "Инфостарт" - одно из подобных решений. Но за все надо платить. И за прайс-чекеры на Linux'е с цветным ЖК монитором и локальной базой данных и за конфигурацию "Информационный киоск" с дополнительными обработками по переносу данных. Цена вопроса достаточно высока и оформляется в приличную сумму. Один информационный киоск, по самым оптимистичным расчетам, обойдется в 30000 - 35000 рублей.

конфигурация 1С инфокиоск

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

В нашем распоряжении есть

1. Лицензионная программа 1С:Предприятие "Управление Торговлей" на платформе 8.2, работающая в клиент-серверном варианте в СУБД PostgreSQL на сервере Windows Server 2012
2. Давно снятая с продажи, но не с поддержки конфигурация "Торговля и Склад" 7.7. Приобретена была много лет назад.
3. Очень бюджетный ПК на базе процессора AMD A4-5300 с твердотельным жестким диском 60 Гб и модулем оперативной памяти 2 Гб. Общая стоимость ПК - 8000 руб
4. Монитор 18.5 дюймов Acer V193HQLHb - цена 4000 руб.
5 Сканер штрих-кода Mindeo MD-2030 - цена 2000 руб.
Затраты составили 14000 руб. Но если в организации есть старенький ПК и монитор, то ... в общем все понятно и без комментариев.

Что надо сделать в программе 1С "Управление торговлей" 8.х

подслушано в Аннинском районе:
За четыре месяца наступившего года в Аннинском районе родилось 50 детей
В подавляющем большинстве инфокиоски работают в режиме периодической загрузки данных из центральной базы данных. Выгрузку из программы 1С реализуем посредством объекта "Текст" в обычный текстовый файл. Для работы в автоматическом режиме заводим в базе нового пользователя robotik и устанавливаем для него розничный тип цен по умолчанию. Внешнюю обработку "Выгрузка в информационный киоск" (выгрузка-в-киоск.epf) можно скачать по ссылке в конце статьи. Если конфигурация снята с поддержки, проще и быстрее будет вставить в конец процедуры "ПриНачалеРаботыСистемы" следующий код

Пользователь = глЗначениеПеременной("глТекущийПользователь");
Если СокрЛП(Пользователь) = "robotik" Тогда
ТипЦеныДляЗапроса = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(Пользователь, "ОсновнойТипЦенПродажи");
Запрос = Новый Запрос;
ТекстЗапроса = "
|ВЫБРАТЬ
|СправочникНоменклатура.Ссылка,
|ЕстьNULL(ОстаткиТовара.КоличествоОстаток,0) КАК КоличествоОстаток,
|СправочникНоменклатура.Наименование,
|СправочникНоменклатура.Артикул,
|СправочникНоменклатура.БазоваяЕдиницаИзмерения,
|ЦеныНоменклатурыСрезПоследних.Номенклатура,
|ЦеныНоменклатурыСрезПоследних.ТипЦен,
|ЦеныНоменклатурыСрезПоследних.Цена,
|РегистрШтрихКоды.Штрихкод КАК ШтрихКод
|ИЗ
|Справочник.Номенклатура КАК СправочникНоменклатура
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата,) КАК ЦеныНоменклатурыСрезПоследних
|ПО СправочникНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка
|Полное Соединение РегистрНакопления.ТоварыВРознице.Остатки(&Дата,) КАК ОстаткиТовара
|ПО СправочникНоменклатура.Ссылка = ОстаткиТовара.Номенклатура
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК РегистрШтрихКоды
|ПО СправочникНоменклатура.Ссылка = РегистрШтрихКоды.Владелец
|ГДЕ
|ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦеныДляЗапроса";
Запрос.УстановитьПараметр("ТипЦеныДляЗапроса",ТипЦеныДляЗапроса);
Запрос.УстановитьПараметр("Дата", ТекущаяДата());
//Запрос.УстановитьПараметр("Товар",Товар);
Запрос.Текст = ТекстЗапроса;
РезультатЗапроса = Запрос.Выполнить();
ТЗ = РезультатЗапроса.Выгрузить();
Текст = Новый ТекстовыйДокумент;
Текст.Записать("D:\1.txt", КодировкаТекста.ANSI, Символы.ПС);
Текст.Очистить();
НовыйСчетчик = 0;
КолСтрок = ТЗ.Количество()-1;
Для л = 0 По КолСтрок Цикл
Если СокрЛП(ТЗ[л].Штрихкод) = "" Тогда
Продолжить;
Иначе
Если (ТЗ[л].КоличествоОстаток) > 0 Тогда
НовыйСчетчик = НовыйСчетчик + 1;
ИнформацияОтоваре = СокрЛП(ТЗ[л].Наименование) + "#####" + ТЗ[л].Цена + "$$$$$" + ТЗ[л].БазоваяЕдиницаИзмерения + "*****" + ТЗ[л].Штрихкод + "?????";
Сообщить(ИнформацияОтоваре);
Текст.ДобавитьСтроку(ИнформацияОтоваре);
Сообщить(ТЗ[л].КоличествоОстаток);
Иначе
Продолжить;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Сообщить(НовыйСчетчик);
Текст.Записать("\\Kiosk1\1\1.txt", КодировкаТекста.ANSI, Символы.ПС);
ЗавершитьРаботуСистемы(Истина);
КонецЕсли;

Данный фрагмент кода позволяет выполнить запрос к базе данных и, получив данные о наименовании, штрих-коде, розничной цене и остатках товаров по региструТоварыВРознице, записать информацию в текстовый файл "1.txt", который расположен в открытой для общего доступа папке "1" на ПК "Kiosk1".

Что надо сделать в программе 1С "Торговля и Склад" 7.7

Файл сформирован, остается только залить данные в подготовленную (можно в абсолютно чистую или в демо) базу "Торговля и Склад" 7.7, которая была заблаговременно установлена на ПК Kiosk1. В базе должны быть зарегистрированы два пользователя "1" и "robot" Загрузка из "1.txt" выполняется с помощью внешней или встроенной обработки "Загрузка в информационный киоск" (загрузка-в-киоск.ert), которую можно скачать по ссылке в конце статьи. Лучший вариант - вставить в процедуру глобального модуля "ПриНачалеРаботыСистемы" следующий код

Если СокрЛП(глПользователь) = "robot" Тогда
СпрКиоскПокупателя = СоздатьОбъект("Справочник.Номенклатура");
СпрКиоскПокупателя.ВыбратьЭлементы();
Пока СпрКиоскПокупателя.ПолучитьЭлемент() = 1 Цикл
СпрКиоскПокупателя.Удалить(1);
КонецЦикла;
Сообщить("Элементы справочника удалены");
СпрЕдиницы = СоздатьОбъект("Справочник.Единицы");
СпрОКЕИ = СоздатьОбъект("Справочник.ОКЕИ");
ВыбФайл="C:\1\"+"1.txt";
Если ФС.СуществуетФайл(ВыбФайл) = 1 Тогда
Текст = СоздатьОбъект("Текст");
Текст.Открыть(ВыбФайл);
НомерСтроки = 0;
Пока НомерСтроки < Текст.КоличествоСтрок() Цикл
НомерСтроки = НомерСтроки + 1;
Стр = Текст.ПолучитьСтроку(НомерСтроки);
Поз = Найти(Стр, "#####");
Если Поз > 0 Тогда
НаименованиеТовара = Лев(Стр, Поз - 1);
СтрБезНаименованияТовара = СтрЗаменить(Стр, "#####",Симв(0));
СтрБезНаименованияТовара = СтрЗаменить(СтрБезНаименованияТовара,НаименованиеТовара,Симв(0));
КонецЕсли;
Поз = Найти(СтрБезНаименованияТовара, "$$$$$");
Если Поз > 0 Тогда
ЦенаТовара = Лев(СтрБезНаименованияТовара, Поз - 1);
СтрБезЦеныТовара = СтрЗаменить(СтрБезНаименованияТовара, "$$$$$",Симв(0));
СтрБезЦеныТовара = СтрЗаменить(СтрБезЦеныТовара,ЦенаТовара,Симв(0));
КонецЕсли;
Поз = Найти(СтрБезЦеныТовара, "*****");
Если Поз > 0 Тогда
ЕдИзмТовара = Лев(СтрБезЦеныТовара, Поз - 1);
СтрБезЕдИзмТовара = СтрЗаменить(СтрБезЦеныТовара, "*****",Симв(0));
СтрБезЕдИзмТовара = СтрЗаменить(СтрБезЕдИзмТовара,ЕдИзмТовара,Симв(0));
КонецЕсли;
Поз = Найти(СтрБезЕдИзмТовара, "?????");
Если Поз > 0 Тогда
ШКТовара = Лев(СтрБезЕдИзмТовара, Поз - 1);
КонецЕсли;
СпрКиоскПокупателя.Новый();
СпрКиоскПокупателя.Наименование = СокрЛП(НаименованиеТовара);
СпрКиоскПокупателя.Артикул = СокрЛП(ШКТовара);
СпрКиоскПокупателя.Комментарий = СокрЛП(ЦенаТовара);
СпрКиоскПокупателя.ОсновнаяЕдиница = "";
СпрКиоскПокупателя.Записать();
СпрЕдиницы.ИспользоватьВладельца(СпрКиоскПокупателя.ТекущийЭлемент());
СпрЕдиницы.Новый();
СпрЕдиницы.Наименование = ЕдИзмТовара;
СпрЕдиницы.Вес = 0;
СпрЕдиницы.Коэффициент = 0;
Если СпрОКЕИ.НайтиПоНаименованию(СокрЛП(ЕдИзмТовара),0,0) = 1 Тогда
СпрЕдиницы.ОКЕИ = СпрОКЕИ.ТекущийЭлемент();
СпрЕдиницы.ШтрихКод = ШКТовара;
//Сообщить(СпрЕдиницы.ШтрихКод);
СпрЕдиницы.Записать();
КонецЕсли;
СпрКиоскПокупателя.БазоваяЕдиница = СпрЕдиницы.ТекущийЭлемент();
СпрКиоскПокупателя.Записать();
КонецЦикла;
Сообщить("Загружено " + НомерСтроки + " элементов");
ЭтотФайл = 1;
Иначе
Сообщить("Файл "+ВыбФайл+" не существует", "!");
КонецЕсли;
ЗавершитьРаботуСистемы(0);
КонецЕсли;

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

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

"C:\Program Files (x86)\1cv82\8.2.11.236\bin\1cv8.exe" ENTERPRISE /S "SERVER2:1541\test" /N "robotik"

1. C:\Program Files (x86)\1cv82\8.2.11.236\bin\1cv8.exe - путь к файлу запуска платформы 1С
2. ENTERPRISE - режим запуска (1С:Предприятие)
3. S - клиент-серверный вариант
4. SERVER2 - имя сервера
5. 1541 - IP порт
6. test - имя информационной базы
7. robotik - пользователь
8. пароля у пользователя robotik нет (пустой)

Аналогично, для загрузки в программу 1с 7.7. "Торговля и Склад" используется файл примерно следующего содержания

"C:\Program Files\1Cv77\BIN\1cv7.exe" ENTERPRISE /dC:\kiosk /nrobot

1. C:\Program Files\1Cv77\BIN\1cv7.exe - путь к файлу запуска платформы 1С
2. ENTERPRISE - режим запуска (1С:Предприятие)
3. C:\kiosk - месторасположение ИБ 1с 7.7
4. robot - пользователь
5. пароля у пользователя robot нет (пустой)

Работа информационного киоска на базе ПК в программе 1С "Торговля и Склад" 7.7 выполняется под пользователем "1". Чтобы информация о товаре, выводимая в окно сообщений была более наглядной, необходимо в настройках параметров системы на закладке "Интерфейс" увеличить для "Окна сообщений" шрифт до приемлемых размеров (28 - 36) и увеличить высоту окна по максимуму.

1c 7.7

Скачать обработки одним файлом

все материалы текущего раздела


Каталог публикаций