cro-logo      
Добро пожаловать, Гость. Пожалуйста, выберите Вход или Регистрация

 
 
  ГлавнаяСправкаПоискВходРегистрация  
 
Переключение на Главную Страницу Страниц: 1
Послать Тему Печать
Как связать запись вх. банка с записью в основном? (Прочитано 1 201 раз)
Dmitiy_k
Начинающий пользователь
*
Вне Форума



Сообщений: 5
Как связать запись вх. банка с записью в основном?
15.11.2017 :: 20:51:21
 
Есть входная форма, есть ее системный номер (или Me.Record) и есть системный номер в основном банке  (результат по запросу в виде recordset).

Необходимо привязать к текущей записи входного банка найденную по запросу запись по ПО отсылке.
AddLink  не срабатывает.

примерно так:
local base1 = GetBank():GetBase("ЛЦ") виртуальный банк
local base2 =  CroApp.GetBank():GetBase("АД") банк основной

base1:AddLink (Me.Record.SN, 92, base2, 456, Base.LockWait, Base.LockWait)
Наверх
 
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 2 494
Санкт-Петербург
Re: Как связать запись вх. банка с записью в основном?
Ответ #1 - 15.11.2017 :: 23:44:23
 
Входной банк и основной это разные банки. Связать между собой записи в разных банках невозможно. Можно с помощью поиска на вводе указать на необходимость загрузки конкретной записи входного банка в существующую записью основного. Т.е. для Вашего случая необходимо создать в записи ЛЦ входного банка связанную запись с новой записью базы АД и в ней установить связку с существующей записью базы АД основного банка. При этом простые поля из записи основного банка копируются в новую запись базы АД входного и делается внутренняя связка, указывающая на необходимость слияния записей при загрузке. Это может быть только при отсутствии изменений простых полей, влияющих на процесс слияния.
Наверх
 
 
IP записан
 
Dmitiy_k
Начинающий пользователь
*
Вне Форума



Сообщений: 5
Re: Как связать запись вх. банка с записью в основном?
Ответ #2 - 16.11.2017 :: 16:34:32
 
Можно привести пример данного действия:

При этом простые поля из записи основного банка копируются в новую запись базы АД входного и делается внутренняя связка, указывающая на необходимость слияния записей при загрузке..

У меня форма открыта по базе ЛЦ, запись АД только привязывается и  не корректируется. (есть метод SetRecord, но он для записи формы)

Примерно так?

local base2 =  CroApp.GetBank():GetBase("АД") --банк основной
rec:GetRecord (456)             -- запись основного банка к которой надо привязаться или скопировать простые поля

local base =  GetBank():GetBase("АД") -создаем новую запись входного банка
local record = Record ( base2 )
...
???      --скопировать простые поля и сделать внутреннюю связку

base:AddRecord ( record )  --сохранить запись
base:AddLink (...)  -- Связать запись АД и ЛЦ
Наверх
 
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 2 494
Санкт-Петербург
Re: Как связать запись вх. банка с записью в основном?
Ответ #3 - 16.11.2017 :: 23:12:52
 
Получается, что каждая вводимая запись привязывается к одному адресу и оператор ввода этого даже не видит и не может влиять на этот процесс?
В режиме вложенной формы АД прекрасно производится поиск на вводе (Shift+F3) и привязка к записи основного банка. А SetRecord и LinkToRecord во входном банке у меня "отказались работать" для вложенной формы.
Наверх
 
 
IP записан
 
ChRain
Пользователь
**
Вне Форума


Я люблю этот Форум!

Сообщений: 27
Re: Как связать запись вх. банка с записью в основном?
Ответ #4 - 01.01.2019 :: 05:55:54
 
Поднимаю тему. Решение так и не найдено?
Наверх
 
 
IP записан
 
Dmitiy_k
Начинающий пользователь
*
Вне Форума



Сообщений: 5
Re: Как связать запись вх. банка с записью в основном?
Ответ #5 - 17.02.2019 :: 01:31:54
 
Пока нашел такое решение

В базе ЛЦ 2 кнопки «Поиск АД» (button5) и «Привязать выбранный» (button4) и список найденных адресов (listbox1)
Для привязки  используется подчиненная форма ввода
В банке должны быть прописаны правила слияния записей в базе «АД». (тип идентификации 3)
Так как вытянуть ссылку на конкретную запись не получается, то:
1 делаем во входном банке клон записи основного банка
2 вяжем его к новым записям «ЛЦ»
3 сохраняем в основной банк
4 происходит идентификация записей АД, (наша созданная запись должна быть полностью совпадать с такой же в основном, поэтому ее не редактируем)

Форма ЛЦ

function Spisok_redraw (recordSP) -- построение списка найденных записей
Me.listbox1:Clear()  -- очистить список
SysNomerАДUsed={}
if recordSP then
    for rec in recordSP.Records do               -- перебираем все записи набора
    index = Me.listbox1:Add(rec:GetValue(0).."_"..rec:GetValue(1).." "..rec:GetValue(2))
    SysNomerBBUsed[index]=rec:GetValue(0)
   end
end
end
----------------------------------------------------------------------
function button5_Click( control, event )                  --поиск АД источника
baseАД = CroApp.GetBank():GetBase("АД") -- получаем базу
recs = baseАД:Request() – запускаем простой поиск
Spisok_redraw (recs)  -- найденные записи в список
end
----------------------------------------------------------------------------
function listbox1_SelectedIndexChanged( control, index )      --предпросмотр АД источника
index=nil
if Me.listbox1.ItemsCount>0 then
index = Me.listbox1.SelectedIndex 
if index then
    CurentRec=recs:GetRecord (SysNomerАДUsed[index])
   Me.label2.Text=CurentRec:GetValue(2) – информационное поле АД
end
end
end
-----------------------------------------------------------------------------
function button4_Click( control, event )                  --привязать источник
if Me.listbox1.ItemsCount>0 then                              --если выделен источник
index=nil
index = Me.listbox1.SelectedIndex 
if index then
-- !!!!   связать запись реального банка с виртуальным  через еще 1 форму
     CurentRec=recs:GetRecord (SysNomerАДUsed[index])            --номер выбранного АД
     local args={}
     args.recBBUsed=SysNomerАДUsed[index]      --системный номер выбранной записи АД
     Me:OpenSubForm (6, "АД", 2, args)            --запуск формы АД для подвязки к ЛЦ
     Me:SaveRecord()                  --сохранить запись
     Me.Refresh()                  --обновить форму
end
Me:CloseForm ()
end
end
========================================
Форма  "АД" (6)   форма для привязки АД пустая без элементов
function Форма_Load( form )
Me:NewRecord ()
local SysNomRec=Arg.recАДUsed – получаем системный номер выбранной АД
local base = CroApp.GetBank():GetBase("АД")
local record = base:GetRecord ( SysNomRec )
Me:FillFromRecord ( record ) – копируем простые поля найденной записи во входной банк
--Me:SetRecord(rec,false,true)
_G.SysNomerUsedАД=Me.Record.SN –запоминаем системный номер созданной во входном банке записи АД для дальнейшей привязки во входном банке к другим базам
Me:CloseForm ()
end

Наверх
 
 
IP записан
 
Переключение на Главную Страницу Страниц: 1
Послать Тему Печать