Модификация данных сразу после добавления новой записи в журнал

  • Автор темы Автор темы mkl_sis
  • Дата начала Дата начала

mkl_sis

Участник
Модификация данных сразу после добавления новой записи в журнал

Добрый день.
У меня в базе создан новый журнал с_производители.
В этом журнале есть поле <ид> с первичным ключом и поле <идлинк> с уникальным ключом.
Задача стоит в присвоении полю идлинк значения поля ид сразу же после создания новой записи журнала.
Я смог решить проблему написав код в обработчике <После записи> журнала:

///////////////////+++++++++++++++++++++ после добавления производителя
/////////////////+++++++++++++++++++++++ в поле идлинк записываем ид

линк = СВОЕ.ид
ЕСЛИ с_производитель.НАЙТИ(ид = линк) ТО
с_производитель.идлинк = линк
КОНЕЦ_ЕСЛИ
с_производитель.ЗАПИСАТЬ!!

////////////////*************************************************

Вопрос: может есть более элегантный способ решить данную задачу ?
 
Я так делал, через функции журнала. И созданием библиотеки с кодом типа

ФУНКЦИЯ ЖУРНАЛ(АйТиЧат) ПрисвоитьНовыйКод
ВЫБРАТЬ ЗНАЧЦ(АйТиЧат.номерок) макс ((АйТиЧат.номерок <> "") И
(ВСЕГО_СЛОВ(АйТиЧат.номерок,"0123456789") = 0), ДА {!!!}) СОРТИРОВАТЬ(макс:НЕТ)
номерок = СТР0(НЕ_ПУСТО(макс, 0) + 1, /*ДЛИНА_КОДА_СОТРУДНИКА*/7)
ОТЛАДКА(СТР(номерок))
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЖУРНАЛ(АйТиЧат) ЛОГИКА: ПередДиалогом(ЛОГИКА: новая_запись)
// Инициализируем данные перед вызовом диалога редактирования в журнале "АйТиЧат"
ЕСЛИ новая_запись ТО
ПрисвоитьНовыйКод()
КОНЕЦ_ЕСЛИ

// Разрешаем или запрещаем вызывать диалог редактирования
РЕЗУЛЬТАТ = ДА
КОНЕЦ_ФУНКЦИИ

Но как сказал Петр - если есть возможность то луче по его совету.
 

Вложения

  • Screenshot_2.jpg
    Screenshot_2.jpg
    309.2 KB · Просмотры: 18
  • Screenshot_2082.jpg
    Screenshot_2082.jpg
    126 KB · Просмотры: 16
Так первичным ключом можно сделать комбинацию полей, как в журнале с_клиенты_в_группе.

Мой новый журнал является справочником производителей, значения поля <идлинк> заносится в журнал с_товары, для отображения имени производителя. И этот журнал должен участвовать в обмене данных РБД. Должна быть возможность при обмене данными РБД менять значение поля <идлинк>. Поэтому это поле должно иметь уникальный индекс, но не первичный.
 
Мой новый журнал является справочником производителей, значения поля <идлинк> заносится в журнал с_товары, для отображения имени производителя. И этот журнал должен участвовать в обмене данных РБД. Должна быть возможность при обмене данными РБД менять значение поля <идлинк>. Поэтому это поле должно иметь уникальный индекс, но не первичный.

Могу ошибаться, но мне кажется, вы как-то неправильно подошли к полю <идлинк>.
У журнала с_производитель есть уникальное поле <ид>, первичный ключ.
У журнала с_товары есть поле <идлинк>, в котором прописана связка с_производитель.<ид> (именно в журнале с_товары). Ну и в этом же журнале с_товары есть лукап-поле <назв_производитель>, в котором отображается значение поля из журнала с_производитель.<название> по связке со значением в поле <идлинк> этого же журнала с_товары.

И не надо в журнале с_производитель добавлять ещё одно поле <идлинк>, равное полю <ид>.

Посмотрите стандартный журнал с_товары. Там же есть полный пример, как это устроено для стандартного поля алкопроизводитель. Сделайте по аналогии, просто вместо с_клиенты у вас будет с_производитель.


А ещё лучше, если у вас не алкоторговля, и вы хотите использовать РБД, то оставьте эти упомянутые мною выше стандартные поля по алкопроизводителю.
Вы, во-первых, можете с помощью модифицированных функций журнала с_товары открыть доступ к этим полям без включения алконастройки: ПОСЛЕ, ВМЕСТО - "ВидЖурналаТов", "Доступ", плюс использовать в коде метод НАЗВАНИЕ для переименования полей.
Во-вторых, скорее всего, вам не надо будет менять что-либо в функциях РБД (а иначе как вы передадите значения своих добавленных полей?). Будет стандартная передача данных. Но и в магазине и в центре должны быть одинаково модифицированные базы.

Вот простейшее решение для функций журнала с_товары:
Код:
ФУНКЦИЯ ПОСЛЕ ЖУРНАЛ(с_товары) ВидЖурналаТов(СТРОКА: Форма; ЛОГИКА: Диалог)
  ВИДИМОСТЬ(производитель_код, ДА)
  НАЗВАНИЕ(производитель_код, "Производитель код")
  НАЗВАНИЕ(производитель_название, "Производитель")
КОНЕЦ_ФУНКЦИИ
И то же самое в функции
Код:
ФУНКЦИЯ ПОСЛЕ ЖУРНАЛ(с_товары) Доступ   
  ВИДИМОСТЬ(производитель_код, ДА)
  НАЗВАНИЕ(производитель_код, "Производитель код")
  НАЗВАНИЕ(производитель_название, "Производитель")
КОНЕЦ_ФУНКЦИИ

По идее, вам больше ничего не надо. Контрагенты в журнале с_клиенты есть, если что, всякие недостающие поля ещё добавите. Правда, есть ещё атрибуты контрагентов - так, на всякий случай.
 
Могу ошибаться, но мне кажется, вы как-то неправильно подошли к полю <идлинк>.
У журнала с_производитель есть уникальное поле <ид>, первичный ключ.
У журнала с_товары есть поле <идлинк>, в котором прописана связка с_производитель.<ид> (именно в журнале с_товары). Ну и в этом же журнале с_товары есть лукап-поле <назв_производитель>, в котором отображается значение поля из журнала с_производитель.<название> по связке со значением в поле <идлинк> этого же журнала с_товары.

И не надо в журнале с_производитель добавлять ещё одно поле <идлинк>, равное полю <ид>.

Посмотрите стандартный журнал с_товары. Там же есть полный пример, как это устроено для стандартного поля алкопроизводитель. Сделайте по аналогии, просто вместо с_клиенты у вас будет с_производитель.


А ещё лучше, если у вас не алкоторговля, и вы хотите использовать РБД, то оставьте эти упомянутые мною выше стандартные поля по алкопроизводителю.
Вы, во-первых, можете с помощью модифицированных функций журнала с_товары открыть доступ к этим полям без включения алконастройки: ПОСЛЕ, ВМЕСТО - "ВидЖурналаТов", "Доступ", плюс использовать в коде метод НАЗВАНИЕ для переименования полей.
Во-вторых, скорее всего, вам не надо будет менять что-либо в функциях РБД (а иначе как вы передадите значения своих добавленных полей?). Будет стандартная передача данных. Но и в магазине и в центре должны быть одинаково модифицированные базы.

Вот простейшее решение для функций журнала с_товары:
Код:
ФУНКЦИЯ ПОСЛЕ ЖУРНАЛ(с_товары) ВидЖурналаТов(СТРОКА: Форма; ЛОГИКА: Диалог)
  ВИДИМОСТЬ(производитель_код, ДА)
  НАЗВАНИЕ(производитель_код, "Производитель код")
  НАЗВАНИЕ(производитель_название, "Производитель")
КОНЕЦ_ФУНКЦИИ
И то же самое в функции
Код:
ФУНКЦИЯ ПОСЛЕ ЖУРНАЛ(с_товары) Доступ   
  ВИДИМОСТЬ(производитель_код, ДА)
  НАЗВАНИЕ(производитель_код, "Производитель код")
  НАЗВАНИЕ(производитель_название, "Производитель")
КОНЕЦ_ФУНКЦИИ

По идее, вам больше ничего не надо. Контрагенты в журнале с_клиенты есть, если что, всякие недостающие поля ещё добавите. Правда, есть ещё атрибуты контрагентов - так, на всякий случай.

Спасибо за подсказку.
Использовать Алко производитель я не догадался. А создал новый журнал с_производитель. Так как в нашей базе Алко Производитель использует для связи с_клиенты.код. Так как на первых порах нам не требовалась РБД - то в с_производитель создал первичное поле ид, его использовал для связи с с_товары. А когда начали пробовать РБД, то из-за того, что при переносе в базу магазина в журнале с_производитель могли создаться записи не с тем значением поля ид, что в базе центрального склада - пошли ошибки. После создания в с_производитель поля идлинк и установления связи через него с журналом с_товары - все заработало.
Однако если бы я использовал Алко производитель - то в журнале с_клиенты смешались бы наши поставщики, покупатели и производители товаров, которыми мы торгуем.
 
Назад
Сверху