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

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 (в том числе Я.Маркет). Подходит для конфигураций Беларуси.

60000 руб.

05.09.2023    5773    69    70    

54

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

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

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме. Без существенных изменений типовой конфигурации. Проверено с брендами: Интеграция 1С и GEELY Интеграция 1С и HAVAL Интеграция 1С и KIA Интеграция 1С и FORD Интеграция 1С и LADA ГАРАНТИЯ 100% ВНЕДРЕНИЯ!

36000 руб.

03.08.2020    15487    9    16    

9

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

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

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

18000 руб.

19.12.2023    922    4    0    

4

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

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

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

12000 руб.

18.03.2019    30975    108    100    

61

Интеграция 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    17208    6    15    

10

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

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

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

4200 руб.

07.06.2022    14993    41    56    

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