BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 20 май 2024, 22:46

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 73 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Вопрос разработчикам. RegisterTask().
СообщениеДобавлено: 22 янв 2009, 14:24 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
С неделю уже закопался в скрипты BGBilling... и восхищен документированностью API... в частности класса RegisterTask.
не соблаговолят ли уважаемые разработчики поделиться несколько более детальным описанием методов и свойств этого класса, а так же поделиться примером работы с ним.
совершенно неясно, например, как в новой задаче заполнить поля "город, квартал, улица, дом". предполагаю что с помощью метода setAddressParamID() или setAddressObjectId(). но в описании этим методам требуется в качестве параметра передать некое Interger. вопрос как это целое получить корректно? или я вообще не в туда смотрю. обьясните пожалуйста.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 янв 2009, 20:46 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
setAddressParamID() передается код адресного параметра из договора (id из таблицы contract_parameters_pref)

setAddressObjectId() аналогично если используется адрес из объекта в договоре


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 янв 2009, 06:01 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
А позвольте поинтересоваться, есть ли у вас в планах некоторое увеличение документированности API BGBS?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 янв 2009, 12:24 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
идем дальше. заполнить поля "город, квартал, улица, дом" в CRM задаче скриптом так и не получилось.
как не получается заполнить поле "исполнитель"...
код:
Код:
cpu = new ContractParamUtils ( con );
capv = cpu.getAddressParam(cid,ADDR);
rtm = new RegisterTaskManager(con);
...
...
...
query = "SELECT * FROM register_executor";
re = con.prepareStatement(query);
re = re.executeQuery();
while (re.next()) {
if (capv.getAddress().indexOf(re.getString(2)) != -1) {
lst.add(re.getInt(1));
}
nt.setExecutors(lst);


и дальше

Код:

...
...
nt.setContractID(cid);
nt.setTypeID(TYPE_ID);
rtm.updateTask("new", nt);



Подскажите, в каком месте я дурак. в ява программизме я неофит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 янв 2009, 13:25 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
skandinav писал(а):
идем дальше. заполнить поля "город, квартал, улица, дом" в CRM задаче скриптом так и не получилось.


заполнить их в задаче нельзя, в задаче можно только сделаеть ссылку на адрес в договоре или в объекте договора


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 янв 2009, 13:33 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
Код:
while (re.next()) {
if (capv.getAddress().indexOf(re.getString(2)) != -1) {
lst.add(re.getInt(1));
}
nt.setExecutors(lst);


у вас тут со скобками все в порядке? не вижу где while закрывается


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 янв 2009, 13:35 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
как это:
skn писал(а):
setAddressParamID() передается код адресного параметра из договора (id из таблицы contract_parameters_pref)

setAddressObjectId() аналогично если используется адрес из объекта в договоре


и это:

skn писал(а):
skandinav писал(а):
идем дальше. заполнить поля "город, квартал, улица, дом" в CRM задаче скриптом так и не получилось.


заполнить их в задаче нельзя, в задаче можно только сделаеть ссылку на адрес в договоре или в объекте договора


между собой согласуется?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 янв 2009, 13:37 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
skn писал(а):
Код:
while (re.next()) {
if (capv.getAddress().indexOf(re.getString(2)) != -1) {
lst.add(re.getInt(1));
}     }
nt.setExecutors(lst);


у вас тут со скобками все в порядке? не вижу где while закрывается


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 янв 2009, 13:40 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
skandinav писал(а):
А позвольте поинтересоваться, есть ли у вас в планах некоторое увеличение документированности API BGBS?


планы есть, времени нет пока.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26 янв 2009, 06:58 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
вероятно ответов не будет... :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26 янв 2009, 13:19 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
1) Есть договора
2) в договорах есть параметры в том числе и адрессные
3) адресные параметры храняться в таблице contract_param_type_2
4) первичный ключ в этой таблице cid (код договора) и pid (код параметра)
5) в задаче АДРЕСС не вводиться в делается ССЫЛКА на параметр в договоре
6) ССЫЛКА в задаче задается вот этими двумя параметрами setContractId() и setAddressParamID()


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26 янв 2009, 13:21 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
skandinav писал(а):
skn писал(а):
Код:
while (re.next()) {
if (capv.getAddress().indexOf(re.getString(2)) != -1) {
lst.add(re.getInt(1));
}     }
nt.setExecutors(lst);


у вас тут со скобками все в порядке? не вижу где while закрывается


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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26 янв 2009, 21:03 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
skn писал(а):
1) Есть договора
2) в договорах есть параметры в том числе и адрессные
3) адресные параметры храняться в таблице contract_param_type_2
4) первичный ключ в этой таблице cid (код договора) и pid (код параметра)
5) в задаче АДРЕСС не вводиться в делается ССЫЛКА на параметр в договоре
6) ССЫЛКА в задаче задается вот этими двумя параметрами setContractId() и setAddressParamID()


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

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

_________________
================================
ООО "Подряд" является зарегистрированным пользователем данного аддикта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26 янв 2009, 21:06 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
skn писал(а):
skandinav писал(а):
skn писал(а):
Код:
while (re.next()) {
if (capv.getAddress().indexOf(re.getString(2)) != -1) {
lst.add(re.getInt(1));
}     }
nt.setExecutors(lst);


у вас тут со скобками все в порядке? не вижу где while закрывается


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


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


код вырезан из середины. о чем уже было сказано. там после закрытия if() следует еще насколько строк. о чем опять же было сказано. пожалуйста, не нужно придираться к копипасту.

_________________
================================
ООО "Подряд" является зарегистрированным пользователем данного аддикта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26 янв 2009, 21:23 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
skandinav писал(а):
знаете... у нас есть возможность, вас, или кого то из вас, как разработчиков продукта, купленного нашей компанией, как уже ранее случалось, пустить к нам в билинг, с тем что бы на месте поправить скрипт так как надо...


Не проблема... если у вас есть договор на тех. поддержку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26 янв 2009, 21:25 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
skandinav писал(а):
код вырезан из середины. о чем уже было сказано. там после закрытия if() следует еще насколько строк. о чем опять же было сказано. пожалуйста, не нужно придираться к копипасту.


не очень понимаю смысл публикации кода, если он нарезан из десятка кусков слепленных вместе....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 янв 2009, 12:06 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
skn писал(а):
skandinav писал(а):
код вырезан из середины. о чем уже было сказано. там после закрытия if() следует еще насколько строк. о чем опять же было сказано. пожалуйста, не нужно придираться к копипасту.


не очень понимаю смысл публикации кода, если он нарезан из десятка кусков слепленных вместе....


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

итак скрипт:

Код:

import java.sql.*;
import java.util.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.util.*;
import bitel.billing.server.model.*;
import ru.bitel.bgbilling.plugins.crm.server.bean.*;
import ru.bitel.bgbilling.plugins.crm.server.dao.*;
import ru.bitel.bgbilling.plugins.crm.common.model.*;

int DATE_ZAKL_DOG = 25;
int ADDR = 7;
int FIO = 9;
int TYPE_ID = 5;
rtm = new RegisterTaskManager(con);

payment = event.getPayment();
cid = event.getContractID();
CM = new ContractManager ( con );
cpu = new ContractParamUtils ( con );
cont = cpu.getDateParam (cid , DATE_ZAKL_DOG );
contr = CM.getContractByID( cid );
capv = cpu.getAddressParam(cid,ADDR);
print ("CID: " + cid);
filter = new RegisterTaskManager.TaskFilter();
filter.cid = cid;
filter.orders = new ArrayList();

if ( cont == null ) {
   cpu.setDateParam ( cid, DATE_ZAKL_DOG, payment.getDate().getTime() );
   contr.setComment ( cpu.getStringParam ( cid, FIO ));
      query = "UPDATE contract SET comment=? WHERE id=?";
      psu = con.prepareStatement( query );
      psu.setString( 1, cpu.getStringParam ( cid, FIO ));
      psu.setInt( 2, cid );
      psu.executeUpdate();
      print ("Contract comment: " + contr.getComment());
      print ("Contract FIO: " + cpu.getStringParam(cid, FIO));
         if ( rtm.getTaskCount(filter) > 0 ) {
            prt = rtm.getTaskList(filter, new Page (0,0));
            prts = prt.size();
            print ("prt.size();" + prt.size()+"rtm.getTaskCount(filter)"+rtm.getTaskCount(filter));
            for (int i=0; i<prts;i++) {
            obj = prt.get(i);
            task = obj.getTask();
            print ( "Contract : "+obj.getContract() );
            print ( "comment :" + task.getComment() + " Status :" + task.getStatus());
            }
            
         } else {
            print (" no task count, making new task" );
            curtime = payment.getDate().getTime();
            nt = new RegisterTask();
            rtm.loadExecutorList(nt);
            lst = nt.getExecutors();
            lst.clear();
            query = "SELECT * FROM register_executor";
            re = con.prepareStatement(query);
            ResultSet re = re.executeQuery();
            while (re.next()) {
            if (capv.getAddress().indexOf(re.getString(2)) != -1) {
            print (re.getString(2) +" | "+ capv.getAddress() +" | "+ re.getInt(1));
            print(capv.getAddress().indexOf(re.getString(2)));
            lst.add(re.getInt(1));
            if (lst.isEmpty()) {
            print ("Empty");
            }else {
            for (int i=0; i<lst.size(); i++) {
            print (lst.get(i));
            }}
            nt.setExecutors(lst);
            break;
            }
            }
            ttt = nt.getExecutors();
            for (int i=0; i<ttt.size(); i++) {
            print ("ttt : "+ttt.get(i));
            }            
            nt.setAcceptUserID(payment.getUserID());
            nt.setCloseUserID(payment.getUserID());
            nt.setCreateUserID(payment.getUserID());
            nt.setLastmodTime(curtime);
            nt.setLastmodUserID(payment.getUserID());
            nt.setOpenTime(curtime);
            nt.setOpenUserID(payment.getUserID());
            nt.setProcessed(true);
            nt.setResolution("Новое подключение. Задача сгенерирована скриптом");
            nt.setTargetDate(curtime);
            nt.setAcceptTime(curtime);
            nt.setCloseTime(curtime);
            nt.setComment("Сделано скриптом");
            nt.setCreateTime(curtime);
            nt.setExecuteDate(curtime);
            nt.setStatus(2);
            nt.setContractID(cid);
            nt.setTypeID(TYPE_ID);
            rtm.updateTask("new", nt);
               }
} else {
      print ("this task can not be processed! date of contract confirmation is already set");
return;
      }


задача установить в списке исполнителей, исполнителя, присутствующего в строке адреса.
доп. задача, заполнить поля "город, квартал, улица, дом"

Изображение

_________________
================================
ООО "Подряд" является зарегистрированным пользователем данного аддикта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 янв 2009, 13:00 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
1) если есть договор на тех. поддержку пишите в хелпдеск.
2) скрипт есть - хорошо, что нужно сделать - тоже, а в чем проблема?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 янв 2009, 17:44 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
skn писал(а):
1) если есть договор на тех. поддержку пишите в хелпдеск.
2) скрипт есть - хорошо, что нужно сделать - тоже, а в чем проблема?


проблема в крайне отвратительной документированности API BGBS.

вам не составляет труда язвить на форуме, а на внятный ответ сил и времени уже не хватает. может быть вы как то перераспределите ресурсы?

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

_________________
================================
ООО "Подряд" является зарегистрированным пользователем данного аддикта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 янв 2009, 18:09 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
Хорошо, Вы пишете полунамеками, я должен читать между строк, догадываться, что вы хотите, тратить на это время. Хотите получить ответ, пожалуйста.

Код:
nt.setAddressParamID(ADDR);


Код:
rtm.updateExecutorList(nt, "коды исполнителей через запятую");


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 янв 2009, 18:53 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
воот. хотя бы так.

_________________
================================
ООО "Подряд" является зарегистрированным пользователем данного аддикта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 янв 2009, 18:56 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
skn писал(а):

Код:
rtm.updateExecutorList(nt, "коды исполнителей через запятую");


ни где не документировано ""коды исполнителей через запятую""


P.S. в тему

_________________
================================
ООО "Подряд" является зарегистрированным пользователем данного аддикта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 28 янв 2009, 07:45 
Не в сети
Клиент

Зарегистрирован: 12 фев 2007, 18:49
Сообщения: 335
Карма: 15
не в тему
Цитата:
ООО "Подряд" является зарегистрированным пользователем данного аддикта.

они и сюда добрались :shock:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 28 янв 2009, 14:19 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
skandinav
Если всё документировать (да ещё и вычитывать потом документацию) - то получится больше и дольше, чем написание самой программы. А кто, собственно, тогда сам код будет писать? Это не оправдание, конечно, и кто же спорит, документированность - это хорошо, и всё делается для повышения её качества, по возможности, конечно (придётся поверить на слово).
Кто-то справляется и с существующей документацией, а если у Вас возникли проблемы - уже сказали - обращайтесь в техподдержку (helpdesk).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 28 янв 2009, 14:53 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
skn писал(а):

Код:
rtm.updateExecutorList(nt, "коды исполнителей через запятую");


кстати, мегазачетный подход к программированию... в одном месте список исполнителей передается как массив целых чисел, и тут же рядом для подобной цели необходимо через-задний-проход-в-ухо сформировать строку из целых чисел... создается впечатление, что разработчики представления не имеют о системах автоматизации разработки, контроля версий, документирования... и процесс разработки прет по принципу "-как бох на душу положит, без оглядки на соседей"...

_________________
================================
ООО "Подряд" является зарегистрированным пользователем данного аддикта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 28 янв 2009, 15:00 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
Могу вас порадовать, алгоритм работы этого метода еще круче....

Код:
rtm.updateExecutorList(nt, "коды исполнителей через запятую");


в текстовой строке передается список исполнителей которых надо удалить, а список новых исполнителей передается через nt.setExecuters(List<Integer>)

так что для ваших целей можете использовать

Код:
rtm.updateExecutorList(nt, "");


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 28 янв 2009, 15:06 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
dimOn писал(а):
skandinav
Если всё документировать (да ещё и вычитывать потом документацию) - то получится больше и дольше, чем написание самой программы. А кто, собственно, тогда сам код будет писать? Это не оправдание, конечно, и кто же спорит, документированность - это хорошо, и всё делается для повышения её качества, по возможности, конечно (придётся поверить на слово).
Кто-то справляется и с существующей документацией, а если у Вас возникли проблемы - уже сказали - обращайтесь в техподдержку (helpdesk).


проблемы только от надменности некоторых товарищей. за почти два десятилетия работы в IT индустрии я привык идти путем "документация -> форумы (фидошное время эхи соотв направления) -> поисковик -> вопросы". данный тред создан уже после того, как все возможные пути были исчерпаны.
а по поводу документации... давно уже не считается хорошим тоном после написания функции/объекта набросать пару строк о том, что именно он делает, какие параметры принимает, и как взаимодействует с другими объектами. не смотря на то, что разработана неимоверная куча разного уровня удобства RADов... что есть печально...

_________________
================================
ООО "Подряд" является зарегистрированным пользователем данного аддикта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 28 янв 2009, 15:13 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
skn писал(а):
Могу вас порадовать, алгоритм работы этого метода еще круче....

Код:
rtm.updateExecutorList(nt, "коды исполнителей через запятую");


в текстовой строке передается список исполнителей которых надо удалить, а список новых исполнителей передается через nt.setExecuters(List<Integer>)

так что для ваших целей можете использовать

Код:
rtm.updateExecutorList(nt, "");


Ну конечно! Это же очевидно!

_________________
================================
ООО "Подряд" является зарегистрированным пользователем данного аддикта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 28 янв 2009, 15:29 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
Насчет документации спорить не буду... это отдельный вопрос (чужие недочеты всегда виднее своих...)
А Вам бы посоветовал на будущее ПРАВИЛЬНО формулировать вопросы, если хотите получить БЫСТРЫЙ и ТОЧНЫЙ ответ.

1) Подробно расписать, что хотите сделать и для чего
2) Что и как делали и привести код, логи и т.п.
3) Какие проблемы возникли

Посмотри сколько сообщений в этой теме, вот на такие вещи время и уходит.... :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 28 янв 2009, 15:51 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
skandinav писал(а):
проблемы только от надменности некоторых товарищей. за почти два десятилетия работы в IT индустрии я привык идти путем "документация -> форумы (фидошное время эхи соотв направления) -> поисковик -> вопросы". данный тред создан уже после того, как все возможные пути были исчерпаны.
а по поводу документации... давно уже не считается хорошим тоном после написания функции/объекта набросать пару строк о том, что именно он делает, какие параметры принимает, и как взаимодействует с другими объектами. не смотря на то, что разработана неимоверная куча разного уровня удобства RADов... что есть печально...
Ну, хорошо, Вы уже почти убедили меня, что я (в том числе) живу за печкой, и ни о каких таких системах-контроля-версий знать не знаю, итд; но Вы поймите, что форум - это не техподдержка, это всё добровольное.
А по поводу неправильной разработки - ну тут сказать нечего. Всегда находятся люди которые работают на чём-то и всем довольны (хотя всеми аспектами чего-либо быть довольным в этой области нельзя, Вы это как человек с двумя десятилетиями в IT-индустрии должны прекрасно понимать) или недовольства свои решают доступными средствами. И с другой стороны, я покажу кучу людей, которые расскажут Вам, что Микрософт неправильно всё разрабатывает, не так документирует и вообще там все ламеры.
Это всё склоки и благоприятная почва для холиваров, не более.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 73 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.078s | 80 Queries | GZIP : On ]