Подключение Smart Hub к 1С
Особенности работы с программой Smart HUB и 1С:
-
Лицензия программы устанавливается на определённое количество подключенных фискальных регистраторов, если к одному рабочему месту кассира (Smart Kassir) подключено несколько аппаратов, то именно это количество должна поддерживать программа Smart Hub.
-
В 1С код кассы должен совпадать с кодом склада с которым она подключенна.
-
1С должна поддерживать несколько учётных записей, так как программа Smart Server 1C использует одну учётную запись.
-
Версия 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");
Всего просмотров: 6576 Оценка пользователей: (не забудьте оценить) Проголосовали: 3828, средняя оценка: 2,9
Комментарии: При публикации комментариев, не допускается использование html кодов, размещение ссылок, не цензурных слов и т.п. Текст не на русском языке или на транслите публиковаться не будет!
|
|
|