Импорт информации в Скалу — это очень просто!

Автор Сообщение
aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 27.01.2011 15:40 Заголовок сообщения: Импорт информации в Скалу — это очень просто!
Один из участников интересовался вопросом импорта информации в Скалу. Несмотря на то, что мне этот вопрос кажется довольно простым и разобраться в нём можно самостоятельно, я решил привести здесь пример.

В качестве примера приведу одну из задач, смысл которой я никогда не понимал, т.к. не вижу принципиальной разницы в том, списать ли сначала более дешёвые запасасы, а потом более дорогие или сначала усреднить их стоимость, а потом списывать. Главное, что в конце концов, спишется одна и та же сумма. Но тем не менее, раз для кого-то это принципиально, спорить не будем. Итак, задача: усреднить цены на одни и те же позиции запасов, находящиеся на разных складах по разной цене. Модель оценки запасов при этом — средневзвешенная цена.

Как это сделать с наименьшими трудозатратами? Например, таким образом:
* Создадим склад ZZZ999
* Переместим на него все запасы со всех складов (при этом их стоимость усреднится)
* Переместим всё что находилось на складах изначально, обратно (но уже по усреднённой цене)

Данный пример, разумеется, важен не сам по себе, а как учебная ситуация по импорту данных в Скалу. Конечно, мы будем это делать не вручную, а с помощью импорта заранее подготовленной информации. Следует заметить, что затраты усилий на подготовку данных для импорта, настройку импорта и сам импорт будут меньше ручного ввода данных только в том случае, если количество строк импорта будет не менее примерно 25, в противном случае, проще это сделать вручную (при ручном вводе, правда, более вероятна возможность ошибки)

Итак, подготовим данные. Это можно сделать либо распечатав в файл отчёт на конец периода, либо воспользовавшись простеньким SQL запросом. Я, разумеется, воспользуюсь запросом, но это вовсе не означает, что вы должны идти именно этим путём.

Код:
slct
SC03001 as StockCode,
SC03002 as FrmWH,
‘ZZZ999′ as ToWH,
SC03003 as Qty,
rtrim(SC03002)+’->ZZ’ as Remark,
‘УСРЕДНЕНИЕ’ as Comment
frm SC030100 (nolock)
where SC03003<>0
union all
slct
SC03001 as StockCode,
‘ZZZ999’ as FrmWH,
SC03002 as ToWH,
SC03003 as Qty,
‘ZZ->’+rtrim(SC03002) as Remark,
‘УСРЕДНЕНИЕ’ as Comment
frm SC030100 (nolock)
where SC03003<>0


Разумеется, можно сразу выгрузить результаты запроса в виде текстового файла, однако, я помещу эти данные в Excel и мы посмотрим, как надо выгрузить информацию из Excel’я в том виде, как это способна понять процедура импорта iScala.

Получилось вот что:

Обратите внимание, коды запасов у меня начинаются на 0, соответственно, поле куда я их поместил, должно иметь формат "текст". Выравнивание во всех ячейках нужно установить по левому краю.
Важно! Разделитель десятичных знаков при импорте должен быть "." (точка! а не запятая)
Теперь установим ширину столбцов по 10 для всех столбцов (здесь у нас поля, которые в скале имеют длину 6 и 10 символов, а количества довольно небольшие, так что 10 вполне хватит. Сохраним (на всякий случай, вдруг пригодится).
Теперь сохраним в формате "форматированный текст (разделитель — пробел) (*.prn)
Откроем сохранённый .prn файл с помощью блокнота:

Теперь мы должны определить с какого символа начинается каждое поле и сколько символов оно длиной, например, поле "Со склада" начинается с 11-го символа и имеет длину 10 символов (на самом деле в Скале это поле не более 6 символов длиной).
Теперь "объясним" это Скале. Для этого следует воспользоваться следующим пунктом меню: Управление Запасами -> Прочее -> Функции Импорта -> Импорт Проводок Перем.Запасов -> 2. Определение проводок

Настроим соответствие файла для импорта тому, в какие поля Scala это требуется поместить:

Из данной картинки видно, что в подготовленном нами файле поле "Код Запаса" начинается с 1-й позиции и имеет длину 10 символов;
поле "Со Склада" начинается с 11-й позиции и имеет длину 6 символов;
поле "На Склад" начинается с 21-й позиции и имеет длину 6 символов;
поле "Количество" начинается с 31-й позиции и имеет длину 10 символов;
поле "Ссылка" начинается с 41-й позиции и имеет длину 10 символов;
поле "Номер заказа" начинается с 51-й позиции и имеет длину 10 символов;
Теперь остаётся выполнить сам импорт с помощью пункта меню Управление Запасами -> Прочее -> Функции Импорта -> Импорт Проводок Перем.Запасов -> 1. Обновление

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

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

Теперь можно распечатать список проводок по запасам и посмотреть результат наших действий:

В результате мы получили то, что хотели. На картинке видно, что запас приходит на склад ZZZ999 по разным ценам, а вазвращается обратно по усреднённой. А мы узнали, как делать импорт в Скалу.

Serj
Заслуженный форумщик

Зарегистрирован: 15.12.2006
Сообщения: 90
Откуда: Санкт-Петербург

Добавлено: 27.01.2011 17:35 Заголовок сообщения:
Какая до боли знакомая процедура Laughing
aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 03.02.2011 19:10 Заголовок сообщения: Импорт накладной по заказу на закупку
Продолжим тему. В качестве примера привожу импорт накладной по заказу на закупку.

Итак, подготовим данные. Я воспользуюсь запросом, но это вовсе не означает, что вы должны идти именно этим путём. Данные могут быть взяты, например, от поставщика.

Код:
slct
PC03001 as OrderNumber,
PC03002 as OrderLine,
PC03005 as StockCode,
PC03006+PC03007 as StockItemDescription,
PC03010 as Qty
frm PC030100 (nolock)
where PC03001=’5100000009′


Эти данные я выгружаю в Эксель и наобум добавляю информацию в поля, которых нет в запросе (чисто для примера)
Получилось вот что:

Теперь установим ширину столбцов, соответственно полям в Скале. Ненужным мне полям с кодом запаса и описанием я просто назначаю ширину столбца равной нулю.
Теперь сохраним в формате "форматированный текст (разделитель — пробел) (*.prn)
Откроем сохранённый .prn файл с помощью блокнота:

Теперь мы должны определить с какого символа начинается каждое поле и сколько символов оно длиной, например, поле "№ строки" начинается с 11-го символа и имеет длину 6 символов.
Теперь "объясним" это Скале. Для этого следует воспользоваться пунктом меню как на картинке
Настроим соответствие файла для импорта тому, в какие поля Scala это требуется поместить:

Из данной картинки видно, что в подготовленном нами файле поле "№ заказа на закупку" начинается с 1-й позиции и имеет длину 10 символов;
поле "Позиция" начинается с 11-й позиции и имеет длину 6 символов;
и так далее.
Теперь остаётся выполнить сам импорт

Ну, вот, процесс завершён. Вы заметили, что одна запись ошибочная? Почему это произошло я уже писал ранее, найдите это объяснение выше.
Теперь можно через запросы по заказам войти в строку поставки по строке заказа и посмотреть результат наших действий:

В результате мы получили то, что хотели. На картинке я обозначил прямоугольниками те поля, подробности по которым мы хотели указать при импорте.

Примечание: пожалуйста, замените slct и frm в запросе на правильные слова, при размещении сообщения система не даёт мне их использовать, воспринимая это как попытку атаки 🙂