Информация

Последние записи

Теги


Блоги


Записи из всех блогов с тегом: 1с


Как жить без метаданных

Вопрос, как пользователи ExtJS, Qooxdoo, YUI и прочих уважаемых фреймворков, обходятся без метаданных, встал передо мной года четыре назад, когда я впервые попытался реализовать на javascript нетривиальную задачу. Вопрос можно расширить за пределы веб-технологий, ведь метаданных, в их "1С-ном" понимании нет и в известных библиотеках для Java или C#. При этом разработчики как то умудряются выпускать приложения за приемлемое для заказчиков время и обеспечивать пригодное для эксплуатации качество.

Идеи метаданных стары как мир, термин "meta" относят к временам древней Греции. Он означал список рукописных свитков на библиотечной полке.

читать дальше...
автор: Евгений Маляров добавлено: 31 окт 15 просмотры: 2357, комментарии: 0



Создание панели кнопок списка MDI окон, как в 1С

Создание и показ кнопки на панели. Этот код вызывается при создании каждой дочерней формы
procedure TfmMain.CreateFormButton(form1:TForm);
var
  ABar : TdxBar;
  NewButton : TdxBarButton;
  NewItemLink : TdxBarItemLink;
begin
   inc(iButtonsCount);
   ABar := Bar1;
   NewButton := TdxBarButton.Create(self);
   NewItemLink := ABar.ItemLinks.Add;
   NewItemLink.Item := NewButton;
   NewItemLink.Item.Tag := form1.Handle;
   NewButton.Tag          := form1.Handle;
   NewButton.Name         := 'dxButton'+IntToStr(NewButton.Tag);
   NewButton.Caption      := form1.Caption + '[' + IntToStr(iButtonsCount) + ']';
   NewButton.Hint         := form1.Caption;
   NewButton.OnClick      := dxBarButtonClick;
   NewButton.ButtonStyle  := bsChecked;
   NewButton.Down         := true;
   NewButton.PaintStyle   := psCaptionGlyph;
   NewButton.GroupIndex   := 1;
   NewButton.Glyph.Width  := 16;//GetSystemMetrics(SM_CXSMICON);
   NewButton.Glyph.Height := 16;//GetSystemMetrics(SM_CYSMICON);
   NewButton.Glyph.Canvas.Draw(0,0,form1.Icon);
   ABar.Control.RepaintBar;
end;


//пример использования
procedure TfmArrival.FormCreate(Sender: TObject);
begin
  fmMain.CreateFormButton(self);
end;

//т.е. на каждую форму вешаем код создания кнопки ( fmMain.CreateFormButton(self))




Код удаления кнопки с панели при закрытии формы
procedure TfmMain.DeleteFormButton(form1:TForm);
Var
 i:integer;
begin
  for I := 0 to Bar1.ItemLinks.Count - 1 do
    if Bar1.ItemLinks[i].Item is TdxBarButton then
      if TdxBarButton(Bar1.ItemLinks[i].Item).Tag = form1.Handle then begin
        Bar1.ItemLinks[i].Item.Free;
        Break;
      end;
end;

//Пример использования (код цепляем на событие закрытия каждой дочерней формы)
procedure TfmArrival.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  fmMain.DeleteFormButton(self);
  Action    := caFree;
  fmArrival := nil;
end;



Код подсвечивания кнопки активного окна, тоже цепляем на событие активации каждой дочерней формы
procedure TfmMain.SetDownFormButton(form1:TForm);
Var
 i:integer;
begin
  for I := 0 to Bar1.ItemLinks.Count - 1 do
    if Bar1.ItemLinks[i].Item is TdxBarButton then
      if TdxBarButton(Bar1.ItemLinks[i].Item).Tag = form1.Handle then begin
        TdxBarButton(Bar1.ItemLinks[i].Item).Down := false;
      end;
  for I := 0 to Bar1.ItemLinks.Count - 1 do
    if Bar1.ItemLinks[i].Item is TdxBarButton then
      if TdxBarButton(Bar1.ItemLinks[i].Item).Tag = form1.Handle then begin
        TdxBarButton(Bar1.ItemLinks[i].Item).Down := true;
        break;
      end;
end;


//Пример использования
procedure TfmArrival.FormActivate(Sender: TObject);
begin
  fmMain.SetDownFormButton(self);
end;



В секции private главной формы
private
    { Private declarations }
    iButtonsCount:integer;
    procedure dxBarButtonClick(Sender: TObject);



Код который будет выполняться при нажатии на кнопку на панели
procedure TfmMain.dxBarButtonClick(Sender: TObject);
var
  lWinControl: TWinControl;
begin
  lWinControl := FindControl((sender as TdxBarButton).Tag);
  if Assigned(lWinControl) and (lWinControl is TForm) then
    TForm(lWinControl).BringToFront;
end;



При создании главной формы
procedure TfmMain.FormCreate(Sender: TObject);
begin
  iButtonsCount := 0;
end;
автор: X11 добавлено: 16 июл 12 просмотры: 3386, комментарии: 2



Кустарный sleep в 1С:Предприятие 8.2

Блог: vr-online
Сегодня нам с Lord’ом потребовалось установить в одной из обработок задержку в 5 секунд. Я привык, что во многих языках имеется функция типа sleep, позволяющая выполнять задержку на нужное количество миллисекунд. Например, в unix-like системах даже есть отдельная одноименная утилита, которую частенько используют для установки задержек при исполнении сценариев командной строки.
читать дальше...
автор: Игорь Антонов добавлено: 15 июн 11 просмотры: 4108, комментарии: 3



Совмещаем 1С 8.2 и MS Word

Блог: vr-online
Одна из ключевых функций нашей программы - генерирование печатных форм различных законодательных документов (протоколы, извещения и т.д.). С технической стороны вроде все просто - создаешь стандартный макет типа табличный документ и приступаешь к его верстке. Мы потратили время и быстренько накидали все печатные формы. Получилось неплохо, но потом заказчик потребовал переделать оформление, и мы сели в лужу. Проблема заключалась в невозможности применять стили форматирования к определенным словам, находящимся внутри одной ячейки. Да, можно применить стиль к целой ячейке, но нам такой способ не подошел, т.к. в одной ячейке может находиться несколько слов, а как-то особенно выделять требовалось лишь одно из них.
читать дальше...
автор: Игорь Антонов добавлено: 15 июн 11 просмотры: 3009, комментарии: 0