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

19.05.21

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

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

Файлы

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

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

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

24000 руб.

19.12.2023    10533    59    14    

54

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

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

36000 руб.

03.08.2020    21885    32    24    

25

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

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

9600 руб.

27.04.2022    12530    22    3    

13

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

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

26400 руб.

02.11.2024    2868    13    2    

11

Файловый обмен (TXT, XML, DBF), FTP Сайты и интернет-магазины 1С v8.3 1С:Управление торговлей 11 Россия Платные (руб)

Загрузка файла YML (формат Yandex Market Language(YML) — собственный стандарт Яндекса, основанный на XML) в УТ11.5 Создание дерева номенклатуры, создание карточек номенклатуры и доп реквизитов, загрузка картинок в карточку. Оптимизировано для выгрузки в Битрикс. Возможна загрузка нескольких Фид - предусмотрено разделение по площадкам

7000 руб.

01.11.2024    1319    1    1    

2

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

Легкая обработка для мониторинга цен практически любого сайта (парсинга), не требует специальных знаний при настройке.

6960 руб.

17.04.2017    33532    30    28    

43
Для отправки сообщения требуется регистрация/авторизация