gifts2017

Погодка. Информер для Бухгалтерии 3.0 [Расширение]

Опубликовал Евгений Плешивцев (infosoft-v) в раздел Обработки - Универсальные обработки

Информация от 27/05/2016: канал получения погоды export.yandex.ru компанией Яндекс полностью закрыт.
Расширение "Погодка 1.01" больше не работает.
Работа над расширением "Погодка 2.01" начата.
Всем хорошего дня и хорошей погодки.

Бухгалтер человек занятой. Иной раз в туалет сходить некогда, а уж о том, чтобы посидеть в "Одноклассниках" или посмотреть погоду, и говорить нечего.
Облегчим жизнь нашим дорогим финансовым гениям и добавим немного милоты на начальную страницу Бухгалтерии предприятия 3.0.
Теперь прогноз погоды всегда под рукой с расширением "Погодка 1.01".

Погодка это расширение конфигурации Бухгалтерия предприятия 3.0, которое показывает прогноз погоды по данным с сайта yandex.ru

Вот так просто и замечательно:

 Погодка

Для тех, кто торопится. Как установить и настроить:

  • Заполните фактический адрес организации используя загруженный в базу КЛАДР
  • Установите расширение. Инструкция по установке расширений конфигураций разработана уважаемым mrXoxot и я с удовольствием её рекомендую
  • На начальной странице в поле "Организация" установите вашу организацию
  • Теперь ненастье не застанет вас врасплох Wink

Для тех, кто не торопится. Что там внутри:

Как устроена погода Yandex

Если точнее, то как виджеты погоды получают данные прогноза? Для виджетов Яндекс предоставляет два ресурса и один справочник. Справочник городов и их идентификаторов находится по адресу https://pogoda.yandex.ru/static/cities.xml В справочнике множество стран и много городов, вплоть до районных центров. Яндекс предоставляет погоду только тех населённых пунктов, которые есть в справочнике. По городу из XML необходимо получить ID города из аргумента "id"

Погодка

Имея ID города получаем прогноз погоды с ресурса http://export.yandex.ru/weather-ng/forecasts/34560.xml, где 34560.xml это документ с прогнозом погоды для города с ID=34560 (Волгоград).

Погодка

И последнее, Яндекс предоставляет ресурс с картинками погоды http://img.yandex.net/i/wiz%1.png, где %1 код картинки который находится в документе прогноза в теге <image>Например http://img.yandex.net/i/wizn7.png 

Получение ID города

XML с идентификаторами городов разбирается последовательным чтением XML. Процесс чтения оптимизирован. Сперва читаю атрибут name тега <country> и если страна "не наша", то пропускаю все дочерние узлы. Таким образом, пока страна не соответствует целевой, города не читаются.

Погодка определяет город по организации, которая указана на начальной странице:

Погодка

Если поле "Организация" не заполнено, то информер не отображается. Страну и город расширение получает из фактического адреса организации. Для получения города из адреса используется метод БСП:

сГородОрганизации = УправлениеКонтактнойИнформацией.ГородАдресаКонтактнойИнформации(сАдресОрганизацииXML);

Особенность этого метода в форме подачи аргумента. Адрес на входе метода должен быть в виде XML документа. Адрес в виде строки преобразует в "Адрес XML"  метод КонтактнаяИнформацияXMLПоПредставлению(), однако для работы этого метода требуется загруженный в базу справочник КЛАДР. Аналогичная ситуация и со страной.

Если удалось получить страну и город из адреса организации, то дальше получаем с Яндекса справочник городов и по стране и городу находим ID города.

Попытка экономить трафик

При смене организации на начальной странице запускается процедура получения ID города. В случае успешного получения ID города расширение записывает его в дополнительные сведения справочника "Организации".  Это сделано для того, чтобы не гонять зря трафик и процессор. В дальнейшем, если значение дополнительного сведения заполнено, то ID города не получается из Интернета а берётся из дополнительного сведения.

Погодка

Дополнительное сведение ИДГородаДляИнформераПогоды в план видов характеристик расширение добавляет программно.

Лайфхак. Если фактический адрес организации находится в населённом пункте для которого Яндекс не получает погоду, поставьте в дополнительное свойство ИДГородаДляИнформераПогоды ID ближайшего города для которого есть прогноз погоды. Погодка будет показывать прогноз для указанного вами города.

XML с прогнозом погоды в xdtoДокумент

При разработке расширения была поставлена задача работать с прогнозом погоды как с документом. Цель такого решения чисто образовательная. XDTO поддался не с первого раза.

Попытка загружать XML документ в XDTO без схемы XML показала свою не дееспособность. Основные претензии:

  • с типами всё плохо а точнее в XDTO документе все данные это текст;
  • работа со значениями узлов через последовательность объекта (документация с its.1c.ru) - то ещё удовольствие

Встала задача получить XSD схему прогноза погоды Яндекс. Поиск в Интернете готовой схемы не дал. Народ чаще всего этот XML разбирает вручную.

Было решено построить схему XSD по документу XML с прогнозом погоды. Перепробовано множество способов и инструментов по преобразованию XML2XSD и в конце концов остановился на Free XML to XSD generator Вот некоторые детали, с которыми пришлось столкнуться при получении схемы XML:

  • Нет бесплатных инструментов для ручного построения схемы. Есть платные монстры Liquid XML Studio
  • XSD схемы могут быть разных дизайнов. Самые популярные: Венецианские жалюзи (Venetian Blind Design), Матрёшка (Russian Doll Design), Колбасные дольки (Salami Slice Design) Для построения xdtoДокумента с помощью фабрики XDTO подходит только схема с дизайном Венецианские жалюзи (возможно я ошибаюсь, но сделать XDTO документ по XML схеме с другим дизайном мне не удалось)
  • После получения XSD с помощью того или иного инструмента, в схеме возможны огрехи в простых типах. Так например, если в исходном XML файле значение температуры было 2 градуса, то тип данного узла может быть определён как xs:unsignetByte, хотя, конечно же нужен тип xs:byte
  • XML файл с которого генерируется схема может быть неполон. Работа с такой схемой чревата проблемой валидации конкретного XML при построении xdtoДокумента. Наглядный пример: прогноз погоды для Хабаровска не проходил валидацию при построении xdtoДокумента. Оказалось, что для Хабаровска в прогнозе дополнительно подаётся температура воды в Тихом океане water_temperature (Возможно, что-то ещё не учтено. Пишите в комментариях города для которых Погодка валится с ошибкой)
  • Для некоторых элементов схемы, которые находятся внутри последовательности xs:sequence, приходится ставить параметр minOccurs="0", который разрешает быть этому элементу необязательным. Как в примере с температурой воды.
  • Если XSD файл загрузить в объект конфигурации XDTOПакет то становится удобно выполнять разные тонкие настройки
  • В расширениях нет (пока, но обещали исправить) возможности загружать XSD файл в XDTO пакет, поэтому в Погодке схема XML хранится в коде программы

Погодка

Схему прогноза погоды Яндекс в виде XSD файла я приложу для бесплатного скачивания.

Что отображается на информере:

Если расширению данные о погоде получить не удалось, то вместо информера отображается чистая строка. Если данные получены успешно то в информер выводится следующая информация:

Погодка 

  1. В заголовке информера, после слов "Погода сегодня", отображается время составления прогноза метеорологической службой. Путь к данным в xdtoДокументе: xdtoДокумент.fact.observation_time Кстати, погода в течении суток обновляется не равномерно. Ночью метеорологическая служба похоже спит.
  2. Картинка погоды на сегодня и завтра. Картинка при каждом обновлении прогноза загружается с сайта img.yandex.net В расширении конфигурации картинки не хранятся. Путь к данным картинки на сегодня в xdtoДокументе: xdtoДокумент.fact.image.__content, на завтра:  xdtoДокумент.day[1].day_part[4].image.__content 
  3. Значение температуры в градусах цельсия на сегодня и завтра. Путь к данным картинки на сегодня в xdtoДокументе: xdtoДокумент.fact.temperature.__content, на завтра: xdtoДокумент.day[1].day_part[4].temperature_data.avg.__content 
  4. Цветная подложка под температурой, которая контекстно меняет цвет. Чем теплее на улице тем оранжевее и на оборот, чем холоднее тем фиолетевееПуть к данным цвета подложки на сегодня в xdtoДокументе: xdtoДокумент.fact.temperature.color, на завтра: xdtoДокумент.day[1].day_part[4].temperature_data.avg.bgcolor

Интерфейсные мучения

Изначально информацию о погоде планировалось выводить на экран используя объект ФорматированнаяСтрока. Это классный объект, который позволяет манипулировать штифтами, цветами, картинками, ссылками и в общем случае делать чудеса оформления. В ходе экспериментов обнаружил ограничение этого объекта, которое свело на нет все достоинства. ФорматированнаяСтрока в качестве картинок может использовать только картинки с видом ИзБиблиотеки, т.е. загруженные в конфигурацию. Погодка же картинки погоды берёт с Яндекса при каждом обновлении прогноза.

В результате информация выводится в поля, во много полей, поэтому информер визуально выглядит таким "рыхлым". Но я предпочитаю говорить, что это дизайн с большим количеством "воздуха".

Настройки информера

Пока у Погодки простые настройки. В процедуре УстановитьПараметрыИнформера() расширения находятся все необходимые опции.

Процедура УстановитьПараметрыИнформера()
	
	// МОЖНО ИЗМЕНЯТЬ
	ИС_Погода_ПериодПроверкиПогодыСек = 3600; 
	бОшибкуВЖурналРегистрации = Истина;
	
	// ИЗМЕНЯТЬ НЕ РЕКОМЕНДУЕТСЯ
	URL_export_yandex = "http://export.yandex.ru/weather-ng/forecasts/%1.xml";
	URL_pogoda_yandex = "https://pogoda.yandex.ru/static/cities.xml";
	URL_img_yandex = "http://img.yandex.net/i/wiz%1.png";
	
	СоединениеHTTP_export_yandex = ПолучитьСоединениеHTTP(URL_export_yandex);
	СоединениеHTTP_pogoda_yandex = ПолучитьСоединениеHTTP(URL_pogoda_yandex);
	СоединениеHTTP_img_yandex = ПолучитьСоединениеHTTP(URL_img_yandex);
	
КонецПроцедуры

Установка переменной бОшибкуВЖурналРегистрации в Истина заставляет расширение писать в Журнал регистрации сообщения в случае срабатывания конструкции Попытка - Исключение, которые щедро разбросаны по коду.

Ограничения расширения:

  • Работоспособность проверялась для платформы 1С:Предприятие 8.3 (8.3.7.1917) и типовой конфигурации Бухгалтерия предприятия, редакция 3.0 (3.0.43.88)
  • Расширение требует загруженного в базу КЛАДР и заполнения адресов организаций с помощью КЛАДР
  • Показывает погоду тех населённых пунктов, которые есть в справочнике https://pogoda.yandex.ru/static/cities.xml

PS. Два слова о названии. Тренд в милоту и няшность был заложен сто лет назад Юрием Алексеевичем, который своему продукту дал замечательное название Магазька. Компания 1С со своими Договорчиками продолжела это славное дело. В общем, я тоже решил не отставать, поэтому и Погодка.

PPS. Идеи развития Погодки, критика и замеченные грамматические ошибки пожалуйста оставляйте в комментариях. Спасибо.

PPPS. И последнее. Тема информера на начальной странице нашими усилиями может получить развитие. Вот, например несколько идей: динамика курса валют, статус в Одноклассниках, количество сообщений во Вконтакте... Больше информеров хороших и разных.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Погодка 1.01. Расширение конфигурации Бухгалтерия 3.0.43
.cfe 51,24Kb
10.03.16
16
.cfe 101 51,24Kb 16 Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Артём Рогов (ben_art) 10.03.16 13:52
{Справочник.ИдентификаторыОбъектовМетаданных.МодульМенеджера(2750)}: При выполнении операции над расширением "ПогодкаРасширениеДляБухгалтерии30" возникла ошибка:
Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи) не выполнено.
Ошибка блокировки объекта. Объект уже заблокирован:
компьютер: user_77-ПК, пользователь: art, сеанс: 25303, начат: 10.03.2016 в 13:48:49, приложение: Конфигуратор

Убедитесь, что все расширения закрыты в конфигураторе.
ВызватьИсключение ТекстОшибки;
2. Евгений Плешивцев (infosoft-v) 10.03.16 14:28
(1) ben_art, попробуйте закрыть конфигуратор и запустить конфигурацию в режиме Предприятия.
3. Артём Рогов (ben_art) 10.03.16 14:55
т.е при открытом конфигураторе и расширении в нем не будет работать ? Другие то работают..
4. Евгений Плешивцев (infosoft-v) 10.03.16 15:38
(3) ben_art, Войдите один раз в конфигурацию с установленным расширением в режиме предприятия и выполните рекомендации пункта 4 из этой публикации: Расширения конфигурации. Полезные советы для разработки
5. Артём Рогов (ben_art) 11.03.16 14:37
6. Артём Рогов (ben_art) 11.03.16 14:37
теперь новая ошибка
11.03.2016 14:35:25 Работа с Yandex. Не удалось получить данные с http://export.yandex.ru/weather-ng/forecasts/27612.xml по причине 001-Исключение при вызове метода HTTP соединение
7. Евгений Плешивцев (infosoft-v) 11.03.16 15:14
Сегодня погода Яндекса как то странно себя ведёт. Отвечает через раз. Вот картинка с попыткой открыть ваш прогноз в браузере.
Давайте понаблюдаем до конца дня. Потом буду думать, что делать.

Прикрепленные файлы:
8. Andrei Shibanov (shibanovan) 12.03.16 13:54
Прикольно. Качаю. А давайте и курс валют сюда же ?
9. Andrei Shibanov (shibanovan) 12.03.16 14:12
Хм. Проблема Возникла.
Функция ОтправитьЗапросGET хттпзапрос завершается с ошибкой
"Ошибка работы с Интернет: Server returned nothing (no headers, no data)"
Во вложении сделал скриншот с таблом
Прикрепленные файлы:
infosoft-v; +1 Ответить 1
10. Andrei Shibanov (shibanovan) 12.03.16 15:01
Моя ситуация идентична (6)
11. Евгений Плешивцев (infosoft-v) 12.03.16 17:26
(9) shibanovan, спасибо за обратную связь. Буду разбираться.
shibanovan; +1 Ответить
12. Евгений Плешивцев (infosoft-v) 12.03.16 17:27
(8) shibanovan, я об этом думал. В следующей версии постараюсь добавить.
13. Andrei Shibanov (shibanovan) 12.03.16 18:06
Ещё новости по городу организации можно выводить )) Да, тема интересная )
14. Евгений Плешивцев (infosoft-v) 13.03.16 16:00
(10) shibanovan, коллега, похоже проблема на стороне Яндекса. Нашёл обсуждение в комментариях подобной проблемы http://seo-zona.ru/informer-pogody-delaem-sami-2015-06-06.html Судя по датам подобные проблемы у людей начались в то же время что и у нас. Думаю нужно дать пару дней на стабилизацию и после сделать вывод и принять решение.
15. Евгений Плешивцев (infosoft-v) 13.03.16 16:01
(6) ben_art, коллега, посмотрите ответ 14. Подождём пару дней.
16. Andrei Shibanov (shibanovan) 23.03.16 16:04
Похоже, проблема осталась ?
17. Евгений Плешивцев (infosoft-v) 24.03.16 08:58
(16) shibanovan, да, к сожалению.
На новой неделе попробую внести изменения. Есть идея, как повысить стабильность.
Так же прорабатываю возможность получения прогноза погоды из другого источника.
18. Leo Po (webresurs) 05.04.16 11:53
Где найти "дополнительные сведения справочника "Организации"" для добавления ИДГородаДляИнформераПогоды ?

) Отключено было в Администратирование - Общие настройки


Как правильно добавить Дополнительное значение в Тип значения - что выбрать?
Число, Строка, Дополнительное значение и т.п.

Полагаю с изменением поставщика погоды foreca на Meteum изменился и адрес
с "http://export.yandex.ru/weather-ng/forecasts/%1.xml" на ???

извиняюсь через анонимайзер(из украины) открывает , а на прямую нет...

)) Заблокировали по географическому признаку для Россиян фига, а украинцам пож... редиски Яндекс разработчики
infosoft-v; +1 Ответить 1
19. Евгений Плешивцев (infosoft-v) 05.04.16 14:36
(18) webresurs, Дополнительное сведение добавляется расширением самостоятельно при первом запуске, но на всякий случай, дополнительное сведение это строка.

Полагаю с изменением поставщика погоды foreca на Meteum изменился и адрес
с "http://export.yandex.ru/weather-ng/forecasts/%1.xml" на ???

извиняюсь через анонимайзер(из украины) открывает , а на прямую нет...
)) Заблокировали по географическому признаку для Россиян фига, а украинцам пож... редиски Яндекс разработчики


Я не знал таких подробностей. Спасибо. Подумаю, что можно сделать. Я правильно понимаю, что Украина продолжает надёжно получать данные с "http://export.yandex.ru/weather-ng/forecasts/%1.xml"?

Я сейчас разрабатываю версию 1_02 и там будет два провайдера прогноза погоды. Так что можно будет выбрать работающий.
20. Leo Po (webresurs) 05.04.16 16:16
(19) infosoft-v,

- строка не добавилась, но появились пустые или разбитые строки, так как название компани -ООО "компания имя разделено" - и в кавычках

- открывал через cameleo ru - а там по украинский, прокси полагаю разные...
Может можно как то привязать через анонимайзер?
(http:/mv4ha33soq.pfqw4zdfpaxhe5i.cmle.ru/weather-ng/forecasts /%1.xml)

- будем ждать...1.02
21. Leo Po (webresurs) 05.04.16 16:41
Идея- количество сообщений на Почте.Яндекс или любой другой с переходом, открытием в браузер
Или через Встроенный браузер 1с или тут Браузер для 1С 8.2 (обычная и управляемая форма)

А тут описано как с РБК курс валют забирать

;-)
22. Евгений Плешивцев (infosoft-v) 05.04.16 17:28
(21) webresurs, спасибо, идеи это классно. У меня сильно развяжутся руки на платформе 8.3.9 http://v8.1c.ru/o7/201603module/index.htm Тогда информер можно не втискивать в рамки одной строки а разместить в отдельной секции на жёлтом квадрате.
23. Евгений Плешивцев (infosoft-v) 05.04.16 17:43
(20) webresurs,
- строка не добавилась, но появились пустые или разбитые строки, так как название компани -ООО "компания имя разделено" - и в кавычках


Проверьте: Администрирование - Общие настройки - Дополнительные сведения Должно быть как на картинке: https://yadi.sk/i/-DOnVQIXqktaE

А в карточке организации должно быть так: https://yadi.sk/i/mJx4msBFqktkc
24. Leo Po (webresurs) 05.04.16 18:06
(23) infosoft-v,

- Да так же, перепробовал все варианты, число, строка и т.п., но если браузер не видит, то и не чее маяться!

... вот что ответили разработчики Яшки

"Сервис export.yandex.ru существует сугубо для собственных продуктов и сервисов Яндекса и наших официальных партнеров. Он может в любой момент меняться или быть отключен. За всеми публичными API и технологиями, пожалуйста, обращайтесь на ресурс tech.yandex.ru.
"
25. Артём Рогов (ben_art) 08.04.16 16:56
Маленькое предложение.
Было бы лучше видеть погоду не только на завтра
26. Евгений Плешивцев (infosoft-v) 08.04.16 18:04
(25) ben_art, спасибо за предложение.
Сейчас отображается текущая погода и прогноз на завтра. В новой версии будет текущая погода и прогноз на пять дней.
27. Людмила Алексеева (Тайрин) 25.05.16 15:02
Здравствуйте.
Установила погодку в расширения и вышла ошибка после перезапуска программы: "Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)". Погодка не работает.

1С:Предприятие 8.3 (8.3.8.1652)
Бухгалтерия предприятия, редакция 3.0 (3.0.43.223)
28. Евгений Плешивцев (infosoft-v) 25.05.16 15:57
(27) Тайрин, спасибо за сообщение об ошибке. Я поправлю расширение и дам вам знать.
29. Евгений Плешивцев (infosoft-v) 27.05.16 10:38
(27)(25)(24)(16)(6) Информация от 27/05/2016:
канал получения погоды export.yandex.ru компанией Яндекс полностью закрыт.
Расширение "Погодка 1.01" больше не работает.
Работа над расширением "Погодка 2.01" начата.
Всем хорошего дня и хорошей погодки.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа