К основному контенту

Сообщения

Запросы. Объеденяем периоды действия

Прошлая задача с периодами обрела новую форму (и да, задача по прежнему упрощена - периоды в днях) Нужно таблицу вида Дата Начала  Дата Окончания 01.01.2015    11.01.2015 17.01.2015    18.01.2015 19.01.2015    20.01.2015 21.01.2015    22.01.2015 28.01.2015    28.01.2015 привести к таблице вида Дата Начала Дата Окончания 01.01.2015    11.01.2015 17.01.2015    22.01.2015 28.01.2015    28.01.2015 Пришел к следующему решению, используя ранее накопленные знания - Период по дням - Собираем периоды действия PROFIT!

Запросы.РАЗНОСТЬДАТ(СЕКУНДА) и MS SQL. Ошибка HResult 80040E57

Столкнулся сегодня с ошибкой выполнения запроса в котором применяется функция РАЗНОСТЬДАТ(Дата1,Дата2,СЕКУНДА). Ошибка воспроизводится в Клиент-Серверном варианте, где в качестве СУБД семейства MS SQL Server HResult 80040E57 "difference of two datetime columns caused overflow at runtime" Причина в ограничении использования DateDiff (результат перевода Языка запросов 1С в T-SQL) DATEDIFF produces an error if the result is out of range for integer values. For milliseconds, the maximum number is 24 days, 20 hours, 31 minutes and 23.647 seconds . For seconds, the maximum number is 68 years. https://msdn.microsoft.com/ UPD: ошибка справедлива и для файлового варианта информационной базы. UPD 2: ошибка справедлива и для Вычисляемых полей СКД Суть решения - проверить разность дат, и если разность дат больше 68 лет - рассчитать число секунд "в ручную". Количество секунд от первых суток периода + количество "полных" дней в пери...

Запрос. Собираем периоды действия.

Да задача изначальна упрощена - меня интересуют непрерывные периоды действия в днях. Превращаем таблицу вида Дата 01.01.2015 02.01.2015 04.01.2015 05.01.2015 06.01.2015 12.01.2015 в таблицу ДатаНачала ДатаОкончания 01.01.2015 02.01.2015 04.01.2015 06.01.2015 12.01.2015 12.01.2015 Главная хитрость/идея: сравнить разность дат (получаем все возможные периоды для исходного множества) границ периода и количества вхождений дат (элементов множества) в этот период КОЛИЧЕСТВО ( НАЧАЛОПЕРИОДА ( втДаты . Дата , ДЕНЬ ) ) - 1 = РАЗНОСТЬДАТ ( втВариации . ДатаНачала , втВариации . ДатаОкончания , ДЕНЬ )   Собственно текст запроса под катом

БСП. Внешние отчеты и обработки

Обязательный метод модуля объекта отчета/обработки //ПОДГОТОВКА РЕГИСТРАЦИИ ГЛОБАЛЬНОГО ОТЧЕТА Функция СведенияОВнешнейОбработке ( ) Экспорт ПараметрыРегистрации = Новый Структура ; ПараметрыРегистрации . Вставить ( "Вид" , "ДополнительныйОтчет" ) ; //Варианты: "ДополнительнаяОбработка", "ДополнительныйОтчет", "ЗаполнениеОбъекта", "Отчет", "ПечатнаяФорма", "СозданиеСвязанныхОбъектов" ПараметрыРегистрации . Вставить ( "Наименование" , "<Наименование элемента Справочника дополнительных обработок>" ) ; ПараметрыРегистрации . Вставить ( "Версия" , "<Номер версии обработки>" ) ; //"1.0" ПараметрыРегистрации . Вставить ( "БезопасныйРежим" , Истина ) ; //Варианты: Истина, Ложь ПараметрыРегистрации . Вставить ( "Информация" , "<Краткое описание отчета>" ) ; ТаблицаКоманд = ПолучитьТабли...

СКД, Табличный документ в Excel и поле типа Дата

Не буду вдаваться в подробности "боли и слёз", но если сохранить табличный документ 1С в Excel есть проблема, что даты имеют формат Общий. Проблема не столько в 1С, сколько в Excel, поскольку если для такой ячейки инициализировать редактирование - поле уже будет интерпретироваться как дата, сохраняя прежний тип "общий".  Но как оказалось на партнёрском форуме было дано лекарство ещё 2011 году Как запасной вариант для обхода: открыть сохраненный файл Excel. Выполнить команду "Заменить". Указать, что найти нужно точку "." и заменить ее на "." во всем документе. Пруф Другими словами: Ctrl+H "." заменить на "." Всё! UPD 2020.11.24 Excel = Новый COMОбъект("Excel.Application"); //Создаем объект MS Excel Excel.DisplayAlerts = 0; Excel.Visible = Ложь; Документ = Excel.Workbooks.Open(ИмяФайла); Документ.Activate(); Лист = Excel.Sheets(1); Лист.Rows.Replace(".","."); Документ.Save() Excel...

httpОтвет.КодСостояния = 301

Век живи - век учись. Черновая публикация - заменить псевдокод - (код доступен для Сервер, Клиент, Внешнее Соединение) // Вернет результат Соединение.Получить(Запрос, ИмяВременногоФайла) с обработкой ответа 301 // Параметры: // Соединение - HTTPСоединение - // Запрос - HTTPЗапрос - // ИмяВременногоФайла - Строка - необязательный параметр метода Соединение.Получить(Запрос, ИмяВременногоФайла) // Отказ - булево - Будет содержать признак отказа в выполнении метода // Возвращаемое значение: // - httpОтвет - Функция Получить ( Соединение , Запрос , ИмяВременногоФайла = Неопределено , Отказ = Ложь ) Отказ = Ложь ; Ответ = Соединение . Получить ( Запрос , ИмяВременногоФайла ) ; Если Ответ . КодСостояния = 301 Тогда url = Ответ . Заголовки . Получить ( "location" ) ; // url --> Новое HTTPСоедиение(url{сервер,порт},Соединение{Пользователь,Пароль,Прокси,Таймаут,ЗащищенноеСоединение}) // Запрос.АдресРесурса = url.АдресРесурса // Отказ = ...

НормализоватьHTML()

// вернёт строку, для которой все имена html тегов приведены // к нижнему регистру. // // "<HTML><P Atr=""><I></i></p></htmL>" --> "<html><p Atr=""><i></i></p></html>" // // Параметры: // СтрокаHTML - Строка // Возвращаемое значение: // - Строка - Функция НормализоватьHTML ( знач СтрокаHTML ) Перем массив , НачалоТега , символ , Позиция ; массив = Новый Массив ; массив . Добавить ( ">" ) ; массив . Добавить ( " " ) ; массив . Добавить ( "!" ) ; НачалоТега = Ложь ; Для Позиция = 1 По СтрДлина ( СтрокаHTML ) Цикл // ctrl+pause ОбработкаПрерыванияПользователя ( ) ; символ = Сред ( СтрокаHTML , Позиция , 1 ) ; Если НачалоТега Тогда Если массив . Найти ( символ ) = Неопределено Тогда СтрокаHTML = Лев ( СтрокаHTML , Позиция - 1 ) + нрег ( символ ) + Сред (...