Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
3 / 3 / 2
Регистрация: 04.01.2013
Сообщений: 73

Serializable не сериализуется

16.06.2013, 04:57. Показов 3444. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Пытаюсь реализовать в игре функции "save game" и "load game". Пока в простом окошке хочу сделать так, чтобы оно при нажатии "save" запоминало своё состояние (цвет), а потом при вызове "load" вызывало (перекрашивало себя) в запомненное состояние. Сейчас при нажатии на "save" возникает java.io.NotSerializableException. Но я ведь объявил класс сериализуемым. Подскажите пожалуйста что не так делаю.
Кликните здесь для просмотра всего текста

Java
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package SerializableTest;
 
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
 
public class SerialTest extends JFrame implements Serializable, ActionListener {//
 
    private static final long serialVersionUID = -6293355842390801274L;
                                               //-6293355842390801274L
    
    Color grn, mag, gry;
    ByteArrayOutputStream out;  
    SerialTest serObj;  
    Container cp;
 
    SerialTest() {
        
        serObj = this;  
        
        grn      = Color.GREEN;
        mag      = Color.magenta;
        gry      = Color.gray;
        
        cp = getContentPane();
        cp.setBackground(new Color(0,0,255));
        setSize(400, 300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        JButton jbGreen     = new JButton("GREEN");     jbGreen.addActionListener(this);    
        JButton jbMagenta   = new JButton("MAGENTA");   jbMagenta.addActionListener(this);  
        JButton jbGray      = new JButton("GRAY");      jbGray.addActionListener(this); 
        JButton jbSave      = new JButton("SAVE");      jbSave.addActionListener(this);     
        JButton jbLoad      = new JButton("LOAD");      jbLoad.addActionListener(this);
                        
        JMenuBar mb = new JMenuBar();
        mb.add(jbGreen); mb.add(jbMagenta); mb.add(jbGray); mb.add(jbSave); mb.add(jbLoad);
        this.setJMenuBar (mb);
        
        setVisible(true);
    }// end SerialTest
    
    private void saveGame () throws ClassNotFoundException{
        try {
            out = new ByteArrayOutputStream();
            ObjectOutputStream os = new ObjectOutputStream(out);
            os.writeObject(serObj);
            os.flush();
            os.close();
        }
 
        catch (IOException e1) {
            System.err.println("ERROR " + e1);
        }
 
    }
    
    private void loadGame(){
        try{
        ByteArrayInputStream in = new ByteArrayInputStream(
        out.toByteArray()
        );
        ObjectInputStream is = new ObjectInputStream (in);
        SerialTest copy = (SerialTest) is.readObject();
        is.close();
        }
        
        catch (ClassNotFoundException e1) {
            System.err.println("ERROR " + e1);
        } catch (IOException e1) {
            System.err.println("ERROR " + e1);
        }
 
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
 
        String cmd = ( (JButton) e.getSource()).getText();
        
        switch(cmd){
        
        case "GREEN" :      cp.setBackground(grn);
        break;
        case "MAGENTA" :    cp.setBackground(mag);
        break;
        case "GRAY" :       cp.setBackground(gry);
        break;
        case "SAVE":        try {
                                saveGame();
                            }
                            catch (ClassNotFoundException e1) {
                                e1.printStackTrace();
                            }
        break;
        case "LOAD" :       loadGame();
        break;
        
        }
        
    }
    
    public static void main(String[] asd){
        new SerialTest();
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.06.2013, 04:57
Ответы с готовыми решениями:

Для чего написано: import java.io.Serializable; public class person implements Serializable?
package com.company; import java.io.Serializable; public class person implements Serializable { protected String name; ...

Не сериализуется SortedDictionary
При попытке сериализации SortedDictionary сыпятся ерроры (SerializationException: Type System.Collections.Generic.RBTree is not marked as...

Не сериализуется приведенный тип в WCF
Здравствуйте. Есть класс TurbineField, который имеет атрибуты DataContract и DataMember. Абстрактный класс Turbine наследуется от...

31
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
19.06.2013, 16:03
Студворк — интернет-сервис помощи студентам
Провел тест и вправду по производительности разницы нету и занимает одинаковое кол-во памяти ...
Вот тест ) (лучше не заглядовать))
Кликните здесь для просмотра всего текста
Java
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
package arraytests;
 
public class ArrayTest {
 
    public static void main(String[] args) {
        long startTime = 0, startMem = 0, endTime = 0, endMem = 0;
        startTime = System.currentTimeMillis();
        startMem = Runtime.getRuntime().freeMemory();
 
         int d [] = {
                 ,535353,6363636,4242424,6363636,3232,646464,3424242,424242,63232,4242424, И ЕЩЕ КУЧА ЧИСЕЛ};
         for(int i = 0; i < d.length;i++){
             int c = d[i];
         }
        
        
        endTime = System.currentTimeMillis();
        endMem = Runtime.getRuntime().freeMemory();
        StringBuffer buffer = new StringBuffer();
        buffer.append("Time: ");
        buffer.append((endTime - startTime));
        buffer.append(" Mem: ");
        buffer.append((startMem - endMem));
        System.out.println(buffer.toString());
    }
    
    //1 Time: 0 Mem: 22528  // {}
    //2 Time: 1 Mem: 22528 //new int[]{}
    
 
}


Добавлено через 8 минут
Цитата Сообщение от AckiyBolt Посмотреть сообщение
затем же зачем и стринги забавное сравнение стрингов по ==, или введение ключевого слова goto
А почему у стринги не могут сравниваться == ? Я знаю что нужно сравнивать equalse или по хешу
но вот в исходах Stringа .
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String) anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                            return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
а насчет goto я сам не знаю зачем он )
0
3 / 3 / 2
Регистрация: 04.01.2013
Сообщений: 73
19.06.2013, 20:59  [ТС]
А с моим вопросом кто нибудь поможет? Никак не разберусь почему Observer больше не наблюдает за моделью. И если той же JPanel ещё и MausListener назначаю, то он тоже после сериализации "слетает".
из предыдущего поста

если я в метод loadGame() вставляю
вот эти строки

Java
1
2
3
4
5
       remove(gfObj);//удаляем панель с фрейма
       gfObj = copy;
       add(gfObj);//добавляем панель на фрейм
       revalidate();//обновляем фрейм,
       repaint();

, то после вызова метода loadGame, цвет панели всё также меняется, но кнопки смены цвета перестают реагировать на новую панель. Т.е. выглядит так, как будто она больше не является Observer для класса GameInterface (который в свою очередь Observable конечно), хотя она и было зарегистрирована (строка 96: giObj.addObserver(gfObj)) у этого класса ещё до сериализации. В чём же тут дело?[/QUOTE]


Добавлено через 42 минуты
вот нашёл что-то похожее в сети. Решение здесь предлагается следующее "соорудить свои Observable implements Serializable; Observer и юзать их"
Задача у меня такая же, как у того ТС из ссылки: "Хотелось сделать прогу в соответствии с MVC, т.е. чтобы классы данных были Observable. А как раз эти классы и нужнаются в сериализации."
И что? Значит теперь отказываться от MVC? А что, если игра уже написана по принципу MVC и теперь нужно только реализовать/добавить в ней функции "save и load" использующие механизм сериализации? Всё заново переписывать? Должен же быть какой-то выход? То предлагаемое решение для меня вообще тёмный лес.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
20.06.2013, 03:13
Цитата Сообщение от St@nton Посмотреть сообщение
Должен же быть какой-то выход?
сериализация - неудобный и неправильный подход для сохранения состояния.
представьте себе 3 проперти в объекте и он сериализован,
вы обновляете игру на новую версию,
а там уже 4 проперти в нём же.
Ну и как вы представляете в таком случае десереализацию этого класса?
Должен быть отдельный класс инициализирующий все действующие объекты и запускающий игру на старт,
если обьектов нет инит дефолт значением.
Для этого понадобится хранить свои параметры в хешмапе ключ-значение и какнибудь пошифровав уже этот хешмап сериализовать. Тогда проблем с десериализацией не будет никогда.

Если же игру невозможно запустить с любой точки наполнив её параметрами - значит она неправильно спроектирована.
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
21.06.2013, 10:42
Цитата Сообщение от Care Посмотреть сообщение
А почему у стринги не могут сравниваться == ?
потому что объекты через == сравниваются по ссылке, а не по значению, а стринг это объект
0
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
21.06.2013, 10:50
Цитата Сообщение от AckiyBolt Посмотреть сообщение
потому что объекты через == сравниваются по ссылке, а не по значению, а стринг это объект
Я знаю.. но Стринг как бы синглтон и в самом equalse как не странно используеть именно оператор ==...

Добавлено через 1 минуту
ЗЫ а так конечно все Обертки и Объекты нуно сравнивать через метод эквивалентности...
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
21.06.2013, 10:59
Цитата Сообщение от Care Посмотреть сообщение
Я знаю.. но Стринг как бы синглтон
вы никому такое не говорите больше. ато будут смотреть на вас вот такими глазами: О_О

Цитата Сообщение от Care Посмотреть сообщение
в самом equalse как не странно используеть именно оператор ==...
ага. используется. для сравнения элементов массивов примитивного типа char
0
3 / 3 / 2
Регистрация: 04.01.2013
Сообщений: 73
23.06.2013, 02:37  [ТС]
Товарищи, моя борьба с сериализацией продолжается. С комментариями и благодарностями mutagen-у и AckiyBolt-у потом отпишусь. Сейчас у меня возникла следующая проблема. Я сериализую объекты в файл, потом десериализую их и использую, но если я пытаюсь десериализовать их снова, то возникает end of file exception. Skipy в какой-то из тем на форуме не двусмысленно намекнул, что указатель или маркер находится уже в конце файла, что и приводит к этому исключению. Правда не сказал как этого избежать. Вопрос - как установить маркер на интересующую меня позицию?
p.s. Использую FileInputStream . Где-то вычитал, что он не маркируемый.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
24.06.2013, 11:02
Цитата Сообщение от St@nton Посмотреть сообщение
Skipy в какой-то из тем на форуме не двусмысленно намекнул, что указатель или маркер находится уже в конце файла, что и приводит к этому исключению. Правда не сказал как этого избежать.
Мне казалось, что это очевидно. Надо читать не больше, чем писали.

Может, Вы все-таки приведете код, который пишет в файл, и код, который из него читает? Или мы должны на хрустальном шаре гадать, что Вы не так сделали?
0
3 / 3 / 2
Регистрация: 04.01.2013
Сообщений: 73
26.06.2013, 19:28  [ТС]
Skipy Я читал, но про установку маркера не нашёл. К тому же, если бы прочитанное было бы мною однозначно понято, то я бы и не стал здесь спрашивать. Просто надеюсь на опыт экспертов, которые на пальцах могут объяснить что к чему, когда задаю здесь вопрос теоретического характера.
Игру переписал. endoffile обработал. Теперь появляется ClassCastException.
метод undo() из контроллера (MVC)

Java
1
2
3
4
5
6
7
8
9
10
11
12
    private void undo(){
        Object copy = null;
        try {
            copy = saver.loadStep(); //saver - объект класса SaveLoadG
        } catch (ClassNotFoundException | IOException e) {
            JOptionPane.showMessageDialog(null,"ControllerG_undo", "ERROR in:", JOptionPane.ERROR_MESSAGE);
        }
        interFace.setGamerXpos(((ModelG) copy).getGamerXpos());//ругается здесь
        interFace.setGamerYpos(((ModelG) copy).getGamerYpos());
        interFace.setOldField (((ModelG) copy).getField());
 
    }//undo_END

часть кода из модели (MVC)

Java
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
public class ModelG extends Observable implements Serializable{
    
    transient String doIt;  
    transient String symbol;
    
    String[][] symbols;
    int gamerXpos;
    int gamerYpos;
 
/////////////////////////////////////////////////////////       
    protected int getGamerXpos(){
        return gamerXpos;
    }
    protected void setGamerXpos(int arg){
        gamerXpos = arg;
    }
/////////////////////////////////////////////////////////   
    protected int getGamerYpos(){
        return gamerYpos;
    }
    protected void setGamerYpos(int arg){
        gamerYpos = arg;
    }
/////////////////////////////////////////////////////////
    protected void setField(String[][] arg) {
        symbols = arg;
        doIt = "setField";
        setChanged();
        notifyObservers();
    }
    protected String[][] getField(){
        return symbols;
    }

класс сериализующий модель

Java
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
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
 
import javax.swing.JOptionPane;
 
public class SaveLoadG {    
 
    ByteArrayOutputStream baOutStep;
    ByteArrayInputStream  baInStep;
    FileOutputStream fOut;
    FileInputStream  fIn;
 
    ObjectOutputStream oOut, oOutStep;
    ObjectInputStream  oIn,  oInStep;
 
    File saves;
    
    SaveLoadG(){
        saves = new File("d:/TestSers/Sokoban/sokoban.ser");        
 
        try {
            fOut = new FileOutputStream(saves);
            oOut = new ObjectOutputStream(fOut);
            fIn = new FileInputStream(saves);
            oIn = new ObjectInputStream(fIn);
        ////////////////////////////////////////////////////////////////    
        ////////////////////////////////////////////////////////////////
//          baOutStep = new ByteArrayOutputStream();
//          oOutStep  = new ObjectOutputStream(baOutStep);          
//          baInStep = new ByteArrayInputStream(baOutStep.toByteArray());
//          oInStep = new ObjectInputStream(baInStep);          
        }
        catch (IOException e) {
            JOptionPane.showMessageDialog(null,"SaveLoadG_constructor", "ERROR in:", JOptionPane.ERROR_MESSAGE);
        }
    }//SaveLoadG_constructor_END
    
    public void saveStep(Object o) {
        try {
            baOutStep = new ByteArrayOutputStream();
            oOutStep  = new ObjectOutputStream(baOutStep);          
            oOutStep.writeObject(o);
        } catch (IOException e) {
            JOptionPane.showMessageDialog(null,"SaveLoadG_saveStep", "ERROR in:", JOptionPane.ERROR_MESSAGE);
        }
    }//end_saveStep
 
    public Object loadStep() throws ClassNotFoundException, IOException {
        Object copy = null;
        try {
            baInStep = new ByteArrayInputStream(baOutStep.toByteArray());
            oInStep  = new ObjectInputStream(baInStep);
            copy = oInStep.readObject();
        } catch (EOFException e) {
            JOptionPane.showMessageDialog(null,"Only one backwards step allowed !!", "Warning:", JOptionPane.ERROR_MESSAGE);
        } catch (ClassNotFoundException | IOException | NullPointerException e) {
            JOptionPane.showMessageDialog(null,"SaveLoadG_loadStep", "ERROR in:", JOptionPane.ERROR_MESSAGE);
        }       
        return copy;
    }//end_loadStep
 
}//SaveLoadG_class_END


Не пойму почему он ругается именно на getGamerXpos(). Ведь он возвращает int, а в исключении Ljava.lang.String; написано. Какой String он имеет в виду..

Добавлено через 2 часа 50 минут
Интересно то, что сначала метод undo() у меня выглядел
так

Java
1
2
3
4
5
6
7
8
9
10
    private void undo(){
        Object copy = null;
        try {
            copy = (ModelG) saver.loadStep();//(ModelG) 
        } catch (ClassNotFoundException | IOException e) {
            JOptionPane.showMessageDialog(null,"ControllerG_undo", "ERROR in:", JOptionPane.ERROR_MESSAGE);
        }
        interFace.setOldField ( ((ModelG) copy).getField() );
 
    }//undo_END

и десериализация получалась. Но игрок не двигался по полю. Стало понятно, что он не двигается потому, что игре не известны его координаты, которые я и добавил используя методы getGamerXpos getGamerYpos. И всё, больше никаких изменений не делал. Но теперь, даже возвращая всё к прежней записи, опять то же самое исключение. Может что-то с serialVersionUID не так? Я его сначала вообще не вписывал.
0
3 / 3 / 2
Регистрация: 04.01.2013
Сообщений: 73
05.07.2013, 00:44  [ТС]
Извиняюсь за панику на борту. На самом деле с сериализацией было всё нормально. Просто забыл одну строчку в коде исправить после копипаста, когда экспериментировал с сериализацией. Всем спасибо за помощь. Сообщения давшие мне важное понимание или приблизившие меня к цели пометил плюсиком)
Исходники выложил сюда
Тем, кто возьмётся просмотреть код, буду благодарен за комментарии, наставления, поправки, критику. Можно в личку.

Цитата Сообщение от mutagen Посмотреть сообщение
сериализация - неудобный и неправильный подход для сохранения состояния
Да, я уже где-то читал об этом. Но у нас было такое задание по курсовой. Для сохранения игры использовать сериализацию. Других методов мы пока не изучали. С хешмап познакомились только на прошлой неделе.

Цитата Сообщение от Skipy Посмотреть сообщение
Мне казалось, что это очевидно.
Не совсем. Я так и не разобрался, как управлять маркером. Может подскажете ссылку, где почитать можно?
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
05.07.2013, 11:07
Цитата Сообщение от St@nton Посмотреть сообщение
Да, я уже где-то читал об этом. Но у нас было такое задание по курсовой. Для сохранения игры использовать сериализацию. Других методов мы пока не изучали. С хешмап познакомились только на прошлой неделе.
Вот именно что состояние сохранять. То есть те данные, которые относятся к состоянию. JFrame относится к состоянию? Нет. А другие визуальные компоненты? Нет. Состояние у Вас по первому сообщению - цвет. То есть один int. Вот его и надо сохранять.

Не совсем. Я так и не разобрался, как управлять маркером. Может подскажете ссылку, где почитать можно?
Вы не можете управлять маркером. Вы можете делать только то, что я сказал - читать ровно столько данных, сколько пишете. И в том порядке, в котором пишете. И тогда всё будет в порядке.

Не по теме:

Я недавно тоже на эти грабли наступил - в методе записи пропустил одно поле, а при чтении его считал. Естественно, получил EOF. Удивился, полез в код, поправил - всё, EOF пропал.

0
3 / 3 / 2
Регистрация: 04.01.2013
Сообщений: 73
05.07.2013, 23:41  [ТС]
Цитата Сообщение от Skipy Посмотреть сообщение
читать ровно столько данных
Ах, Вы про чтение данных) Предыдущий Ваш пост я понял, как направление меня к чтению литературы, потому и сказал, что уже читал)
Больше комментировать нечего. Спасибо за ещё одно объяснение. Раз я всё-таки реализовал в игре функции сохранения и записи, значит я всё понял) Пойду подкорректирую код, чтобы можно было несколько шагов назад возвращать. Ещё раз всем спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.07.2013, 23:41
Помогаю со студенческими работами здесь

WCF. System.Data.SqlTypes.SqlString не сериализуется?
Здравствуйте! Пишу WCF-сервис. В сервисе накидал метод, который обращается к БД и при успехе возвращает DataTable. Без...

Переменная скрипта сериализуется в файл, но не десериализуется обратно
Почему переменная скрипта сериализуется в файл, но не десериализуется обратно? using System; using System.IO; using UnityEngine; ...

Serializable
Доброго времени суток. Есть теоретический вопрос. Возможно ли сохранить Объект из с++ в фаил, а потом прочитать его из java кода?

О Serializable
Суть вопроса вот в чем: Например у меня есть public class Example implements Serializable{ } и

Переданное значение не может быть помещено в ХранилищеЗначения, поскольку не сериализуется или содержит вложенный несериализуемый элемент
Столкнулся с проблемой. Есть процедура, которая выполняется на сервере: Процедура ПрДокументы() Экспорт //прием на работу Запрос...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru