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

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С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Беларусь Россия Управленческий учет Платные (руб)

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

59990 руб.

05.09.2023    8537    128    74    

83

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

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

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15970    13    18    

13

Оплата покупок "Долями" в 1С:Розница 2.3 (для работы с сервисом dolyame.ru)

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

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку.

18000 руб.

19.12.2023    1644    13    3    

11

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

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

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

12000 руб.

18.03.2019    31584    112    100    

64

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17966    9    15    

12

Универсальный парсер интернет-магазинов

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

С того времени, как я начал парсить сайты, прошло много лет. За это время я спарсил более 100 сайтов и записал эти товары в 1С. В итоге на свет появился универсальный парсер, который поможет Вам спарсить интернет-магазин и при этом не написать ни строчки кода.

9600 руб.

19.10.2018    52297    220    101    

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