Избранное сообщение

Фетісов В. С. Комп’ютерні технології в тестуванні. Навчально-методичний посібник. 2-ге видання, перероблене та доповнене / Мои публикации

В 10-х годах я принимал участие в программе Европейского Союза Tempus "Освітні вимірювання, адаптовані до стандартів ЄС". В рамк...

Благодаря Интернету количество писателей и поэтов увеличивается в геометрической прогрессии. Поголовье читателей начинает заметно отставать.

среда, 31 августа 2016 г.

Это - рок. Deep Purple. Son of Alerik

В 1984 году в жизни фанатов рока был очередной праздник - воссоединилась группа Deep Purple в лучшем составе. Воссоединение было ознаменовано выпуском нового альбома  Perfect Strangers.  Но я вместо песен предлагаю послушайте инструментальную композицию "Son of Alerik" ("Сын Алерика";-). Написал ее выдающийся британский гитарист и композитор Ричи Блэкмор.  В 1984 году она была выпущена на второй стороне сингла Perfect Strangers.  В 1999 году она была включена в цифровое переиздание альбома "Perfect Strangers" в качестве бонус-трека. 
Приятного прослушивания!
Сергей Петренко
Специально для рубрики "Это - рок"

Смотрим и слушаем: https://www.youtube.com/watch?v=_hKxJzV4tEo


вторник, 30 августа 2016 г.

Краеведческий музей Ворзеля. Ученическая парта XIX в. / Фото из личного архива

Смотри также:

понедельник, 29 августа 2016 г.

Краеведческий музей Ворзеля. Похвальная грамота, 1946 г. / Фото из личного архива


Смотри также:

Пример работы с Json Simple в Java: парсинг и создание JSON / Программирование на Java

Этой статьей я начну серию публикаций по работе с JSON в Java. Для начала пройдусь по знакомым и простым решениям, а затем перейду к продвинутым библиотекам. Примером «простых решений» сегодня будет работа с Json Simple, а именно парсинг (разбор) существующего JSON объекта и создание нового.

Обзор Json Simple API

Json Simple — представляет собой простой API для обработки JSON. Сам API состоит из около 13 классов, основу которых составляют следующие 5 классов:
  1. Класс JSONParser предназначен для разбора строки с JSON-содержимым. Он принимает объект java.io.Reader или строку.
  2. Класс JSONObject — это Java представление JSON строки. Класс JSONObject наследует HashMap и хранит пары ключ — значение. Также у него есть очень полезный метод writeJSONString(Map map, Writer out), который используется для конвертации мапы в JSON строку.
  3. Класс JSONArray представляет собой коллекцию. Он наследует ArrayList и реализует интерфейсы JSONAware и JSONStreamAware.
  4. JSONValue — класс для парсинга JSON строки в Java объекты. Для этого он использует класс JSONParser. JSONValue содержит множество полезных методов для создания JSON из различных типов, например, метод writeJSONString(Object value, Writer out) создаст JSON-строку из Java объекта. Он также имеет методы для работы со специальными (управляющими) символами используя метод escape(String s). С помощью этого метода можно безопасно работать с кавычками «» и такими символами, как \f, \t, \n, \, /, \r, \b и многими другими.
  5. Интерфейс JSONAware. Класс должен реализовывать этот интерфейс, чтобы конвертироваться в JSON формат.

Json Simple API. Пример разбора JSON строки и создания нового JSON объекта

Ниже описан пример парсинга строки с JSON содержимым, а именно текущей погоды в каком-то городе. Я использовал сервис Openweathermap.org для получения данных о погоде.
Если Вы хотите просто попробовать JSON Simple API в действии и не хотите заморачиваться над получением этих данных с какого-то сервиса, то просто скопируйте полученный JSON по этой ссылке: openweather и используйте его в виде обычной строки в Java.

Создание maven проекта

Для удобства я создал простой maven проект в Intellij IDEA и добавил в зависимости последнюю версию json-simple в файле pom.xml:
<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
<dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1.1</version>
</dependency>
Теперь перейдем к созданию класса JsonUtils, в котором будут все необходимые методы для парсинга готового json в виде строки и создания нового Json содержимого.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package ua.com.prologistic.app;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class JsonUtils {

    /**
     * Метод для получения данных по указанной ссылке
     *
     * @param url - ссылка в виде объекта URL (Uniform Resource Locator)
     * @return содержимое страницы на указанной ссылке в @param url
     */
    public static String parseUrl(URL url) {
        if (url == null) {
            return "";
        }
        StringBuilder stringBuilder = new StringBuilder();
        // открываем соедиение к указанному URL
        // помощью конструкции try-with-resources
        try (BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()))) {

            String inputLine;
            // построчно считываем результат в объект StringBuilder
            while ((inputLine = in.readLine()) != null) {
                stringBuilder.append(inputLine);
                System.out.println(inputLine);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringBuilder.toString();
    }


    // парсим некоторые данные о погоде
    public static void parseCurrentWeatherJson(String resultJson) {
        try {
            // конвертируем строку с Json в JSONObject для дальнейшего его парсинга
            JSONObject weatherJsonObject = (JSONObject)JSONValue.parseWithException(resultJson);

            // получаем название города, для которого смотрим погоду
            System.out.println("Название города: " + weatherJsonObject.get("name"));

            // получаем массив элементов для поля weather
            /* ... "weather": [
            {
                "id": 500,
                    "main": "Rain",
                    "description": "light rain",
                    "icon": "10d"
            }
            ], ... */
            JSONArray weatherArray = (JSONArray) weatherJsonObject.get("weather");
            // достаем из массива первый элемент
            JSONObject weatherData = (JSONObject) weatherArray.get(0);

            // печатаем текущую погоду в консоль
            System.out.println("Погода на данный момент: " + weatherData.get("main"));
            // и описание к ней
            System.out.println("Более детальное описание погоды: " +weatherData.get("description"));

        } catch (org.json.simple.parser.ParseException e) {
            e.printStackTrace();
        }
    }

    // формируем новый JSON объект из нужных нам погодных данных
    public static String buildWeatherJson() {
        // для простоты примера просто хардкодим нужные данные в методе
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", "Лондон");
        jsonObject.put("main", "Солнечно");
        jsonObject.put("description", "Мороз трескучий, На небе ни единой тучи");

        return jsonObject.toJSONString();
    }

    // создаем объект URL из указанной в параметре строки
    public static URL createUrl(String link) {
        try {
            return new URL(link);
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        }
    }
}
Теперь создадим Main класс для работы с утилитным методом парсинга и создания json:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package ua.com.prologistic.app;

import java.net.URL;

public class Main {
    /**
     * Для простоты и удобства используем уже сформированную строку
     * с запросом погоды в Лондоне на данный момент
     * <p>
     * другие примеры запросов можете глянуть здесь
     * {@see <a href="http://openweathermap.org/current">openweathermap</a>}
     * также Вам понадобится свой API ключ
     */
    public static final String WEATHER_URL =
            "http://api.openweathermap.org/data/2.5/weather?q=London,uk" +
                    "&units=metric&appid=241de9349721df959d8800c12ca4f1f3";

    public static void main(String[] args) {
        // создаем URL из строки
        URL url = JsonUtils.createUrl(WEATHER_URL);

        // загружаем Json в виде Java строки
        String resultJson = JsonUtils.parseUrl(url);
        System.out.println("Полученный JSON:\n" + resultJson);

        // парсим полученный JSON и печатаем его на экран
        JsonUtils.parseCurrentWeatherJson(resultJson);

        // формируем новый JSON объект из нужных нам погодных данных
        String json = JsonUtils.buildWeatherJson();
        System.out.println("Созданный нами JSON:\n" + json);
    }
}
В ходе работы с Json Simple API по этому примеру у Вас могут возникнуть такие сложности:
  • Если запрос на погодный сервис не проходит, то замените API ключ, который используется в примере, на свой.
  • Если у Вас проблема с maven проектом, то можно создать простой Java проект идобавить вручную jar библиотеку Json Simple.
Теперь запустим приложение и посмотрим на результат выполнения в консоль:

Полученный JSON:
{"coord":{"lon":-0.13,"lat":51.51},"weather":[{"id":521,"main":"Rain","description":"shower rain","icon":"09d"}],"base":"stations","main":{"temp":20.48,"pressure":1013,"humidity":64,"temp_min":18,"temp_max":23},"visibility":10000,"wind":{"speed":6.2,"deg":220},"rain":{"1h":0.2},"clouds":{"all":75},"dt":1472401589,"sys":{"type":1,"id":5091,"message":0.0429,"country":"GB","sunrise":1472360901,"sunset":1472410403},"id":2643743,"name":"London","cod":200}
Название города: London
Погода на данный момент: Rain
Более детальное описание погоды: shower rain
Созданный нами JSON:
{"name":"Лондон","description":"Мороз трескучий, На небе ни единой тучи","main":"Солнечно"}
В этой статье мы познакомились с простым способом парсинга/создания json, а в следующих статьях Вас ждут другие более удобные и популярные способы обработки json.
Скачать проект можно по этой ссылке.
Подписывайтесь на обновления и следите за новыми статьями!

Смотри также:

Настройки параметров учета в 1С УПП и Комплексной 1.1.: Режим учета затрат / 1С

29.08.16. В 1С существует несколько комплектов настроек, которые определяют правила учета в программе Настройки параметров учета - самый первый.
Довольно часто попадают в поле зрения базы 1С УПП и Комплексной автоматизации, настройки в которых не были продуманы при внедрении и по мере накопления документов накопились и серьезные проблемы. Как правило, это неудачный результат экономии на внедрении.  Представленные здесь материалы не заменяют работу специалистов. Их задача скорее - дать пищу для размышлений и сделать Ваше общение со специалистом 1С более предметным и ответственным.
Я не планирую здесь перепечатывать справку 1С. Добравшись до Настроек параметров учета не поленитесь нажать на вопросик в правом нижнем углу формы. Базовые моменты настроек там описаны достаточно понятно.А здесь мы с Вами рассмотрим ряд подводных камней, последствия которых не так очевидны. Вы можете натолкнуться на них через существенное время работы в программе, когда для их исправления уже потребуются значительные усилия.
1. Где найти Настройки параметров учета
 Сначала ответим на этот классический вопрос. Настройки спрятаны в отдельный интерфейс, чтобы оградить их от случайного вмешательства.
Необходимо перейти в интерфейс Заведующий учетом. В этом интерфейсе находим меню Настройка учета - Настройка параметров учета:

Интерфейс Заведующий учетом - Настройка параметров учета 1С

Открывается окно настроек, где в первую очередь нас будет интересовать подводный камень №1:
2.  Режим учета затрат
 Настройка параметров учета - режим учета затрат

При создании новой базы 1С заполняет режим учета затрат по умолчанию. То есть, автоматически установлена Расширенная аналитика в версии Регламентированный учет с дополнительной аналитикой.
А чуть ниже мы видим детальные настройки партионного учета.
И здесь возникает сразу 2 вопроса:
1.  А точно Расширенная аналитика (иначе ее еще называют РАУЗ)? Может быть лучше выбрать традиционный партионный учет.
2. Что означает Регламентированный учет с дополнительной аналитикой - это и есть РАУЗ или  речь о какой-то еще настройке?
Начнем с первого вопроса:

3. Расширенный учет затрат или партионный

Какого кота тащить из мешка?
Расширенная аналитика - в первую очередь важна для производств, так как:

+  Умеет считать встречный выпуск. Если у вас производство с встречным выпуском, то Вам -этот вариант.
+  Быстрее рассчитывает себестоимость. Правда это всерьез заметно на очень больших объемах.
+  В Комплексной автоматизации  1.1 учет производства возможен только в Расширенной аналитике. В режиме партионного учета просто не проводится документ Расчет себестоимости.
+  И преимущество для всех: можно не думать о порядке ввода документов в пределах месяца, так как в пределах месяца даже ФИФО считается по средней. Пересчет по ФИФО делается при закрытии месяца.

Есть и сложности:

×  Не умеет резервировать конкретные серии под заказы покупателей. Дело в том, что при резервировании по сериям заказ пишется прямо в регистры партионного учета и резервирует конкретные партии. Но в регистры Расширенной аналитики нельзя записать заказ. Там не предусмотрено такой аналитики партий.
×  Учет МПЗ по ФИФО поддерживается не до партии, а до дня поступления и поставщика.  Опять же причина проста - в аналитике партий нет документа партии.
       В общем случае этого достаточно, но бывают компании, для которых контролировать        списание стоимости конкретной партии - критично. Например,  лекарственные средства.

Партионный учет в версии по ФИФО незаменим в случаях, когда требуется точно определить  фактическую себестоимость партии в момент списания. И иметь данные валовой прибыли в режиме реального времени.
Такое требование нередко в торговых компаниях. Но для его выполнения необходим высокий уровень организации процесса. Как  минимум нужно, чтобы:
  •  уже на момент первого списания партии были введены все документы, влияющие на ее себестоимость
  • не использовать ввод  документов движения товаров задним числом.
 Я несколько раз сталкивалась с более или менее успешными реализациями такой концепции учета на 1С УПП. Работает, но только когда действительно сильно нужно.
Первое требование не так сложно реализовать.  Второе оказалось значительно более трудным для наших компаний.  
Как правило, по-настоящему  часто задним числом требуется работать только бухгалтерии. Но, за время работы в других программах, оперативные службы успевают накопить большой багаж привычек все делать задним числом. Чтобы избавиться от них, требуется немало административного мужества.

Отчеты по движению ТМЦ и затрат

Режимы затрат принципиально различаются в плане отчетов по себестоимости МПЗ и учету затрат в производстве.  Это два отдельных комплекта отчетов. 
С некоторой осторожностью могу утверждать, что с нуля проще освоить отчеты по Расширенной аналитике. Хотя бы потому, что их значительно меньше.

Вывод

Если Вы считаете себестоимость по среднему, то оставляйте Расширенную аналитику,  даже не думайте.
Как правило, жесткий контроль себестоимости в течение месяца не приносит выгоды, сопоставимой с затратами на ведение учета таким образом, чтобы этого контроля достичь. Поэтому не следует ради него кидаться с головой в партионный учет.
Но,
  • если у Вас есть объективная взвешенная необходимость контроля маржинальности  сделок в реальном времени,
  • или, если для Вашего бизнеса критично резервировать серии товара под заказы клиентов и обойтись более простыми средствами нельзя,  
то тут следует рассмотреть переход на партионный учет .

Итак, в настройках мы оставили РАУЗ. Но, все - таки... смущает фраза Регламентированный учет с дополнительной аналитикой. То есть,  мы подошли ко второму вопросу:

4.  Режим использования расширенной аналитики

В предустановленных настройках учета совершенно не очевидно для стороннего наблюдателя, что есть варианты и внутри самой Расширенной аналитики. Проделаем вот что:
1. Выберем режим учета затрат Партионный учет. В открывшемся окне снимем флаг  Использовать расширенную аналитику затрат:
Настройка параметров учета в УПП и КА 1.1. Измененение режима учета затрат  
Предупреждение нас не пугает, база-то пока пустая.
2. Нажимаем на Изменить настройку и снова видим предупреждение о необходимости перепровести все документы:


3. Соглашаемся и с удивлением смотрим на следующее окно:

Настройка параметров учета в УПП и КА 1.1. Измененение варианта Расширенной аналитики затрат

Вот они - варианты настройки Расширенной аналитики. И содержат эти варианты очень существенные различия.
Читаем пояснения под каждым вариантом внимательно. Вот важный момент. Только последний вариант позволяет нам вводить данные управленческого учета независимо от регламентированного. Технически это выражается в том, что мы имеем два отдельных регистра Учет затрат: регламентированный и управленческий.
Плюс изюминка - возможность вести учет затрат по проектам и управленческим подразделениям тоже предполагается только для последнего варианта:

Детализация затрат при расширенной аналитике затрат

4. В своем случае я выберу последний вариант - раздельное ведение регламентированного и управленческого учета  затрат. И  снова предупреждение:


соглашаемся, указываем период начала работы в базе:


5. Достигаем, наконец, результата: изменение варианта детализации Расширенной аналитики затрат:

Настройка параметров учета УПП и КА 1.1. Расширенная аналитика затрат

Я думаю, Вы вполне представили себе, чего стоит изменить настройку Расширенной аналитики потом. Важно продумать, какая настройка потребуется до начала работы и выбрать нужную сразу. В базе с большим количеством документов это будет гораздо сложнее.

5.  Использовать партионный учет

Рассмотрим особенности настроек партионного учета:

Настройка параметров учета УПП и КА 1.1. Использовать партионный учет

 

1. Списание партий документом.

 Вам предлагается принять решение: списание партий производится самим документом или потом, отдельной обработкой. В свете всего вышесказанного, выбор партионного учета, а не РАУЗ, как правило, обусловлен соображениями оперативного контроля себестоимости. А значит, требуется проведение по партиям документом, списывающим партию.
Но, для компаний с действительно большим документооборотом это может привести к снижению быстродействия. В этом случае, еще раз необходимо взвесить все "за" и "против" такой настройки.

 

2. Списывать партии расходным ордером.

Эта настройка не управляет самим фактом использования ордерной схемы на складах. Такая возможность в 1С УПП и Комплексной автоматизации 1.1 есть всегда, вне зависимости от настроек параметров учета.
Эта настройка управляет моментом списания стоимости партии со склада и проводки в бухгалтерском учете.
Дело в том, что если вы будете использовать расходные ордера без этого флага, то при оформлении документа реализации будет выполнено списание партий с промежуточным видом операции. В бухгалтерском учете они будут списаны на забалансовый учет. И окончательно они будут списаны расходным ордером. Когда его оформят.
Другими словами, списание партий и бухгалтерские проводки будут выполняться только расходным ордером, а Реализация товаров и услуг будет только перемещать товар в регистрах в Товары к передаче в количественном выражении.
Предупрежу вас, что при этой схеме возникают неожиданные следствия в бухгалтерском учете. В бухгалтерских отчетах: ОСВ, карточках счета документом в проводке выступают документы Расходный ордер на товары, а не Реализация товаров и услуг. Бухгалтера, конечно. по началу нервничают. Неудобно. 
Но, если использование в схеме складского учета забалансовых счетов нежелательно, то такая схема, конечно, обоснована. 

 

3. Детализация учета.

Предлагается ввести организации, для которых управленческий учет партий будет вестись в разрезе организаций. Если у Вас одна организация, то это не важно. Если несколько, то эта настройка может серьезно повлиять на себестоимость списания.
Если организации не  указаны, то стоимость списываемых партий в управленческом учете будет определяться без учета того, к какой организации относится эта партия.  Эта стоимость может отличаться от того, что будет списываться в бухгалтерском учете, так как он всегда ведется по организациям.
Такой вариант может быть удобен для оперативной торговли с внутренней перепродажей. То есть в течение месяца менеджеры продают товар не думая, какой организации он принадлежит. При этом не контролируются остатки организаций. А в конце месяца оформляются документы перепродажи для выравнивания отрицательных остатков в регламентированном учете. Это уже, так сказать, неоперативно.
Но если себестоимость товара вам важно оценивать отдельно для каждой организации,  то необходимо указать здесь организации. Иначе управленческий учет себестоимости партий будет "ползти":

Настройка способов ведения управленческого партионного учета

Про закладку Режим учета затрат на сегодня все. Следите за следующими материалами по Настройке параметров учета. Не забывайте оставлять ваши комментарии и задавать вопросы. А также делитесь в соцсетях, если Вам показался материал полезным: чтобы другие пользователи 1С тоже могли его увидеть.
Учитесь новому каждый день и меняйте свою жизнь к лучшему!

Источник: http://subscribe.ru/group/nastrojka-programm/12492156/

Смотри также: