Доброго времени суток!
Столкнулся с выгрузкой из 1С и никак не придумаю как правильно организовать загрузку данных, прошу вашей помощи.
Исходные данные допустим такие:
Дата.ФИО Расходы Описание
01.10.2018 80 $ Командировочные
02.10.2018 300 $ Проживание в отеле
10.10.2018 150 $ Обед с клиентом
13.10.2018 20 $ Такси
Итого 450$
Иванов И.И.
03.10.2018 60 $ Аренда авто
04.10.2018 200 $ Затраты на семинар
10.10.2018 50 $ Обед с клиентом
13.10.2018 90 $ Проживание в отеле
Итого 400$
Петров П.П.
Хотелось бы получить таблицу в привычном виде. Заранее спасибо.
ФИО Дата Расходы Описание
Иванов И.И. 01.10.2018 80 $ Командировочные
Иванов И.И. 02.10.2018 300 $ Проживание в отеле
Иванов И.И. 10.10.2018 150 $ Обед с клиентом
Иванов И.И. 13.10.2018 20 $ Такси
Петров П.П. 03.10.2018 60 $ Аренда авто
Петров П.П. 04.10.2018 200 $ Затраты на семинар
Петров П.П. 10.10.2018 50 $ Обед с клиентом
Петров П.П. 13.10.2018 90 $ Проживание в отеле
tmp:
LOAD * Inline [
Дата.ФИО, Расходы, Описание
01.10.2018, 80, Командировочные
02.10.2018, 300, Проживание в отеле
10.10.2018, 150, Обед с клиентом
13.10.2018, 20, Такси
Итого, 450$
Иванов И.И.
03.10.2018, 60, Аренда авто
04.10.2018, 200, Затраты на семинар
10.10.2018, 50, Обед с клиентом
13.10.2018, 90, Проживание в отеле
Итого, 400$
Петров П.П.
];
LET y = 0;
for i=0 to NoOfRows('tmp') - 1
let userID = $(i) + 1;
let id = 0;
LET dt = null;
LET amount = 0;
let descrypt = '';
DO WHILE 1 = 1
let id = $(y) + 1;
let dt = Peek('Дата.ФИО', $(y), 'tmp');
let amount = Peek('Расходы', $(y), 'tmp');
let descrypt = Peek('Описание', $(y), 'tmp');
Расходы:
LOAD * Inline [
Id,UserID, TheDate, Amount, Descr
$(id), $(userID), $(dt), $(amount), $(descrypt)
];
y = $(y) + 1;
if trim(Peek('Дата.ФИО', $(y), 'tmp')) = 'Итого' THEN
EXIT DO
ENDIF
LOOP
LET userName = Peek('Дата.ФИО', $(y)+1, 'tmp');
Сотрудники:
LOAD * Inline [
UserID, UserName
$(userID), $(userName)
];
y = $(y) + 2;
if(IsNull(Peek('Дата.ФИО', $(y), 'tmp'))) then
EXIT FOR
ENDIF
NEXT
DROP Table tmp;
Без циклов вряд ли что-то придумается(
Спасибо. Сейчас попробую :)
Всё вышло, благодарю.
Но, как вы знаете, аппетит приходит во время еды :)
Скажите, а у QS есть возможность сохранить эту таблицу, предварительно разбив по каждому сотруднику в отдельный xls файл?
Т.е. должно получиться:
1й файл: Иванов.xls
В файле:
ФИО Дата Расходы Описание
Иванов И.И. 01.10.2018 80 $ Командировочные
Иванов И.И. 02.10.2018 300 $ Проживание в отеле
Иванов И.И. 10.10.2018 150 $ Обед с клиентом
Иванов И.И. 13.10.2018 20 $ Такси
2й файл: Петров.xls
В файле:
ФИО Дата Расходы Описание
Петров П.П. 03.10.2018 60 $ Аренда авто
Петров П.П. 04.10.2018 200 $ Затраты на семинар
Петров П.П. 10.10.2018 50 $ Обед с клиентом
Петров П.П. 13.10.2018 90 $ Проживание в отеле
Ну и т.д, если больше сотрудников.
Заранее спасибо.
https://help.qlik.com/ru-RU/qlikview/November2017/Subsystems/Client/Content/Scripting/ScriptRegularStatements/Store.htm
Скрипт выгружает данные оператором Store в форматы qvd и текстовый с разделителями.
Тут, скорее, нужно смотреть в сторону макросов.
Цитата: Maestro от 25 октября 2018, 09:51:21
Тут, скорее, нужно смотреть в сторону макросов.
Проще и быстрее в 1с отчет подправить.
А если делать с прицелом на будущее - то извлечение из БД напрямую будет оптимальным решением.
Есть еще новый механизм в 1с - oData. Можно его потестировать, заодно с народом поделиться опытом ;)
Если нет программиста 1С, то вряд ли будет проще и быстрее ;D
Насколько я понял, ТС нужно один отчет из 1С раскидать по нескольким файлам.
А данные, да, проще и удобнее тянуть напрямую из базы 1С.
P.S. Как использовать цитирование? выделяю текст, нажимаю на "Цитата" и... Ничего не происходит. ЧЯДНТ?
Цитата: Maestro от 25 октября 2018, 03:25:20
Если нет программиста 1С, то вряд ли будет проще и быстрее ;D
Насколько я понял, ТС нужно один отчет из 1С раскидать по нескольким файлам.
А данные, да, проще и удобнее тянуть напрямую из базы 1С.
P.S. Как использовать цитирование? выделяю текст, нажимаю на "Цитата" и... Ничего не происходит. ЧЯДНТ?
На верхнее цитирование нажимай, а не на нижнее :)
Получилось. Благодарю :)