Сайт для работы с кассами УНФ

19.05.21

Интеграция - Сайты и интернет-магазины

Небольшой сайт работает с кассами УНФ. Авторизация под пользователем 1С, просмотр баланса всех касс, документов по кассе, добавление и редактирование. Классическая разработка на JS и PHP работает с данными 1С через HTTP сервис.

Скачать файлы

Наименование Файл Версия Размер
Сайт для работы с кассами УНФ:
.rar 7,80Mb
0
.rar 7,80Mb Скачать

Хочу предложить пример создания создания сайта на классических JS и PHP, работающего с информацией из 1С. В коде PHP формируются скрипты 1С, которые передаются на выполнение в HTTP сервис конфигурации. Сервис возвращает сайту запрошенную информацию для вывода в браузер. Предложенная разработка была первым шагом в разработке реально действующего сайта.

Сначала необходимо распаковать приложенный архив в папку корня апача. Имя папки надо записать в файл config.php.

Далее создать HTTP сервис и загрузить в его метод следующий код:


// Выполняет запрос к базе данных из тела POST запроса на
// http://localhost/<base>/hs/<Корневой URL>
Функция ЗапросGet(Запрос)
	Контент = НРег(Запрос.Заголовки.Получить("Content-Type"));
	ВозвращатьСтруктуру = НРег(Запрос.Заголовки.Получить("Structure"));
	Метод = Запрос.HTTPМетод;
	HTTPОтвет = Новый HTTPСервисОтвет(400);
	
	Если Контент = Неопределено ИЛИ СтрНайти(Контент, "charset=windows-1251") > 0 Тогда 
		ТекстЗапроса = Запрос.ПолучитьТелоКакСтроку(КодировкаТекста.ANSI);
	ИначеЕсли СтрНайти(Контент, "charset=utf-8") > 0 Тогда
		ТекстЗапроса = Запрос.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
	Иначе
		ТекстЗапроса = Запрос.ПолучитьТелоКакСтроку(КодировкаТекста.ANSI);  //
	КонецЕсли;
	Результат = ПростойЗапрос(ТекстЗапроса, HTTPОтвет, ВозвращатьСтруктуру);
	Возврат Результат;
КонецФункции

Функция ПростойЗапрос(ТекстЗапроса, HTTPОтвет, ВозвращатьСтруктуру)
	Попытка
		Если ВРег(Лев(ТекстЗапроса, 7)) = "ВЫБРАТЬ" Тогда
			ЗапросСКЛ = Новый Запрос;
			ЗапросСКЛ.Текст = ТекстЗапроса;
			Рез = ЗапросСКЛ.Выполнить();
			Колонки = Рез.Колонки;
			ТЗ = Рез.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
			Итог = Новый Массив;
			Пока ТЗ.Следующий() Цикл
				Если ЗначениеЗаполнено(ТЗ.Группировка()) Тогда
					ИмяГруппы = Строка(ТЗ[ТЗ.Группировка()]);
					МассивГруппировок = Новый Массив;
					МассивГруппировок.Добавить(ТЗ.Группировка());
					Рез = ВыдатьДочерниеЗаписи(ТЗ.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам), Колонки, МассивГруппировок);
					Соответствие = Новый Соответствие;
					Соответствие.Вставить(ИмяГруппы, Рез);
					Итог.Добавить(Соответствие);
				ИначеЕсли ВозвращатьСтруктуру = "true" Тогда
					СтруктураСтрока = Новый Структура;
					Для ИндексТЗ = 0 по Колонки.Количество() - 1 Цикл
						СтруктураСтрока.Вставить(Колонки[ИндексТЗ].Имя, ТЗ[ИндексТЗ])
					КонецЦикла;
					Итог.Добавить(СтруктураСтрока);
				Иначе 
					МассивСтрока = Новый Массив;
					Для ИндексТЗ = 0 по Колонки.Количество() - 1 Цикл
						МассивСтрока.Добавить(ТЗ[ИндексТЗ])
					КонецЦикла;
					Итог.Добавить(МассивСтрока);
				КонецЕсли;
			КонецЦикла;
					
			ЗаписьJSON = Новый ЗаписьJSON; 
			ЗаписьJSON.УстановитьСтроку();
			ЗаписатьJSON(ЗаписьJSON, Итог); 
			Результат = ЗаписьJSON.Закрыть();
		Иначе
			Результат = "";
			Выполнить(ТекстЗапроса);
		КонецЕсли;
		HTTPОтвет.КодСостояния = 200;
	Исключение
		Инфо = ИнформацияОбОшибке();
		ЗаписьЖурналаРегистрации("Ошибка HTTP-сервиса", УровеньЖурналаРегистрации.Ошибка,,
		    Инфо.Описание, ПодробноеПредставлениеОшибки(Инфо) + Символы.ПС + Символы.ПС + ТекстЗапроса);
		Результат = КраткоеПредставлениеОшибки(Инфо);
		HTTPОтвет.КодСостояния = 500;
	КонецПопытки;
	
	HTTPОтвет.УстановитьТелоИзСтроки(Результат);
	Возврат HTTPОтвет;
КонецФункции

Функция ВыдатьДочерниеЗаписи(ТЗ, Колонки, МассивГруппировок)
	МассивГруппы = Новый Массив;
	Пока ТЗ.Следующий() Цикл
		ИмяГруппы = Строка(ТЗ[ТЗ.Группировка()]);
		Если ЗначениеЗаполнено(ТЗ.Группировка()) Тогда
			МассивГруппировок.Добавить(ТЗ.Группировка());
			Рез = ВыдатьДочерниеЗаписи(ТЗ.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам), Колонки, МассивГруппировок);
			Соответствие = Новый Соответствие;
			Соответствие.Вставить(ИмяГруппы, Рез);
			МассивГруппы.Добавить(Соответствие);
		Иначе	
			МассивСтрока = Новый Массив;
			Для ИндексТЗ = 0 по Колонки.Количество() - 1 Цикл
				Если МассивГруппировок.Найти(Колонки[ИндексТЗ].Имя) = Неопределено Тогда
					МассивСтрока.Добавить(ТЗ[ИндексТЗ])
				КонецЕсли;
			КонецЦикла;
			МассивГруппы.Добавить(МассивСтрока);
		КонецЕсли;
	КонецЦикла;
	Возврат МассивГруппы; 
КонецФункции

Корневой URL этого метода прописать в файл config.php.

Функция принимает POST запрос, в теле которого передаётся скрипт 1С. Запрос формируется следующей php функцией:

private function query1C($query, $toJSON = true, $Structure = false)
{
    if ($curl = curl_init()) {
        curl_setopt($curl, CURLOPT_URL, HTTP_1C);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($curl, CURLOPT_USERPWD, USERPWD_1C);
        curl_setopt($curl, CURLOPT_HTTPHEADER, ["Content-Type: text/plain; charset=utf-8", "Structure: ".($Structure ? 'true' : 'false')]);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $query);

        $result = $toJSON ? json_decode(curl_exec($curl), JSON_UNESCAPED_UNICODE) : curl_exec($curl);
        curl_close($curl);
    } else {
        $result = false;
    }

    return $result;
}

И, например, получение списка касс:

$json = $this->query1C("ВЫБРАТЬ
	Кассы.Код КАК code,
	Кассы.Наименование КАК name
ИЗ
	Справочник.Кассы КАК Кассы
ГДЕ
	НЕ Кассы.ПометкаУдаления", false, true);

Создать пользователя с административными правами и правами на работу с кассовыми документами. Логин и пароль этого пользователя записать в config.php.

Опубликовать базу.

Вызвать сайт по адресу http://<адрес>/<папка>/index.php. Ввести логин и пароль какого-нибудь пользователя 1С. Здесь следует учесть, что работа с базой 1С будет вестись с правами пользователя указанного в config.php. Пользователь, указанный на странице авторизации, может не обладать правами работы с кассой.

 

Разработка тестировалась на Windows Server 2012 R2 Standard Edition

1С:Предприятие 8.3 (8.3.16.1063)

Управление нашей фирмой, редакция 1.6. 

PHP Version 7.1.5

Apache/2.4.37

HTTP-сервис Сайт JavaScript PHP УНФ web

См. также

API-интеграция 1С с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress для УТ11, КА2, ERP2, УНФ, БП3, Розница, УТ10, УПП1.3

Сайты и интернет-магазины Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Беларусь Россия Казахстан Управленческий учет Платные (руб)

Расширение для интеграции с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress. При помощи расширения поддерживаются следующие методы: обмен остатками товаров, обмен ценами, обработка заказов, печать стикеров, загрузка отчетов комиссионеров по API (в том числе Я.Маркет).

60000 руб.

05.09.2023    2333    20    37    

24

Обмен данными с сайтом. БП 3.0

Оптовая торговля Розничная торговля Сайты и интернет-магазины Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Обмен данными с сайтом на платформе 1С:Битрикс (и подобными) для 1С: Бухгалтерия предприятия 3.0.

12000 руб.

18.03.2019    29871    105    99    

57

Выгрузка заказов из 1С в MEASOFT (ранее "Курьерская служба 2008") [РАСШИРЕНИЕ]

Сайты и интернет-магазины Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Платные (руб)

Данный модуль предоставляет возможность выгружать заказы из 1С: Управление торговлей 11 версии в "MEASOFT" (ранее "Курьерская служба 2008").

9600 руб.

27.04.2022    10420    9    3    

6

Выгрузка для АВИТО

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 Россия Платные (руб)

Выгрузка товаров услуг из 1С для сайта "Авито" раздел "Автозагрузка" выполнена в виде обработки. Обработка подходит для конфигураций УТ, УНФ и Розница. Данная обработка позволяет создавать шаблон с объявлениями для "Авито" - "Автозагрузка".

4200 руб.

07.06.2022    13865    39    56    

32

Sync1C: Синхронизация 1С и OpenCart

Оптовая торговля Розничная торговля Сайты и интернет-магазины Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Внешняя обработка для обмена данными с интернет-магазином OpenCart. Позволяет быстро наполнить магазин товарами, затем обновлять цены и добавлять новые товары. Далее можно средствами OpenCart настраивать и дополнять карточки товаров как надо для магазина, при этом связь товаров с 1С не теряется.

3840 руб.

30.03.2018    42714    80    137    

84

SALE! 20%

Интеграция API b2b.4tochki.ru (Форточки)

Прайсы Оптовая торговля Сайты и интернет-магазины Платформа 1С v8.3 Оперативный учет Управляемые формы 1С:Управление торговлей 11 Транспорт, автопарки, такси Управленческий учет Платные (руб)

Внешняя обработка адаптирована для УТ 11, предназначена для наполнения вашей базы данных товарами и сопутствующей информацией, предоставляемой b2b.4tochki.ru, обновления остатков и цен.

8160 6528 руб.

31.01.2020    28629    9    7    

12
Оставьте свое сообщение