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

19.05.21

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Сайт для работы с кассами УНФ:
.rar 7,80Mb
0
0 Скачать (3 SM) Купить за 2 450 руб.

Хочу предложить пример создания создания сайта на классических 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

См. также

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

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку. Поддерживает работу от разных юридических лиц. Работа: в составе РИБ, отдельно от РИБ, тонкий, толстый клиент, web-клиент (через интернет-браузер).

22440 руб.

19.12.2023    5274    39    11    

35

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

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

36000 руб.

03.08.2020    17869    19    22    

17

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

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

7200 руб.

04.05.2021    19995    13    17    

17

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

В настоящее время система СБП очень часто стала использоваться в повседневной жизни. Одна из систем интеграции СБП через СБЕР. Данная конфигурация является инструментом интеграции СБП в Альфа Авто. Данная система не просто формирует статический QR, а динамический, а значит, в системе будет привязка и на покупателя, и на документ.

7200 руб.

25.10.2022    6366    32    4    

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