Бетке Сергей

4
Рейтинг

sergey.s.betke@yandex.ru
Сергей Бетке



  •   Регистрация: 08.10.2015 (8 лет назад)

  •   Был(а) на сайте: 05.04.2024

Подписчики 1

Рейтинг 4


Комментарии

ГосбюджетОбмен с Росимуществом через интеграционную шину#4 25.02.24 19:30
Коллеги, добрый день. А как получали логин и пароль для этого обмена (для доступа к интеграционной шине)? С сайта Росимущества все инструкции исчезли, ссылки в ИТС ведут в пустоту...
БУРаздельный учет по гособоронзаказу (ГОЗ) - Подсистема для 1С:Бухгалтерии 3.0 ПРОФ и КОРП#78 07.02.22 19:22
Коллеги, добрый день!

А нет ли подобного решения для БГУ 2.0?
DevАналог ВыполнитьОбработкуОповещения для ИмяПроцедурыОбработкиОшибки#8 27.02.18 16:53
Пришла дурная мысль в голову: вызывать в ВебКлиенте обработчик оповещения об ошибке через вызов существующих асинхронных методов платформы (например - НачатьУстановкуТолькоЧтение) с заранее ошибочными параметрами, передав необходимое ОписаниеОповещение. Так мы получим вызов обработчика ошибки, указанного в ОписанииОповещения, но параметр СведенияОбОшибке будет в корне неверным. Совершенно неинформативным.

Смириться с этим? Коллеги, возможно у кого-нибудь есть доступ к телу разработчиков платформы. Один вопрос: есть ли на самом деле процедура (пусть и недокументированная), вызывающая обработчик ошибки из ОписанияОповещения? Или может - планируется? Ну ведь не хватает явно!
DevАналог ВыполнитьОбработкуОповещения для ИмяПроцедурыОбработкиОшибки#7 27.02.18 16:48
Ещё одна обёртка (VJ), которая используется в этом коде, и пример её использования (в НачатьУстановкуТолькоЧтения):

Код
function VJ(b,c){
  b.after(function(){
    G.ra.isEqual( c ) || c.Xd()
  })._catch(function(b){
    G.ra.isEqual( c ) ? B.ci.handleError(b) : c.Ye(b)
  });
  ki.a(b,c)
}


Код
{name:"BeginSettingReadOnly",
  ba:"НачатьУстановкуТолькоЧтения",
  wa:function(b,c){
    var d=b=G.Eb(b,fH,!0,0),
      e=G.wb( c );
    VJ(this.a.setReadOnly(e).forceAsync(), d)
  }
}


Но сопоставленных им процедур 1С не видно...
DevАналог ВыполнитьОбработкуОповещения для ИмяПроцедурыОбработкиОшибки#6 27.02.18 15:06
(5)Ан нет... Дальнейшее изучение javascript дало следующее. Ниже - собственно класс ОписаниеОповещения:

Код
fH.prototype.Fb(
  {name:"ProcedureName",
    ba:"ИмяПроцедуры",
    _get:function(){
      return new J(this.aa[XJ])
    }
  },
  {name:"Module",
    ba:"Модуль",
    _get:function(){
      return this.a[XJ]
    }
  },
  {name:"ErrorHandlerProcedureName",
    ba:"ИмяПроцедурыОбработкиОшибки",
    _get:function(){
      var b=this.aa[YJ];
      return ""!==b? new J(b) : G.ra
    }
  },
  {name:"ErrorHandlerModule",
    ba:"МодульОбработкиОшибки",
    _get:function(){
      var b=this.a[YJ];
      return null!==b? b : G.ra
    }
  },
  {name:"AdditionalParameters",
    ba:"ДополнительныеПараметры",
    _get:function(){
      return this.j
    }
  }
);
  
k=fH.prototype;

k.Hda=function(b,c,d){
  var e=this.a[b],
    f=this.aa[b],
    g=[];
  for(h=2; h<arguments.length; h++) g.push(arguments[h]);
  g.push(this.j);
  ZJ(function(){
    c? e.nba(f,g) : e.yJ(f,g)
  })
};

k.Xd=function(b){
  var c=[XJ,!1];
  c.push.apply(c,arguments);
  this.Hda.apply(this,c)
};

k.Em=function(b){
  var c=[XJ,!0];
  c.push.apply(c,arguments);
  this.Hda.apply(this,c)
};

k.Ye=function(b){
  if(null!==this.a[YJ]){
    var c=new il(!0);
    this.Hda(YJ,!0,Q.T2(b),c);
    c.yb() && B.ci.handleError(b)
  } else B.ci.handleError(b)
};

k.Xi=function(){
  if(!this.$){
    this.$=!0;
    this.a[XJ].Xi();
    null!==this.a[YJ] && this.a[YJ].Xi();
    var b=this.j;
    b && b.Xi && this.j.Xi();
    this.$=!1
  }
};


По сути, нас интересует метод объекта:

Код
k.Ye=function(b){
  if (null!==this.a[YJ]) {           // Если Неопределено <> ОписаниеОповещения.МодульОбработкиОшибки Тогда
    var c=new il(!0);                //   СтандартнаяОбработка = Истина 
    this.Hda(YJ,!0,Q.T2(b),c);       //   вызываем обработчик ошибки
    c.yb() && B.ci.handleError(b)    //   Если СтандартнаяОбработка Тогда ОбработатьОшибкуПоУмолчанию КонецЕсли
  } else B.ci.handleError(b)         // Иначе ОбработатьОшибкуПоУмолчанию КонецЕсли
};


Это прямо метод объекта в javascript. Предположу, что и у ОписанияОповещения в 1С может быть недокументированный метод для вызова обработки ошибки...

И обёртки типа

Код
function $Ka(b,c,d,e,f){
  c=G.Eb(c,fH,!1,0);
  d=G.toString(d);
  e=G.toString(e);
  f=G.bb(f);
  d=b.a.init(d,e,f,fK())
    .forceAsync();
  d.after(b,function(){
    c.Xd(this)
  })._catch(function(b){
    c.Ye(b)
  });
  ki.a(d,c)
}


видны для расширений (шифрование, работа с файлами и т.д.). Всё-таки, какой же код в 1С будет транслирован в c.Ye(b)?
ВКПошаговое создание внешней компоненты для 1С:Предприятия за 10 минут (на MS Visual Studio 2010)#41 27.02.18 13:55
(40)Вопрос снимаю, уже прочитал. Спасибо за ссылку.
ВКПошаговое создание внешней компоненты для 1С:Предприятия за 10 минут (на MS Visual Studio 2010)#40 27.02.18 13:54
(39) Спасибо. Я правильно понимаю, что ВК на NativeAPI будет работать в Linux и без Wine?
DevАналог ВыполнитьОбработкуОповещения для ИмяПроцедурыОбработкиОшибки#5 27.02.18 12:47
В попытках найти недокументированную процедуру платформы глобального контекста... Файл mngsrv_root.res. Находим в нём javascript код ряда клиентских функций:

Код
R.BeginInstallCryptoExtension=function(b){
  b=G.Eb(b,fH,!0,0);
  var c=DIa()
    .forceAsync()
    .after(function(b){
      return b ? Bj(p.IDS_EXT_CMPNT_ALREADY_INSTALLED,[Ej],void 0,void 0,void 0,!0) : tLa()
    })
    ._catch(function(b){
      B.ci.handleError(b);
      return b
    });
  c.after(function(){
    G.ra.isEqual(b)||b.Em()
  });
  ki.a(c,b)
};

R.ExecuteNotifyProcessing=function(b,c){
  if (!G.ra.isEqual(b)){
    var d=G.Eb(G.va(b),fH,!1,0);
    void 0===c&&(c=G.ra);
    d.Xd(c)
  }
};


Хорошо виден кусок кода в асинхронной функции глобального контекста, которая умеет вызывать в случае исключения ИмяПроцедурыОбработкиОшибки:

Код
    ._catch(function(b){
      B.ci.handleError(b);
      return b
    });


Собственно, вопрос в том, существует ли клиентская функция глобального контекста, трансформируемая в handleError в ВебКлиенте...
ВКПошаговое создание внешней компоненты для 1С:Предприятия за 10 минут (на MS Visual Studio 2010)#38 26.02.18 19:28
Коллеги, добрый день.
Возник вопрос создания кроссплатформенной ВК для 1С 8.3. Речь об OpenOffice, взаимодействие через UNO, а не через COM. Существует компилируемый под Linux шаблон ВК?
DevАналог ВыполнитьОбработкуОповещения для ИмяПроцедурыОбработкиОшибки#4 24.02.18 22:06
(3)
Речь о 1С:Документооборот КОРП, автозаполнение шаблонов файлов данными документа. В конфигурации код подсистемы построен на прямой записи в xml файлы, что применимо для docx и odt файлов. Но не для doc. И не для других типов.

В результате - подготовили расширение конфигурации, производящее автозаполнение через COM объекты.

Проблема, собственно, в том, что в 1С:ДО предусмотрено автозаполнение и на клиенте, и на сервере (опционально). Автозаполнение на сервере переписали, проблем нет. Переписали на ДлительныеОперации. Но код в 1С:ДО для клиента был СИНХРОННЫМ! Естественно, на работу в ВебКлиенте он вообще не рассчитан. Но потребность есть.

В связи с этим подготовлен код и для исполнения автозаполнения на клиенте. В тонком клиенте он работает. Но, учитывая, что работаем с COM объектом, необходима обработка исключений.

Как-то так:

Код
Процедура ОбработчикВыполненияАлгоритмаЧерезОповещение(
   ПредыдущийРезультат = Неопределено,
   ДополнительныеПараметры) Экспорт
   
   Попытка
      //опасные код
   Исключение
      АсинхронныеОперацииКлиентИТГ.ОбработатьИсключениеВОбработчикеОповещения(ИнформацияОбОшибке(),, ДополнительныеПараметры);
   КонецПопытки;
   
КонецПроцедуры

Процедура ОбработатьИсключениеВОбработчикеОповещения(Знач ИнформацияОбОшибке, СтандартнаяОбработка = Истина, ДополнительныеПараметры = Неопределено) Экспорт
   
   Если СтандартнаяОбработка Тогда
   
      ПеременныеПоследовательностиОповещений = ОбновитьИВернутьПеременныеОбработчикаОповещения(ИнформацияОбОшибке, ДополнительныеПараметры, "ИнформацияОбОшибке");
      ПодготовленныйОбработчикОшибки = АсинхронныеОперацииСлужебныйКлиентИТГ.ПодготовитьОписаниеОповещенияДляОбработкиРезультата(ДополнительныеПараметры);
      
      Если ПодготовленныйОбработчикОшибки <> Неопределено Тогда
         
         Попытка
            ВыполнитьОбработкуОповещенияОбОшибке(ПодготовленныйОбработчикОшибки, ИнформацияОбОшибке, СтандартнаяОбработка);
            Если СтандартнаяОбработка Тогда
               ОбработатьИсключениеВОбработчикеОповещения(ИнформацияОбОшибке, СтандартнаяОбработка, ПодготовленныйОбработчикОшибки.ДополнительныеПараметры);
            КонецЕсли;
         Исключение
            ОбработатьИсключениеВОбработчикеОповещения(ИнформацияОбОшибке(), СтандартнаяОбработка, ПодготовленныйОбработчикОшибки.ДополнительныеПараметры);
         КонецПопытки;
         
      Иначе
         АсинхронныеОперацииСлужебныйКлиентПереопределяемыйИТГ.СтандартныйОбработчикОповещенияОбОшибке(ИнформацияОбОшибке, СтандартнаяОбработка, ДополнительныеПараметры);
      КонецЕсли;
      
   КонецЕсли;
   
КонецПроцедуры

Процедура ВыполнитьОбработкуОповещенияОбОшибке(Знач ОбработчикОшибки, Знач ИнформацияОбОшибке, СтандартнаяОбработка) Экспорт
   
   Если ОбработчикОшибки.ИмяПроцедурыОбработкиОшибки <> "" Тогда
      
      Выражение =
         ?(ОбработчикОшибки.МодульОбработкиОшибки <> Неопределено, "ОбработчикОшибки.МодульОбработкиОшибки.", "")
         + ОбработчикОшибки.ИмяПроцедурыОбработкиОшибки +
         "(ИнформацияОбОшибке, СтандартнаяОбработка, ОбработчикОшибки.ДополнительныеПараметры)";
      
      Выполнить(Выражение);
      
   КонецЕсли;
   
КонецПроцедуры


Итого, смысл в том, что иметь возможность писать код с использованием
Код
ИмяПроцедурыОбработкиОшибки 
уже сейчас, с расчётом на то, что работа с COM объектом в дальнейшем может быть переписана на работу с внешней компонентой (есть желание нарисовать внешнюю компоненту для работы с Open Office через UNO в целях обеспечения кроссплатформенности). А при работа с расширениями и внешними компонентами платформа уже сейчас использует
Код
ИмяПроцедурыОбработкиОшибки
.

Указанный выше код позволяет указывать обработчик ошибки через
Код
ИмяПроцедурыОбработкиОшибки
, но вызов его осуществляется через
Код
Выполнить
, что не будет работать на ВебКлиенте, ради которого асинхронность и пытаемся реализовать.