Хочу предложить способ прямого получения данных таблиц PostgreSQL из 1С 8, сервер которого развёрнут на Linux.
Была поставлена задача - считать данные произвольных таблиц PostgreSQL и вывести данные таблиц для просмотра пользователю.
Все, найденные на просторах интернета, способы не подошли, поэтому и пришлось придумать свой способ. Не исключено, что где то этот способ описан, просто плохо искал. В любом случае, поделюсь опытом, может кому то пригодится.
Решил задачу следующим образом:
1. Был создан новый внешний источник данных. На закладке "Функции" была добавлена функция. Пример заполненных значений свойств можно увидеть на рисунке ниже.
2. Через PgAdmin создана новая функция (здесь -> "имя базы" - Schemas - Public - Functions). В созданной функции указано, что она будет возвращать значение, причём, в формате json. У функции имеется один входящий текстовый параметр, в который будет приходить из 1С произвольный запрос для исполнения. Ниже представлен скрипт создания функции.
CREATE OR REPLACE FUNCTION public.getdatatables(
text)
RETURNS SETOF json
LANGUAGE 'plpgsql'
COST 100
VOLATILE PARALLEL UNSAFE
ROWS 2
AS $BODY$
BEGIN
RETURN QUERY EXECUTE $1;
END;
$BODY$;
ALTER FUNCTION public.getdatatables(text)
OWNER TO postgres;
3. В 1С 8.3 создана обработка, в которой сначала подключаемся к СУБД PostgreSQL через внешний источник данных
ПараметрыСоединения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыСоединения.СтрокаСоединения = "Driver=PostgreSQL_ERP};Server=*********;Port=5432Database=prod_1c_***_****;Uid=postgres;Pwd=*******;STMT=utf8";
ПараметрыСоединения.СУБД = "PostgreSQL";
ПараметрыСоединения.АутентификацияОС = Ложь;
ПараметрыСоединения.АутентификацияСтандартная = Истина;
ПараметрыСоединения.ИмяПользователя = "postgres";
ПараметрыСоединения.Пароль = "*******";
Попытка
ВнешниеИсточникиДанных.СУБДPOSTGRES.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединения);
ВнешниеИсточникиДанных.СУБДPOSTGRES.УстановитьСоединение();
Исключение
....
КонецПопытки;
далее посылаем запрос в функцию PostgreSQL
TextQuery = "SELECT json_agg(tabl) FROM (SELECT * FROM """ПроизваольноеИмяТаблицы""") tabl";
ТелоОтвета = ВнешниеИсточникиДанных.СУБДPOSTGRES.public_getdatatables(TextQuery);
затем, преобразуем полученный ответ в объекты массив и структура.
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТелоОтвета);
СтруктураВозврата = ПрочитатьJSON(ЧтениеJSON);
А уже дальше как отобразить данные пользователю, сами выбирайте. Лично я "перегнал" JSON в ТаблицуЗначений и через ПостроительОтчета вывожу на форму.