Инфо-Предприятие - Форум
ПрограммыПоддержкаКупитьПартнерам

Вернуться   Инфо-Предприятие - Форум > Платформа разработки > Общий
Регистрация Обмен опытом Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.03.2026, 14:26
mkl_sis mkl_sis вне форума
Участник
 
Регистрация: 27.02.2012
Адрес: г. Серпухов
Сообщений: 107
По умолчанию Модификация данных сразу после добавления новой записи в журнал

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

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

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

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

Вопрос: может есть более элегантный способ решить данную задачу ?
Ответить с цитированием
  #2  
Старый 13.03.2026, 15:02
Писарев Петр Писарев Петр вне форума
Гуру
 
Регистрация: 22.01.2008
Адрес: Ростов-на-Дону
Сообщений: 11,342
По умолчанию

а нужен ли первичный ключ? может можно обойтись без него?
Ответить с цитированием
  #3  
Старый 13.03.2026, 16:24
mkl_sis mkl_sis вне форума
Участник
 
Регистрация: 27.02.2012
Адрес: г. Серпухов
Сообщений: 107
По умолчанию

Цитата:
Сообщение от Писарев Петр Посмотреть сообщение
а нужен ли первичный ключ? может можно обойтись без него?
Да как-то привык во всех журналах делать первичные ключи.
Ответить с цитированием
  #4  
Старый 13.03.2026, 16:30
Писарев Петр Писарев Петр вне форума
Гуру
 
Регистрация: 22.01.2008
Адрес: Ростов-на-Дону
Сообщений: 11,342
По умолчанию

Так первичным ключом можно сделать комбинацию полей, как в журнале с_клиенты_в_группе.
Ответить с цитированием
  #5  
Старый 13.03.2026, 20:45
Аватар для yrahak
yrahak yrahak вне форума
Завсегдатай
 
Регистрация: 14.01.2018
Адрес: Нальчик
Сообщений: 1,816
По умолчанию

Я так делал, через функции журнала. И созданием библиотеки с кодом типа

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

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

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

Но как сказал Петр - если есть возможность то луче по его совету.
Миниатюры
Нажмите на изображение для увеличения
Название: Screenshot_2.jpg
Просмотров: 16
Размер:	309.2 Кб
ID:	18652  Нажмите на изображение для увеличения
Название: Screenshot_2082.jpg
Просмотров: 15
Размер:	126.0 Кб
ID:	18653  
Ответить с цитированием
  #6  
Старый 16.03.2026, 11:50
mkl_sis mkl_sis вне форума
Участник
 
Регистрация: 27.02.2012
Адрес: г. Серпухов
Сообщений: 107
По умолчанию

Цитата:
Сообщение от Писарев Петр Посмотреть сообщение
Так первичным ключом можно сделать комбинацию полей, как в журнале с_клиенты_в_группе.
Мой новый журнал является справочником производителей, значения поля <идлинк> заносится в журнал с_товары, для отображения имени производителя. И этот журнал должен участвовать в обмене данных РБД. Должна быть возможность при обмене данными РБД менять значение поля <идлинк>. Поэтому это поле должно иметь уникальный индекс, но не первичный.
Ответить с цитированием
  #7  
Старый 16.03.2026, 13:41
Аватар для GriAlex
GriAlex GriAlex на форуме
Кен-ГурУ :-)
 
Регистрация: 28.01.2008
Адрес: Чувашия
Сообщений: 13,274
По умолчанию

Цитата:
Сообщение от mkl_sis Посмотреть сообщение
Мой новый журнал является справочником производителей, значения поля <идлинк> заносится в журнал с_товары, для отображения имени производителя. И этот журнал должен участвовать в обмене данных РБД. Должна быть возможность при обмене данными РБД менять значение поля <идлинк>. Поэтому это поле должно иметь уникальный индекс, но не первичный.
Могу ошибаться, но мне кажется, вы как-то неправильно подошли к полю <идлинк>.
У журнала с_производитель есть уникальное поле <ид>, первичный ключ.
У журнала с_товары есть поле <идлинк>, в котором прописана связка с_производитель.<ид> (именно в журнале с_товары). Ну и в этом же журнале с_товары есть лукап-поле <назв_производитель>, в котором отображается значение поля из журнала с_производитель.<название> по связке со значением в поле <идлинк> этого же журнала с_товары.

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

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


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

Вот простейшее решение для функций журнала с_товары:
Код:
ФУНКЦИЯ ПОСЛЕ ЖУРНАЛ(с_товары) ВидЖурналаТов(СТРОКА: Форма; ЛОГИКА: Диалог)
  ВИДИМОСТЬ(производитель_код, ДА)
  НАЗВАНИЕ(производитель_код, "Производитель код")
  НАЗВАНИЕ(производитель_название, "Производитель")
КОНЕЦ_ФУНКЦИИ
И то же самое в функции
Код:
ФУНКЦИЯ ПОСЛЕ ЖУРНАЛ(с_товары) Доступ   
  ВИДИМОСТЬ(производитель_код, ДА)
  НАЗВАНИЕ(производитель_код, "Производитель код")
  НАЗВАНИЕ(производитель_название, "Производитель")
КОНЕЦ_ФУНКЦИИ
По идее, вам больше ничего не надо. Контрагенты в журнале с_клиенты есть, если что, всякие недостающие поля ещё добавите. Правда, есть ещё атрибуты контрагентов - так, на всякий случай.
Ответить с цитированием
  #8  
Старый 17.03.2026, 13:32
mkl_sis mkl_sis вне форума
Участник
 
Регистрация: 27.02.2012
Адрес: г. Серпухов
Сообщений: 107
По умолчанию

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

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

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


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

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


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
После Добавления изменить поле Добавленной записи Писарев Петр Общий 4 23.10.2014 14:00


Часовой пояс GMT +4, время: 12:25.


vBulletin® Version 3.6.8.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot
© 1999 Новасофт