// Возвращает содержимое ответа HTTP-сервера, полученного методом GET, в виде строки или двоичных данных
// ** Coded by Sergey (aka Porutchik) * 2014 http://forum.aeroion.ru/cat1.html //
// Параметры
// СерверПриемник - - доменное имя сервера или полный адрес (url) запрашиваемой ссылки.
// Может включать протокол (http://, https://) и порт.
// АдресСтраницы - - опционально. Адрес страницы на сервере без протокола (http://, https://),
// доменного имени сервера (хоста) и порта.
// Если не указано, адрес страницы будет извлечён из параметра СерверПриемник
// ПараметрыСоединения - - опционально. Структура, содержащая дополнительные параметры для HTTPСоединение.
// Назначение ключей:
// Логин или Пользователь - Тип Строка - Имя пользователя на указанном сервере.
// Пароль - Тип Строка - Пароль пользователя на указанном сервере.
// Прокси - Тип ИнтернетПрокси - Прокси, используемый для соединения с сервером.
// Таймаут - Тип Число - Таймаут осуществляемого соединения и операций, в секундах. 0 - не устанавливать таймаут..
// ЗаголовкиHTTP - - опционально.
// Заголовки, которые будут отправлены на сервер в виде соответствия: "Заголовок" - "Значение".
// Если указано, функция возвратит в программу заголовки HTTP-ответа с кодом состояния в ключе StatusCode,
// имя файла в ключе FileName, url-кодированное имя в ключе EncodeFileName
// ПолучитьКакДвоичныеДанные - - опционально. Определяет, вкак ом виде получить содержимое ответа сервера
// По умолчанию Ложь.
// ЗащищенноеСоединение - - опционально. По умолчанию Ложь.
// Если Истина, соединение будет происходить по протоколу https://
//
// Возвращаемое значение:
// , - содержимое ответа сервера, если ресурс найден по указанному адресу.
//
Функция ПолучитьСодержимоеВебАдреса(Знач СерверПриемник, Знач АдресСтраницы = "",
Знач ПараметрыСоединения = Неопределено, ЗаголовкиHTTP = Неопределено,
Знач ПолучитьКакДвоичныеДанные = Ложь, Знач ЗащищенноеСоединение = Ложь) Экспорт
Перем ИмяФайлаОтветаКодированное, ИмяФайлаОтвета, Порт, Логин, Пользователь, Пароль, Прокси, Таймаут;
Если Не ЗначениеЗаполнено(СерверПриемник) Тогда Возврат Неопределено; КонецЕсли;
Если ТипЗнч(ЗаголовкиHTTP) Тип("Соответствие") Тогда ЗаголовкиHTTP = Новый Соответствие; КонецЕсли;
Если Найти(Нрег(СерверПриемник), "https://") = 1 Тогда ЗащищенноеСоединение = Истина; КонецЕсли;
Протокол = ?(Найти(Нрег(СерверПриемник), "https://") = 1 ИЛИ ЗащищенноеСоединение, "https://", "http://");
Если Лев(НРег(СерверПриемник), СтрДлина(Протокол)) = Протокол Тогда
СерверПриемник = Сред(СерверПриемник, СтрДлина(Протокол) + 1);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(АдресСтраницы) Тогда
Позиция = Найти(СерверПриемник, "/");
Если Позиция > 0 Тогда
АдресСтраницы = Сред(СерверПриемник, Позиция, СтрДлина(СерверПриемник));
СерверПриемник = Лев(СерверПриемник, Позиция - 1);
Иначе
АдресСтраницы = "/";
КонецЕсли;
КонецЕсли;
СерверПриемник = СтрЗаменить(СерверПриемник, "/", "");
//Выделяем порт из доменного имени
ПозицияДвоеточия = Найти(СерверПриемник, ":");
Если ПозицияДвоеточия > 0 Тогда
Порт = Число(Сред(СерверПриемник, ПозицияДвоеточия + 1));
СерверПриемник = Лев(СерверПриемник, ПозицияДвоеточия - 1);
КонецЕсли;
Если ТипЗнч(ПараметрыСоединения) = Тип("Структура") Тогда
Для каждого КлючЗначение из ПараметрыСоединения Цикл
Значение = КлючЗначение.Значение; Выполнить(КлючЗначение.Ключ + " = Значение;");
КонецЦикла;
Пользователь = ?(ЗначениеЗаполнено(Пользователь), Пользователь, Логин);
КонецЕсли;
НТТР = Новый HTTPСоединение(СерверПриемник, Порт, Пользователь, Пароль, Прокси, Таймаут,
?(ЗащищенноеСоединение, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено));
//Ответ от сервера получим в возвращаемом значении типа HTTPОтвет
ОтветHTTP = НТТР.Получить(Новый HTTPЗапрос(АдресСтраницы, ЗаголовкиHTTP)); //
ОшибкаЗапроса = (ОтветHTTP.КодСостояния >= 400);
//После получения ответа сервера необходимо проверить статус или код состояния.
//http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.... //Если сервер вернул один из статусов переадресации
//301 Moved Permanently («перемещено навсегда») или 302 Moved Temporarily («перемещено временно»),
//то в этом случае можно попытаться перейти на ресурс, на который переадресовал сервер
Если ОтветHTTP.КодСостояния = 301 или ОтветHTTP.КодСостояния = 302 Тогда
Если ОтветHTTP.Заголовки.Количество() > 0 Тогда
//Адрес страницы переадресации содержится в поле Location заголовка ответа
АдресСтраницы = ОтветHTTP.Заголовки["Location"]; //
Если ЗначениеЗаполнено(АдресСтраницы) Тогда
Если Найти(НРег(АдресСтраницы), "http://") = 0 И Найти(НРег(АдресСтраницы), "https://") = 0 Тогда
АдресСтраницы = ?(Лев(АдресСтраницы, 1) = "/", Сред(АдресСтраницы, 2), АдресСтраницы);
Если Найти(АдресСтраницы, СерверПриемник + "/") = 0 Тогда
АдресСтраницы = Протокол + СерверПриемник + ?(ЗначениеЗаполнено(Порт), ":" + Порт, "") + "/" + АдресСтраницы;
КонецЕсли;
КонецЕсли;
//Если сервер вернул cookies (http://ru.wikipedia.org/wiki/HTTP_cookie, http://www.faqs.org/rfcs/rfc6265.html?#41;, //вставим их в заголовки для передачи на страницу перехода
Куки = ОтветHTTP.Заголовки["Set-Cookie"];//
Если ЗначениеЗаполнено(Куки) Тогда ЗаголовкиHTTP.Вставить("Cookie", Куки); КонецЕсли;
//Рекурсивный вызов
Возврат ПолучитьСодержимоеВебАдреса(АдресСтраницы, , , ЗаголовкиHTTP, ПолучитьКакДвоичныеДанные, ЗащищенноеСоединение);//
КонецЕсли;
КонецЕсли;
ИначеЕсли ОтветHTTP.КодСостояния >= 100 И ОтветHTTP.КодСостояния 0 Тогда
ТипСодержимого = ОтветHTTP.Заголовки["Content-Type"];
//http://ru.wikipedia.org/wiki/Список_MIME-типов Если Найти(ТипСодержимого, "text/") = 1 ИЛИ Найти(ТипСодержимого, "/javascript")
ИЛИ Найти(ТипСодержимого, "+xml") ИЛИ Найти(ТипСодержимого, "/xml") 0 ИЛИ Найти(ТипСодержимого, "/json") 0 Тогда
ПолучитьКакДвоичныеДанные = Ложь;
ИначеЕсли Найти(ТипСодержимого, "image/") = 1 ИЛИ Найти(ТипСодержимого, "video/") = 1
ИЛИ Найти(ТипСодержимого, "application/") = 1 ИЛИ Найти(ТипСодержимого, "audio/") = 1 Тогда
//Если содержимое полученного ответа представляет собой изображение, видео, приложение,
//возвращаем двоичные данные, таккак возвращать в виде строки не имеет смысла.
ПолучитьКакДвоичныеДанные = Истина;
КонецЕсли;
//Некоторые сервера возвращают в типе содержимого имя отданного файла, например image/png; name="Имя файла.png"
//или отдают в заголовке Content-Disposition: attachment; filename=Имя файла.png (http://www.http11.ru/post.php?post=2) Если ОтветHTTP.Заголовки["Content-Disposition"] Неопределено Тогда
ТипСодержимого = ОтветHTTP.Заголовки["Content-Disposition"];
КонецЕсли;
ТипСодержимого = СтрЗаменить(СтрЗаменить(ТипСодержимого, """", ""), "'", "");
//в ключе filename*=UTF-8'' содержится url-кодированное имя файла
ПозицияИмениФайла = Найти(ТипСодержимого, "filename*=UTF-8");
Если ПозицияИмениФайла 0 Тогда
ИмяФайлаОтветаКодированное = Сред(ТипСодержимого, ПозицияИмениФайла + СтрДлина("filename*=UTF-8"));
ПозицияДвоеточия = Найти(ИмяФайлаОтветаКодированное, ";");
Если ПозицияДвоеточия 0 Тогда
ИмяФайлаОтветаКодированное = Лев(ИмяФайлаОтветаКодированное, ПозицияДвоеточия - 1);
КонецЕсли;
КонецЕсли;
//в ключе filename= содержится обычное имя файла
ПозицияИмениФайла = Найти(ТипСодержимого, "name=");
Если ПозицияИмениФайла 0 Тогда
ИмяФайлаОтвета = Сред(ТипСодержимого, ПозицияИмениФайла + СтрДлина("name="));
ПозицияДвоеточия = Найти(ИмяФайлаОтвета, ";");
Если ПозицияДвоеточия 0 Тогда
ИмяФайлаОтвета = Лев(ИмяФайлаОтвета, ПозицияДвоеточия - 1);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ЗаголовкиHTTP = ОтветHTTP.Заголовки;
//Добавляем в заголовки ответа код состояния (ответа) HTTP-сервера и имя файла содержимого, если есть.
ЗаголовкиHTTP.Вставить("StatusCode", ОтветHTTP.КодСостояния);
Если ЗначениеЗаполнено(ИмяФайлаОтвета) Тогда ЗаголовкиHTTP.Вставить("FileName", ИмяФайлаОтвета); КонецЕсли;
Если ЗначениеЗаполнено(ИмяФайлаОтветаКодированное) Тогда
ЗаголовкиHTTP.Вставить("EncodeFileName", ИмяФайлаОтветаКодированное);
КонецЕсли;
Если ОшибкаЗапроса ИЛИ НЕ ПолучитьКакДвоичныеДанные Тогда Возврат ОтветHTTP.ПолучитьТелоКакСтроку(); КонецЕсли;
Возврат ОтветHTTP.ПолучитьТелоКакДвоичныеДанные();
КонецФункции // ПолучитьСодержимоеВебАдреса()
//Источник: http://forum.aeroion.ru/topic749.html[/pre]Примеры использования:
// Получение содержимого в виде строки//
СодержимоеАдреса = ПолучитьСодержимоеВебАдреса("
//
ЗаголовкиHTTP = Новый Соответствие;
ЗаголовкиHTTP.Вставить("Referer", "a href="http://some_site.com/" )"="">http://some_site.com/");
СодержимоеАдреса = ПолучитьСодержимоеВебАдреса("
Добрый день, коллеги!
Помогите, пожалуйста, разобраться с таким вопросом:В УТ 11.5 при формировании документа счет-фактура выданный номер документа создается видом МФУТ-0008606
Как сделать номер без префикса, чтобы он имел вид 08606/1, то есть слева убрать префикс организации и ИБ и в конце номера добавить фиксированное значение "/1", которое нужно во всех номерах документов. Итоговый номер 0008606/1 или 0000-08606/1
Заранее благодарю
При разработке очередного обмена с интернет магазином через API столкнулисть что сайт возвращает ответ в виде:
из кода ясно что это JSON и используя код ПрочитатьJSON
В переменной ДанныеЛога будет структура в виде
В результате получилась функция с 2-мя вариантами возрата, в зависимости от того
На просторах интернета была найдена еще одна функция:
Стандарт ISO 8601, составлен таким образом, что:
Конвертация даты из формата ISO8601 в дату 1С:
Часто требуется в табличной части установить отбор по нужному значению.
Ниже приведены 2 примера:
Посмотрите более подробную статью Табличная часть ~ Как настроить отбор строк?
Всем доброго дня.
Прошу помощи.
Конфигурация - Бухгалтерия для Беларуси, редакция 2.1 Локализация для Республики Беларусь (2.1.41.3)
Есть задача - ограничить доступ пользователей в 1С к определённым организациям. То есть чтобы определённые пользователи не видели определённые организации и документы этих организация (реализация, поступление и все остальные).
База на MSQL Server.
Само ограничение не работает просто если включить "Ограничить доступ на уровне записей". Сначала нужно включить Константу "Использовать группы пользователей", добавить создать нового пользователя в отдельной группе, присвоить ему права.
Затем включить "Ограничить доступ на уровне записей" и настроить ограничения через "Группы доступа".
Проблема в том, что, если ограничить для пользователя
Подскажите пожалуйста,
Как известно делать проводки по счетам-группам нельзя. Однако жизнь течет и после введения бухгалтером очередного нового счета
Есть необходимость номенклатуру отмеченных строк в соответствии с количеством отправить на формирование нового документа после нажатия на кнопку "Запуск". Вопрос:
УПП 1.3. Делаю отчет с помощью Универсального отчета. Как вывести количество дней в выбранном периоде?
РАЗНОСТЬДАТ(&ДатаНач,ДатаКон, ДЕНЬ) не подошло. Не видит параметров ДатаНач и ДатаКон.
Добрый день!
В счете учета включили Субконто3=Партии. Как заполнить партии в проводках, которые уже проведены ранее?
Спасибо.
Подскажите пожалуйста, формирую отчет по остаткам сумм на бух счетах.
В запросе необходимо выбрать конкретные счета для вывода остатков.Но план счетов нетиповой, имеются счета, с маской ******** в которых присутствуют пробелы, т.е формат 1110 21, 1030 25 итд.Пробел чем то заменить нельзя. По законодательству только так.
Как в запросе этот пробел проставить? Пробовала и @ и нижнее подчеркивание, но при выводе отчета вылезает ошибка что такого счета нет (с нижним пробелом) или что задано неверное имя атрибута структуры.
Если пишешь слитно счет, тоже не находит
Подскажите пожалуйста.Есть документ Договор с нумерацией страниц в колонтитулах. При выводе на печать нескольких договоров необходимо чтобы нумерация страниц сохранялась в пределах каждого документа. У меня же получается сквозная нумерация. Как реализовать нумерацию страниц в пределах каждого документа при печати?
////////////////////////// параметры даты в запрос ////////////////////////////////////// приведем период в нормальную форму к виду (с лДата по пДата) /////////// ВЫБРАТЬ МИНИМУМ(пДаты._Дата) КАК лДата, МАКСИМУМ(пДаты._Дата) КАК пДата ПОМЕСТИТЬ _д ИЗ(ВЫБРАТЬ НАЧАЛОПЕРИОДА(&лДата,ДЕНЬ) AS _Дата ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ НАЧАЛОПЕРИОДА(&пДата,ДЕНЬ)) КАК пДаты;////////////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ _д.лДата, _д.пДата, ВЫБОР КОГДА ГОД(_д.пДата)>= ГОД(_д.лДата)ТОГДА ВЫБОР КОГДА МЕСЯЦ(_д.пДата)>= МЕСЯЦ(_д.лДата)ТОГДА ГОД(_д.пДата)- ГОД(_д.лДата) КОГДА МЕСЯЦ(_д.пДата)< МЕСЯЦ(_д.лДата)ТОГДА ГОД(_д.пДата)- ГОД(_д.лДата)-1 КОНЕЦ КОНЕЦ КАК Лет, ВЫБОР КОГДА ГОД(_д.пДата)>= ГОД(_д.лДата)ТОГДА ВЫБОР КОГДА МЕСЯЦ(_д.пДата)>= МЕСЯЦ(_д.лДата)ТОГДА ВЫБОР КОГДА ДЕНЬ(_д.пДата)>= ДЕНЬ(_д.лДата)ТОГДА МЕСЯЦ(_д.пДата)- МЕСЯЦ(_д.лДата) КОГДА ДЕНЬ(_д.пДата)< ДЕНЬ(_д.лДата)ТОГДА МЕСЯЦ(_д.пДата)- МЕСЯЦ(_д.лДата)-1 КОНЕЦ КОГДА МЕСЯЦ(_д.пДата)< МЕСЯЦ(_д.лДата)ТОГДА ВЫБОР КОГДА ДЕНЬ(_д.пДата)>= ДЕНЬ(_д.лДата)ТОГДА12+ МЕСЯЦ(_д.пДата)- МЕСЯЦ(_д.лДата) КОГДА ДЕНЬ(_д.пДата)< ДЕНЬ(_д.лДата)ТОГДА12+ МЕСЯЦ(_д.пДата)- МЕСЯЦ(_д.лДата)-1 КОНЕЦ КОНЕЦ КОНЕЦ КАК Месяцев, ВЫБОР КОГДА ГОД(_д.пДата)>= ГОД(_д.лДата)ТОГДА ВЫБОР КОГДА МЕСЯЦ(_д.пДата)>= МЕСЯЦ(_д.лДата)ТОГДА ВЫБОР КОГДА ДЕНЬ(_д.пДата)>= ДЕНЬ(_д.лДата)ТОГДА ДЕНЬ(_д.пДата)- ДЕНЬ(_д.лДата) КОГДА ДЕНЬ(_д.пДата)< ДЕНЬ(_д.лДата)ТОГДА(ДЕНЬ(КОНЕЦПЕРИОДА(_д.лДата,МЕСЯЦ))- ДЕНЬ(_д.лДата))+ ДЕНЬ(_д.пДата) КОНЕЦ КОГДА МЕСЯЦ(_д.пДата)< МЕСЯЦ(_д.лДата)ТОГДА ВЫБОР КОГДА ДЕНЬ(_д.пДата)>= ДЕНЬ(_д.лДата)ТОГДА ДЕНЬ(_д.пДата)- ДЕНЬ(_д.лДата) КОГДА ДЕНЬ(_д.пДата)< ДЕНЬ(_д.лДата)ТОГДА(ДЕНЬ(КОНЕЦПЕРИОДА(_д.лДата,МЕСЯЦ))- ДЕНЬ(_д.лДата))+ ДЕНЬ(_д.пДата)+1 КОНЕЦ КОНЕЦ КОНЕЦ КАК Дней
У меня есть регистр накопления и документ задачи. В регистре есть реквизит "автор" ссылка на "автор" в документе задача. Сделал движение указав Движение.Автор = Автор;
Когда добавляю автора в документ, провожу его, то а регистре накопления пустое поле, что делать?