Четверг, 10.10.2024, 13:59
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
4.38 Управление итогами регистров. Не заполняется Период
gslawaДата: Понедельник, 08.01.2018, 10:23 | Сообщение # 1
Лейтенант
Группа: Проверенные
Сообщений: 61
Репутация: 32
Статус: Оффлайн
Запрос который создается функцией Обработка.ирУправлениеИтогамиРегистров.Форма.ЗапросСтатистикиПоПериодам(...)
возвращает Period как текстовую строку и не учитывает смещение дат на 2000

MS SQL 2016
Microsoft SQL Server Enterprise (64-bit)
13.0.1742.0

ОС: Windows x86 Microsoft Windows 8.1 version 6.3 (Build 9600)
Платформа: 8.3.11.2867
Конфигурация: Бухгалтерия предприятия, редакция 3.0 (3.0.57.10)
Режим БД: клиент-серверный
Приложение: Обычное приложение 32б
Основной режим запуска: Управляемое приложение
От имени администратора Windows: Нет
Режим совместимости: Версия8_3_10
Инструменты разработчика: Подсистема 4.38
Прикрепления: 1908575.jpg (85.0 Kb)
 
gslawaДата: Понедельник, 08.01.2018, 10:24 | Сообщение # 2
Лейтенант
Группа: Проверенные
Сообщений: 61
Репутация: 32
Статус: Оффлайн
Добавлено (07.01.2018, 10:57)
---------------------------------------------
Вдогонку ещё нужно поправить, наверняка у кого-то показывается
У меня пустая (см.вложение)

Для исправления добавил в МодульФормы Обработка.ирУправлениеРегистров.Форма
Процедура ОбновитьСтрокуРегистра(...

Код...
            ПредыдущееЧислоИтогов = 0;
Для Каждого СтрокаРезультата ИЗ ТаблицаРезультата Цикл
Стр = ПериодыИтогов.Добавить();
Стр.Назначение = СтрокаТаблицыИтогов.Назначение;
Стр.Период = СтрокаРезультата.Period;
//slawa Нач 20180107 15:38 (ID
Если ТипЗнч(СтрокаРезультата.Period) = Тип("Строка") Тогда
//вроде можно былобы использовать Стр.Период = ирОбщий.СтрокаДатыWMIВДатуЛкс(СтрокаРезультата.Period);
// но не получается её нужно править
// поеп так
ДатаСтрокой = СтрокаРезультата.Period;
ДатаСтрокой = СтрЗаменить(ДатаСтрокой, "-", "");
ДатаСтрокой = СтрЗаменить(ДатаСтрокой, ":", "");
ДатаСтрокой = СтрЗаменить(ДатаСтрокой, "/", "");
ДатаСтрокой = СтрЗаменить(ДатаСтрокой, " ", "");
ДатаСтрокой = СтрЗаменить(ДатаСтрокой, ".", "");
ДатаСтрокой = Лев(ДатаСтрокой, 8);
Стр.Период = Дата(ДатаСтрокой);
// наверняка будет ошибка при других настройках сервера
КонецЕсли;
//slawa Кон
Стр.ЧислоДетальных = СтрокаРезультата.DetailRows;
...

Добавлено (07.01.2018, 14:41)
---------------------------------------------
У меня даты приходят без смещения на 2000 лет, хотя вроде что-то там было устьановлено
Поэтому в модуле формы обработки поправил функцию ЗапросСтатистикиПоПериодам так:

...
| GROUP BY Period
| ) as al
| GROUP by Period
| ORDER by Period";

//slawa Нач 20180107 15:04 (ID:)
Запрос = СтрЗаменить(Запрос, "_Period as Period,", "(case when year(_Period) > 3000 then dateadd(year, -2000, _Period) else _Period end) as Period,");
Запрос = СтрЗаменить(Запрос, "Period as Period,", "(case when year(Period) > 3000 then dateadd(year, -2000, Period) else Period end) as Period,");
//slawa Кон
Возврат Запрос;

КонецФункции
Прикрепления: 4281310.jpg (86.1 Kb)
 
tormozitДата: Понедельник, 08.01.2018, 10:38 | Сообщение # 3
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
Спасибо. Ошибку подтверждаю.
 
tormozitДата: Понедельник, 08.01.2018, 11:01 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
Похоже в 8.3.11 изменился формат хранения периодов (добавлены 3 знака после запятой). Поэтому метод ADORecordsetToValueTable внешней компоненты GameWithFire не может их корректно преобразовать.
Найди в модуле формы строку
Код
ТаблицаРезультата = ADOUtils.ADORecordsetToValueTable(РезультатЗапроса)
и попробуй ее заменить на
Код
ТаблицаРезультата = ирОбщий.ПреобразоватьРезультатADOВТаблицуЗначенийЛкс(РезультатЗапроса, Истина,,,,, 2000);
Если не поможет, то замени второй параметр функции на Ложь и результат ее выполнения открой в исследователе объектов (Функция режима отладки Ис), двойным кликом по колонке "Значение" открой редактор таблицы значений и сохрани таблицу значений в файл. Приложи этот файл к своему сообщению.
 
gslawaДата: Понедельник, 08.01.2018, 12:15 | Сообщение # 5
Лейтенант
Группа: Проверенные
Сообщений: 61
Репутация: 32
Статус: Оффлайн
Истина не помогла
Ложь также ничего не вывела
про "и результат ее выполнения открой в исследователе объектов (Функция режима отладки Ис), двойным кликом по колонке "Значение" открой редактор таблицы значений..." не понял
просто в отладчике вывел ТЗ (во вложении)
если нужно сделать именно так, как ты сказал тогда объясни подробнее куды нажимать
Прикрепления: 6442891.mxl (26.8 Kb)
 
tormozitДата: Понедельник, 08.01.2018, 14:29 | Сообщение # 6
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
К сожалению мне пока непонятно, как универсально опознавать колонки ADO с типом Строка, в которых на самом деле хранится дата с дробной частью.
В функции ирОбщий.ПреобразоватьРезультатADOВТаблицуЗначенийЛкс посмотри, чему равен Field.Type для поля Period.
 
gslawaДата: Вторник, 09.01.2018, 09:27 | Сообщение # 7
Лейтенант
Группа: Проверенные
Сообщений: 61
Репутация: 32
Статус: Оффлайн
202

Добавлено (09.01.2018, 00:46)
---------------------------------------------
Думаю как временную меру можно сделать смещение дат так, как было в моем сообщении "> 3000" года, а в статистику выводить строку

Добавлено (09.01.2018, 09:27)
---------------------------------------------
Я использую для прямых запросов адо = Новый ComОбъект("ADODB.Connection")
Проблем с датами нет

Сообщение отредактировал gslawa - Вторник, 09.01.2018, 02:15
 
tormozitДата: Вторник, 09.01.2018, 22:29 | Сообщение # 8
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
Цитата gslawa ()
Проблем с датами нет
Поясни подробнее. А то я подумал что ты из той же таблицы считал данные и получил тип Дата у колонки Period. Кстати в колоне MSSQL там какой тип?
 
gslawaДата: Среда, 10.01.2018, 05:10 | Сообщение # 9
Лейтенант
Группа: Проверенные
Сообщений: 61
Репутация: 32
Статус: Оффлайн
Нет, извеняюсь
В других запросах используется
Попробовал именно с этой таблице - та-же проблема.

Тип datetime2(0)

Если период получать так cast(_Period as datetime) as Period, то результат нормальный
 
tormozitДата: Суббота, 20.01.2018, 17:03 | Сообщение # 10
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
Исправлено в 4.39
 
  • Страница 1 из 1
  • 1
Поиск: