Подключение Smart Hub к 1С

Особенности работы с программой Smart HUB и 1С:

  1. Лицензия программы устанавливается на определённое количество подключенных фискальных регистраторов, если к одному рабочему месту кассира (Smart Kassir) подключено несколько аппаратов, то именно это количество должна поддерживать программа Smart Hub.
  2. В 1С код кассы должен совпадать с кодом склада с которым она подключенна.
  3. 1С должна поддерживать несколько учётных записей, так как программа Smart Server 1C использует одну учётную запись.
  4. Версия 1С должно допускать изменение (редактирование и добавление) модулей в конфигурацие.

Открываем конфигурацию 1С, добавляем пользователя «Smart» с правами «Администратор», далее в  конфигурации находим «Общие модули» и добавляем в неё новый модуль «SmartKassir»

Устанавливаете следующие свойства модулю «SmartKassir»:

В модуль  добавляем функцию «SetKL»

Функция SetKL(ДатаД, фирма, склад, ккм, файл) Экспорт
Перем Тов;
Перем ТипЦены;
Перем стНДС;
Перем ШтрихКодСтрока;
Перем КолШтрих;
Перем ДокОКС;
Перем Рез;
Перем Номен;
noerror=0;
Рез=0;
//Ищем уже созданный документ    
есть=0;
ПоискДок = Новый Запрос;
ПоискДок.Текст = "
|ВЫБРАТЬ
|Документ.Ссылка КАК Ссылка
|ИЗ
|Документ.ОтчетОРозничныхПродажах КАК Документ
|ГДЕ
|Документ.ПометкаУдаления = Ложь И
|Документ.Организация = &Организация И
|Документ.Склад = &Склад И
|Документ.КассаККМ = &КассаККМ";

ПоискДок.УстановитьПараметр("Организация", Справочники.Организации.НайтиПоКоду(фирма));
ПоискДок.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоКоду(склад));
ПоискДок.УстановитьПараметр("КассаККМ", Справочники.КассыККМ.НайтиПоКоду(ккм));

Результат = ПоискДок.Выполнить();
Если НЕ Результат.Пустой() Тогда
ВыборкаЗапр = Результат.Выбрать();
    Пока ВыборкаЗапр.Следующий() Цикл
    НужнДок = ВыборкаЗапр.Ссылка;
    ДокОКС=НужнДок.ПолучитьОбъект();
    если есть=0 тогда
        если Лев(ДокОКС.Дата,10)=ДатаД тогда
            есть=1;
            Сообщить("Документ найден");
            Прервать;
        КонецЕсли;
    КонецЕсли;
КонецЦикла;
КонецЕсли;
//Создаём новый документ, если не найден
если есть=0 тогда
ДокОКС=Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();    
ДатаД=СтрЗаменить(ДатаД,".","");
ДокОКС.Дата = Дата(Прав(ДатаД,4),Сред(ДатаД,3,2),Лев(ДатаД,2));
ДокОКС.Организация = Справочники.Организации.НайтиПоКоду(фирма);
ДокОКС.Склад = Справочники.Склады.НайтиПоКоду(склад);
ДокОКС.КассаККМ = Справочники.КассыККМ.НайтиПоКоду(ккм);
ДокОКС.ВидОперации = Перечисления.ВидыОперацийОтчетОРозничныхПродажах.ОтчетККМОПродажах;
ДокОКС.ТипЦен = ТипЦены;
КонецЕсли;        
     
//Загружаем продажи    
таблица = ДокОКС.Товары;
Номен=Справочники.Номенклатура;
Текст= Новый ТекстовыйДокумент();
Текст.Прочитать(файл, КодировкаТекста.ANSI);
круг = Текст.КоличествоСтрок();
Сообщить(файл);
Сообщить(круг);
счетчик=2;
Пока счетчик<круг Цикл
        счетчик=счетчик+1;
        ВремСтрока=Текст.ПолучитьСтроку(счетчик);
Сообщить(ВремСтрока);
        ШтрихКод = Сред(ВремСтрока,(Найти(ВремСтрока,";")+1));
        ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,";")+1));
        ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,";")+1));
        ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,";")+1));
        ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,";")+1));
        ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,";")+1));
        ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,";")+1));
        КодТовара = Лев(ШтрихКод,(Найти(ШтрихКод,";")-1));
       
        //i=0;
        //For i = СтрДлина(КодТовара) To 10 Do
        //    КодТовара="0"+КодТовара;
        //EndDo;
           
        ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,";")+1));
        ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,";")+1));
        Дроби = Лев(ШтрихКод,(Найти(ШтрихКод,";")-1));
        Если Найти(Дроби,",") Тогда
            ЦенаТовара = Лев(ШтрихКод,(Найти(ШтрихКод,",")-1));
            ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,",")+1));
            ЦенаТовара = ЦенаТовара + "." + Лев(ШтрихКод,(Найти(ШтрихКод,";")-1));
            ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,";")+1));
        Иначе
            ЦенаТовара = Лев(ШтрихКод,(Найти(ШтрихКод,";")-1));
            ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,";")+1));
        КонецЕсли;
        Дроби = Лев(ШтрихКод,(Найти(ШтрихКод,";")-1));
        Если Найти(Дроби,",") Тогда
            КоличествоТовара = Лев(ШтрихКод,(Найти(ШтрихКод,",")-1));
            ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,",")+1));
            КоличествоТовара = КоличествоТовара + "." + Лев(ШтрихКод,(Найти(ШтрихКод,";")-1));
            ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,";")+1));
        Иначе
            КоличествоТовара = Лев(ШтрихКод,(Найти(ШтрихКод,";")-1));
            ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,";")+1));
        КонецЕсли;
        Дроби = Лев(ШтрихКод,(Найти(ШтрихКод,";")-1));
        Если Найти(Дроби,",") Тогда
            СуммаТовара = Лев(ШтрихКод,(Найти(ШтрихКод,",")-1));
            ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,",")+1));
            СуммаТовара = СуммаТовара + "." + Лев(ШтрихКод,(Найти(ШтрихКод,";")-1));
            ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,";")+1));
        Иначе
            СуммаТовара = Лев(ШтрихКод,(Найти(ШтрихКод,";")-1));
            ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,";")+1));
        КонецЕсли;
        ШтрихКод = Сред(ШтрихКод,(Найти(ШтрихКод,";")+1));
        Если  Лев(ШтрихКод,(Найти(ШтрихКод,";")-1)) = "" Тогда
            Скидка = "0";
            Иначе
        Скидка = Лев(ШтрихКод,(Найти(ШтрихКод,";")-1));
        КонецЕсли;
        Товар = Номен.НайтиПоКоду(КодТовара,0);
        Если Товар<>Номен.ПустаяСсылка() Тогда        
        Попытка
            Нов = таблица.добавить();
            Нов.Номенклатура=Товар;
            Нов.Цена=ЦенаТовара;
            Нов.Количество=КоличествоТовара;
            Нов.ПроцентСкидкиНаценки = Скидка;
            Нов.Сумма=СуммаТовара;
            Нов.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
            спрЕдИзм=Справочники.ЕдиницыИзмерения;
            ЕдИзм=спрЕдИзм.Выбрать();
            Пока ЕдИзм.Следующий() Цикл
                Если ЕдИзм.Владелец = Товар Тогда                       
                    Нов.ЕдиницаИзмерения=ЕдИзм.Ссылка;
                    Нов.Коэффициент=ЕдИзм.Коэффициент;
                КонецЕсли;
            КонецЦикла;
        Сообщить(Нов.Номенклатура);            
        Рез=Рез+СуммаТовара;    
        Исключение
        noerror=noerror+1;
        КонецПопытки;

        КонецЕсли;
КонецЦикла;


Попытка
ДокОКС.Записать();
Исключение
noerror=noerror+1;
КонецПопытки;
Сообщить("Итого: "+Рез);
Если noerror>0 Тогда
Рез="";
КонецЕсли;
    
Возврат Рез;
КонецФункции

Для отправки информации о поступлении товара находим документ: «ПеремещениеТоваров», открываем "Основной модуль объекта", далее в модуле объекта находим процедуру "ОбработкаПроведения" и в конец добавляем код:

//Формирование файла поступления товаров для Smart Kassir
Текст = Новый ТекстовыйДокумент();
Текст.ДобавитьСтроку(СтрЗаменить(СкладПолучатель.код," ",""));
Текст.ДобавитьСтроку("#");

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

Запрос = Новый Запрос("
|ВЫБРАТЬ НомЦена.Период, НомЦена.Цена
|ИЗ
|РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаДок, ТипЦен = &ТипЦены И Номенклатура = &номенклатура) КАК НомЦена;");
                         
Запрос.УстановитьПараметр("ДатаДок", ТекущаяДата());
Запрос.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоКоду(СкладПолучатель.Код));

СкладЦены     =  Справочники.Склады.НайтиПоКоду(СкладПолучатель.Код);
ТипЦены =  СкладЦены.ТипЦенРозничнойТорговли;
Запрос.УстановитьПараметр("ТипЦены", ТипЦены);

Запрос.УстановитьПараметр("Номенклатура", Товары[Стр].Номенклатура);
Тов = Запрос.Выполнить().Выбрать();
Пока Тов.Следующий()  Цикл
Если  Тов.Цена<> NULL Тогда
цена=Формат(Тов.Цена,"ЧГ=0");
КонецЕсли;
КонецЦикла;

ид=0;
ид= Число(Товары[Стр].Номенклатура.Код);
КодТовара = Формат(ид,"ЧГ=0");
//КодТовара = Товары[Стр].Номенклатура.Код;
   
//Добавляем строку с товаром/услугой    
Текст.ДобавитьСтроку(
КодТовара + ";" +
ШтрихКодСтрока+ ";" +
СокрП(Товары[Стр].Номенклатура) + "; ;" +
СтрЗаменить(цена,",",".") + ";1;" +
"0;0;0;0;0;0;0;1;0;0;1;1;0;;;"+Товары[Стр].Номенклатура.БазоваяЕдиницаИзмерения + ";"
);
КонецЦикла;

//Указываем папку расположения  Smart HUB
Текст.Записать("C:\Smart\z"+Номер+".1c","windows-1251");

Для документа «Оприходования»

//Формирование файла накладных для SMART 1С   
Текст = Новый ТекстовыйДокумент();
Текст.ДобавитьСтроку(СтрЗаменить(Склад.код," ",""));
Текст.ДобавитьСтроку("#");

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

Запрос = Новый Запрос("
|ВЫБРАТЬ НомЦена.Период, НомЦена.Цена
|ИЗ
|РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаДок, ТипЦен = &ТипЦены И Номенклатура = &номенклатура) КАК НомЦена;");
                         
Запрос.УстановитьПараметр("ДатаДок", ТекущаяДата());
Запрос.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоКоду(Склад.Код));

СкладЦены     =  Справочники.Склады.НайтиПоКоду(Склад.Код);
ТипЦены =  СкладЦены.ТипЦенРозничнойТорговли;
Запрос.УстановитьПараметр("ТипЦены", ТипЦены);

Запрос.УстановитьПараметр("Номенклатура", Товары[Стр].Номенклатура);
Тов = Запрос.Выполнить().Выбрать();
Пока Тов.Следующий()  Цикл
Если  Тов.Цена<> NULL Тогда
цена=Формат(Тов.Цена,"ЧГ=0");
КонецЕсли;
КонецЦикла;

    
//Добавляем строку с товаром/услугой    
Текст.ДобавитьСтроку(
Товары[Стр].Номенклатура.Код+ ";" +
ШтрихКодСтрока+ ";" +
СокрП(Товары[Стр].Номенклатура) + "; ;" +
СтрЗаменить(цена,",",".") + ";1;" +
"0;0;0;0;0;0;0;1;0;0;1;1;0;;;"+Товары[Стр].Номенклатура.БазоваяЕдиницаИзмерения + ";"
);
КонецЦикла;


//Указываем папку расположения программы sHUB.exe)
Текст.Записать("C:\Smart\z"+Номер+".1c","windows-1251");

Для документа «ПоступлениеТоваровУслуг»

//Формирование файла накладных для SMART 1С   
Текст = Новый ТекстовыйДокумент();
Текст.ДобавитьСтроку(СкладОрдер.код);
Текст.ДобавитьСтроку("#");

Для Стр=0 По Товары.Количество()-1 Цикл
//Получаем штрих коды
        ШтрихКодСтрока=""; 
        КолШтрих=0;
        РаздШтрих="";
        Запрос = Новый Запрос("
        |ВЫБРАТЬ ПЕРВЫЕ 18
        |    РегШтрихкоды.ШтрихКод КАК Штрихкод
        |ИЗ
        |    РегистрСведений.Штрихкоды КАК РегШтрихкоды
        |ГДЕ
        |    РегШтрихкоды.Владелец = &Владелец
        |    И (НЕ РегШтрихкоды.ШтрихКод ЕСТЬ NULL)
        |");
    Запрос.УстановитьПараметр("Владелец", Справочники.Номенклатура.НайтиПоКоду(Товары[Стр].Номенклатура.Код));
    РезультатЗапроса = Запрос.Выполнить();
    Если Не РезультатЗапроса.Пустой() Тогда
     РезультатЗапроса = РезультатЗапроса.Выбрать();
     Пока РезультатЗапроса.Следующий() Цикл
         КолШтрих=КолШтрих+1;
             Если КолШтрих>1 тогда
            РаздШтрих="|";
            КонецЕсли;
      ШтрихКодСтрока=ШтрихКодСтрока+РаздШтрих+РезультатЗапроса.ШтрихКод;
        КонецЦикла ;
    КонецЕсли;
    
отдел1="0";отдел=1;
тип=0;
//Дополнительные поля для ЕГАИС
тара="";
кодВида="";
алког="";
ЗапросЕгаис = Новый Запрос;
ЗапросЕгаис.Текст =
"ВЫБРАТЬ
                      |    ЗначенияСвойствОбъектов.Свойство,
                      |    ЗначенияСвойствОбъектов.Значение
                      |ИЗ
                      |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                      |ГДЕ
                      |    ЗначенияСвойствОбъектов.Объект = &Номенк";
ЗапросЕгаис.УстановитьПараметр("Номенк",Справочники.Номенклатура.НайтиПоКоду(Товары[Стр].Номенклатура.Код));
Выборка = ЗапросЕгаис.Выполнить().Выгрузить();
Для Каждого Строка Из Выборка Цикл
если Найти(НРег(Строка.Свойство),"ёмкость")>0 тогда
тара=Строка.Значение;
конецесли;
если Найти(НРег(Строка.Свойство),"код вида")>0 тогда
кодВида=Строка.Значение;  
конецесли;
если Найти(НРег(Строка.Свойство),"алког")>0 тогда
алког=Строка.Значение;
конецесли;
если Найти(НРег(Строка.Свойство),"отдел")>0 тогда
отдел1=Строка.Значение;  
конецесли;
КонецЦикла;
//Делаем отметку весового товара
ТоварВес=Справочники.Номенклатура.НайтиПоКоду(Товары[Стр].Номенклатура.Код);
если ТоварВес.Весовой тогда
тип=2;
конецЕсли;
//Получение отдела
если отдел1<>"0" тогда
отдел=отдел1;       
иначе
отдел=1;
если СтрДлина(отдел)<8 тогда
отдел=Число(СтрЗаменить(ТоварВес.Родитель.Код," ",""));
конецесли;
конецесли;
///////////////////////////////
    
//Добавляем строку с товаром/услугой    
Если Товары[Стр].Цена>0 тогда
Текст.ДобавитьСтроку(
СокрЛП(Товары[Стр].Номенклатура.Код)+ ";" +
ШтрихКодСтрока+ ";" +
СокрП(Товары[Стр].Номенклатура) + "; ;" +
СокрЛП(Формат(Товары[Стр].Цена, "Ч15.2")) + ";" +     
СтрЗаменить(СокрЛП(Товары[Стр].Количество)," ","") + ";" +
отдел+";0;0;0;0;0;0;0;0;0;0;0;"+тип+";;;"+тара+";"+кодВида+";"+алког+";");
иначе
Сообщить("Нет розничной цены: "+Товары[Стр].Номенклатура);
КонецЕсли;
КонецЦикла;

//Указываем папку расположения программы sHUB.exe)

Текст.Записать("C:\Smart\z"+Номер+".1c","windows-1251");



Всего просмотров: 6652
Оценка пользователей: (не забудьте оценить)
Проголосовали: 3895, средняя оценка: 2,9

Комментарии:
При публикации комментариев, не допускается использование html кодов, размещение ссылок, не цензурных слов и т.п. Текст не на русском языке или на транслите публиковаться не будет!

Имя:    E-mail: