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