0. Silenser 516 21.05.17 18:28 Сейчас в теме

Набор подсистем "Умные таблицы"

Данный набор подсистем – прикладная библиотека, призванная помочь программисту 1С быстрее решать ряд типовых задач бизнес-логики, таких как: ведение статусов объектов, отправка почтовых сообщений в определенное время, ведение произвольных таблиц с возможностью редактирования, сохранения и группировки, ориентированные на расчет бюджетных таблиц (план продаж, ретробонусы B2C, проценты по договорам B2B и договорные условия по КАМ), расчет коммерческой политики для бюджетных таблиц, исполнение произвольных алгоритмов с хранением кода в информационной базе, определение рабочих баз, хранение файлов во внешних СУБД (Postgre SQL, MS SQL и MongoDB) и выполнение произвольного кода после изменений ссылочного объекта вне транзакции изменения.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. МимохожийОднако 130 24.05.17 07:35 Сейчас в теме
Это замена Excel и макросов?
2. Silenser 516 24.05.17 08:49 Сейчас в теме
(1) Нет. Полноценную замену Excel внутри 1С реализовать сложно, да и смысла нет: проще купить, если конечно не нужно этот функционал в веб тащить. Если брать основную подсистему, создающую произвольные таблицы, то ее основная особенность - возможность наполнения таблицы данными из базы, которые формируются на основании произвольных запросов. К каждой таблице можно прикрутить бантики в виде формул и группировок, так же некоторые колонки можно дать менять пользователям, таблица при этом будет пересчитываться. Изначально система создавалась под ведение бюджетных таблиц и в нее заложена некоторая парадигма, которую в 2х словах не опишешь, по бюджетам я сниму отдельные ролики. Я попытался максимально отвязать подсистему от первоначальной задачи, чтобы она была более универсальной и подходила для широкого круга задач. Например, для ведения простого сравнительного отчета план-факт, если по его результатам нужно выполнять некоторый расчет.
3. МимохожийОднако 130 24.05.17 11:08 Сейчас в теме
(2) Механизмы СКД здесь используются? Там тоже есть возможность настройки структуры отчета и выбора различных вариантов оформления
4. Silenser 516 24.05.17 13:22 Сейчас в теме
(3)Используются, но не в части представления данных, для этого в системе используется отдельный справочник. СКД используется только в части расчета статей таблиц (колонок таблицы).
5. rtnm 584 25.05.17 17:09 Сейчас в теме
Для того, чтобы этого не происходило, программисты могли сразу вызывать функцию Заблокировать() при открытии формы объекта, если вызов не удавался, потому, что объект уже был заблокирован, то форму открывали только для чтения. Теперь же, с переходом на управляемые блокировки, это стало невозможно, т.к. в таком режиме блокировок эта функция не работает


Пессимистические блокировки есть и в управляемых формах:
- ЗаблокироватьДанныеФормыДляРедактирования()
- ЗаблокироватьДанныеДляРедактирования(<Ключ>, <ВерсияДанных>, <ИдентификаторФормы>)
- РазблокироватьДанныеФормыДляРедактирования()
- РазблокироватьДанныеДляРедактирования(<Ключ>, <ИдентификаторФормы>)
Silenser; +1 Ответить
6. Silenser 516 25.05.17 20:28 Сейчас в теме
(5)Понятно, спасибо. Уберу эту подсистему, а блокировки справочников перепишу на типовые функции.
ПС: Печально даже не то, что я упустил и замечал эти функции несколько лет, а то, что многие вещи делал не совсем оптимально. Чтож, будем исправляться.
7. Silenser 516 03.06.17 23:16 Сейчас в теме
Добавлен пример использования подсистемы статусов объектов.
8. Silenser 516 02.07.17 22:19 Сейчас в теме
Добавлены подсистемы:
- определения рабочих баз на основе строки соединения,
- хранения файлов во внешних СУБД двумя способами: ODBC (MS SQL, Postgre SQL и т.п.) и RESTHeart (MongoDB)
9. user679689_redbull4561 13.09.17 14:39 Сейчас в теме
(8) Алексей, скажите в каком формате вы передаете в RESTHeart (MongoDB) файлы на пример pdf. преобразовываете его в текст?
а обратно наоборот
10. Silenser 516 14.09.17 11:42 Сейчас в теме
(9)Да, велосипед изобретать не стал.
11. user679689_redbull4561 14.09.17 12:28 Сейчас в теме
(10) можете не много подсказать
	Режим = РежимДиалогаВыбораФайла.Открытие;
	ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
	ДиалогОткрытияФайла.ПолноеИмяФайла = "";
	//Фильтр = НСтр("ru = 'Документ PDF'; en = 'PDF'")
	//    + "(*.pdf)|*.pdf";
	//ДиалогОткрытияФайла.Фильтр = Фильтр;
	ДиалогОткрытияФайла.МножественныйВыбор = ЛОЖЬ;
	ДиалогОткрытияФайла.Заголовок = "Выберите файл";
	Если ДиалогОткрытияФайла.Выбрать() Тогда
	    МассивФайлов = ДиалогОткрытияФайла.ВыбранныеФайлы;
	    Для Каждого ИмяФайла Из МассивФайлов Цикл
	        ВыбФайл= Новый Файл(ИмяФайла);			
	    КонецЦикла;
	Иначе
		Возврат;
	    Предупреждение(НСтр("ru = 'Файл(ы) не выбран!'; en = 'File(s) not selected!'"));
	КонецЕсли;

	ИмяВременногоФайлаZIP = ВыбФайл.ПолноеИмя;
    ЗаголовокHTTP = Новый Соответствие(); 
    //ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=My1cV8bNdr");
    ЗаголовокHTTP.Вставить("Authorization", "Basic " + ХэшАвторизации("admin1", "2wsx2wsx"));
	ЗаголовокHTTP.Вставить("Content-Type", "application/json");

    СодержимоеZIP = Base64Строка(Новый ДвоичныеДанные(ИмяВременногоФайлаZIP));
    ИмяФайлаОтправки = КаталогВременныхФайлов() + "upload.txt";
    ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.ANSI);

    ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.ЗаписатьСтроку("Content-Disposition: json; name=""filezip""; filename=""" + ИмяВременногоФайлаZIP + """");
    ФайлОтправки.ЗаписатьСтроку("Content-Type: text/plain" + Символы.ВК + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку(СодержимоеZIP);
    ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    
 
    ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""mode""" + Символы.ВК + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку("post");
    ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr");
    ФайлОтправки.Закрыть();    

    Прокси = Новый ИнтернетПрокси;
    Прокси.НеИспользоватьПроксиДляЛокальныхАдресов = Истина;
    АдресСкрипта = "/FileBase/FileTable/" + Заявка.Ссылка.УникальныйИдентификатор();
	СерверПриемник =  "127.0.0.1";
	
	HTTPСоединение = Новый HTTPСоединение(СерверПриемник, 8080, "admin1", "2wsx2wsx",,	10);
 	HTTPЗапрос = Новый HTTPЗапрос("/FileBase/FileTable/" + Заявка.Ссылка.УникальныйИдентификатор() + "?id_type=STRING", ЗаголовокHTTP);
	
	
	ИмяФайлаОтвета = ПолучитьимяВременногоФайла("txt");
	Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос,ИмяФайлаОтвета);
Показать


После выполнения процедуры файл ответа содержит такую информацию.
"{"http status code":405,"http status description":"Method Not Allowed","message":"mentod POST not allowed","_links":{"self":{"href":"/FileBase/FileTable/82a5ccfd-8a3c-11e7-811f-002590fc8137"}}}"

Или может я вообще не правильно передаю файл?
Прикрепленные файлы:
12. Silenser 516 14.09.17 16:42 Сейчас в теме
(11)Для передачи файла я использовал другой метод - УстановитьТелоИзСтроки, и сейчас точно не помню почему, но я использовал метод PUT.
HTTPЗапрос 	= Новый HTTPЗапрос(БазоваяСтрока, ЗаголовокЗапроса);
		Данные 		= Новый ДвоичныеДанные(парПутьКФайлу);
		врСоотв 	= Новый Соответствие;
		врСоотв.Вставить(СтрВХ.СтолбецРазделителяСУБД, СтрВХ.ИмяБазы1С);
		врСоотв.Вставить(СтрВХ.СтолбецДатыОбновленияСУБД, ТекущаяДата());
		врСоотв.Вставить(СтрВХ.СтолбецФайлаСУБД, Base64Строка(Данные));
		врСоотв.Вставить("desc", парПутьКФайлу);
		
		ЗаписьJSON.УстановитьСтроку();
		ЗаписатьJSON(ЗаписьJSON, врСоотв);
		врСтр = ЗаписьJSON.Закрыть();
		HTTPЗапрос.УстановитьТелоИзСтроки(врСтр);
		
		Ответ 		= Соединение.ВызватьHTTPМетод("PUT", HTTPЗапрос);
Показать
user679689_redbull4561; +1 Ответить
13. user679689_redbull4561 15.09.17 07:22 Сейчас в теме
14. user679689_redbull4561 15.09.17 08:29 Сейчас в теме
(12)

врСоотв = Новый Соответствие;
врСоотв.Вставить(СтрВХ.СтолбецРазделителяСУБД, СтрВХ.ИмяБазы1С);
врСоотв.Вставить(СтрВХ.СтолбецДатыОбновленияСУБД, ТекущаяДата());
врСоотв.Вставить(СтрВХ.СтолбецФайлаСУБД, Base64Строка(Данные));
врСоотв.Вставить("desc", парПутьКФайлу);



Поясни немного

что хранит в себе структура "СтрВХ"?
Я так понял это структура внеш. хранилища?
Можешь расшифровать?
15. Silenser 516 15.09.17 11:40 Сейчас в теме
(14)Да, это структура, которую нужно записать в коллекцию. Ключ соответствия - это название поля, а значение соответствия - значение, которое нужно положить во внешнюю базу. ИД файла, по которому идентифицируется запись идет в адресе самого запроса PUT перед "?id_type=STRING".
17. user679689_redbull4561 15.09.17 12:00 Сейчас в теме
(15)Может с заголовками беда?
16. user679689_redbull4561 15.09.17 11:58 Сейчас в теме
Соединение 	= Новый HTTPСоединение("localhost", 8080, "admin1", "2wsx2wsx",,	60);
	ЧтениеJSON = Новый ЧтениеJSON;
	ЗаписьJSON = Новый ЗаписьJSON; //http://localhost
	ЗаголовокЗапроса = Новый Соответствие;
	ЗаголовокЗапроса.Вставить("Content-Type", "application/json; charset=utf-8");
	ЗаголовокЗапроса.Вставить("Authorization", "Basic " + ХэшАвторизации("admin1", "2wsx2wsx"));
	
	парПутьКФайлу = "C:\Data\ObmenMongo\dsfs.png";
    
	HTTPЗапрос     = Новый HTTPЗапрос("/FileBaseDB/FileTable/" + Заявка.Ссылка.УникальныйИдентификатор() + "?id_type=STRING", ЗаголовокЗапроса);
    Данные         = Новый ДвоичныеДанные(парПутьКФайлу);
    врСоотв     = Новый Соответствие;
    //врСоотв.Вставить("Base", "1CBase");
    //врСоотв.Вставить("Date", ТекущаяДата());
    врСоотв.Вставить("File", Base64Строка(Данные));
    //врСоотв.Вставить("desc", парПутьКФайлу);
    
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, врСоотв);
    врСтр = ЗаписьJSON.Закрыть();
    HTTPЗапрос.УстановитьТелоИзСтроки(врСтр);
    
    Ответ         = Соединение.ВызватьHTTPМетод("PUT", HTTPЗапрос);
Показать


Сделал вот такое простенький код возвращает код состояния 406 из-за чего может быть?

Так же добавлял заголовок
ЗаголовокЗапроса.Вставить("Content-Length", 66000);


С ним выходит ошибка 400
18. Silenser 516 15.09.17 13:05 Сейчас в теме
(16) Проверьте, чтобы Заявка.Ссылка.УникальныйИдентификатор() возвращала нормальную строку. Так же нужно смотреть структуру базы и файлы настройки REST Heart, может у admin1 нет доступа к сервису. Вы пользователя как создавали? Через Робомонго или командой? Лучше командой, Робомонго их как-то неверно создает.
19. user679689_redbull4561 15.09.17 14:29 Сейчас в теме
(18) Создавал командой через Shell

Файлы файлы настройки REST Heart настраивал с помощью вашей статьи http://1c-soft.it-terminal.ru/public/642927/

Заявка.Ссылка.УникальныйИдентификатор() в каком плане нормальная? возвращается стандартный набор символом в переменной заявка содержится документ к которому будет привязан файл.


По коду критичных ошибок нету? и проблема скорей всего в настройка сервера?


Добавил файл ответа. в нем такое содержание.

{"_exceptions":[{"exception":"org.bson.json.JsonParseException","exception message":"Invalid JSON input. Position: 6. Character: '\ufeff'."}],"http status code":406,"http status description":"Not Acceptable","message":"Invalid JSON"}
Прикрепленные файлы:
20. Silenser 516 15.09.17 16:14 Сейчас в теме
(19)
в каком плане нормальная?
На выходе там объект УникальныйИдентификатор, я имел ввиду, что нормально ли он в строку переводится. По скрину вижу, что нормально.
По коду проблем не вижу, похоже на то, что делал я. Структура базы нужная, соответствует REST запросу? (база, коллекция с правильными наименованиями). Пользователь админ базы?
21. user679689_redbull4561 17.09.17 10:30 Сейчас в теме
Смотри вот такая структура, пользователь есть. Фигня какая то.(
Прикрепленные файлы:
22. Silenser 516 19.09.17 13:22 Сейчас в теме
(21)Это в корневой базе, а в FileBase? Разверните группы.
23. user679689_redbull4561 19.09.17 17:01 Сейчас в теме
(22)Вот таблицы в FileBaseDB
А user тут разве нужен пользователь?

Отчет возвращает 406 ошибку
А как гласит великая Википедия ошибка
406 Not Acceptable — запрошенный URI не может удовлетворить переданным в заголовке характеристикам. Если метод был не HEAD, то сервер должен вернуть список допустимых характеристик для данного ресурса. Появился в HTTP/1.1.

Может все таки заголовки не правильные?
Какие указывали в своем коде?
Прикрепленные файлы:
24. Silenser 516 20.09.17 11:26 Сейчас в теме
(23)Я почему спрашиваю, потому что сам долго мучался с правами. Заголовок такой же, как и на сайте RESTHeart, ИмяБазы\ИмяКоллекции\ИД
СтрШаблон("/%1/%2/%3?id_type=STRING", СтрВХ.ИмяБазыСУБД, СтрВХ.ИмяТаблицыСУБД, парУникальныйИдентификаторФайла)

В моем случае это работало. Но и СУБД и REST сервер запускались локально.
Если у вас уж совсем ничего не получится, напишите, поставлю все заново и проверю (а то уже снес монгу за ненадобностью). Как вариант, скачайте эту конфу, вытащите из нее подсистему работы с внешними хранилищами и попробуйте мой код. Сам я в Mongo профан, разбирался по книжке и методом научного тыка.
25. user679689_redbull4561 21.09.17 10:13 Сейчас в теме
(24)
Но и СУБД и REST сервер запускались локально.

Тоже локально запускаю.


(24)
Как вариант, скачайте эту конфу, вытащите из нее подсистему работы с внешними хранилищами и попробуйте мой код. Сам я в Mongo профан, разбирался по книжке и методом научного тыка.

к сожалению нету монет(
Если только куда нибудь её зальете буду очень благодарен.
26. Silenser 516 21.09.17 14:06 Сейчас в теме
(25)Поскольку продукт бесплатный, то есть его копия на сайте проекта.
32. teratekco 14.05.19 18:21 Сейчас в теме
33. Silenser 516 15.05.19 09:26 Сейчас в теме
(32)Нету, т.к. сайта больше нет.
27. user679689_redbull4561 28.09.17 09:25 Сейчас в теме
Александр, Вообщем понял почему не работает.
Режим совместимости стоял 8.2.13 в нем не корректно работает метод "ВызватьHTTPМетод"
повысил до 8.3.7 все отлично работает.

Но словил ошибки по самой конфе связанные с тем что изменил режим, кое что отвалилось))

Может знаешь чем можно заменить метод для работы в режиме 8.2.13?
28. Silenser 516 28.09.17 13:17 Сейчас в теме
(27)Не в курсе. Но 8.2 все же довольно старая платформа, рекомендую обновиться.
29. user679689_redbull4561 28.09.17 14:28 Сейчас в теме
(28) Да это понятно стоит более новая платформа стоит, в КА 1.1 режим совместимости стоит с 8.2.13 ) Ладно спасибо большое за помощь)
30. anig99 2713 17.05.18 01:06 Сейчас в теме
Спасибо огромное! Очень помогла подсистема хранения во внешней базе!
31. Silenser 516 17.05.18 17:59 Сейчас в теме
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Программист 1С
Новосибирск
зарплата от 30 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Специалист внедрения и сопровождения 1С
Москва
зарплата от 80 000 руб.
Полный день