Подключение Smart Server к 1С Предприятие 8.2

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

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

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

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

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

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

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

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

Попытка
ДокОКС.Записать();
Исключение
Рез=Рез+1;
КонецПопытки;

Возврат Рез;
КонецФункции

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

//Формирование файла накладных для 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;;;"
);
КонецЦикла;


//Указываем папку расположения программы Serv1C.exe)
Текст.Записать("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;;;"
);
КонецЦикла;


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

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

//Формирование файла накладных для SMART1С 

Текст = Новый ТекстовыйДокумент();

Текст.ДобавитьСтроку(СкладОрдер.код);

Текст.ДобавитьСтроку("#");

Для Стр=0 По Товары.Количество()-1 Цикл

//Получаем штрих коды

        ШтрихКодСтрока="";

        КолШтрих=0;

        РаздШтрих="";

        Запрос = Новый Запрос("

        |ВЫБРАТЬ ПЕРВЫЕ 18

        |    РегШтрихкоды.ШтрихКод КАК Штрихкод

        |ИЗ

        |    РегистрСведений.Штрихкоды КАК РегШтрихкоды

        |ГДЕ

        |    РегШтрихкоды.Владелец = &Владелец

        |    И (НЕ РегШтрихкоды.ШтрихКод ЕСТЬ NULL)

        |");

    Запрос.УстановитьПараметр("Владелец", Справочники.Номенклатура.НайтиПоКоду(Товары[Стр].Номенклатура.Код));

    РезультатЗапроса = Запрос.Выполнить();

    Если Не РезультатЗапроса.Пустой() Тогда

     РезультатЗапроса = РезультатЗапроса.Выбрать();

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

         КолШтрих=КолШтрих+1;

             Если КолШтрих>1 тогда

            РаздШтрих="|";

            КонецЕсли;

      ШтрихКодСтрока=ШтрихКодСтрока+РаздШтрих+РезультатЗапроса.ШтрихКод;

        КонецЦикла ;

    КонецЕсли;

Запрос = Новый Запрос("

|ВЫБРАТЬ НомЦена.Период, НомЦена.Цена

|ИЗ

|РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаДок, ТипЦен = &ТипЦены И Номенклатура = &номенклатура) КАК НомЦена;");

Запрос.УстановитьПараметр("ДатаДок", ТекущаяДата());

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

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

Запрос.УстановитьПараметр("Номенклатура", Товары[Стр].Номенклатура);

Тов = Запрос.Выполнить().Выбрать();

Пока Тов.Следующий()  Цикл

Если  Тов.Цена<> NULLТогда

цена=Формат(Тов.Цена,"ЧГ=0");

КонецЕсли;

КонецЦикла;

//Добавляем строку с товаром/услугой   

Текст.ДобавитьСтроку(

Товары[Стр].Номенклатура.Код+ ";" +

ШтрихКодСтрока+ ";" +

СокрП(Товары[Стр].Номенклатура) + "; ;" +

СтрЗаменить(цена,",",".") + ";1;" +

"0;0;0;0;0;0;0;1;0;0;1;1;0;;;"

);

КонецЦикла;

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

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