Как программно записать и закрыть открытый элемент справочника??
По теме из базы знаний
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1) прог, Вопрос не совсем понятный - элемент справочника открыт? тогда зачем программно - можно просто ОК нажать. Ну а если из модуля формы надо программно то Создать объект этот го справочника, найти нужный элемент, закрыть форму сделать необходимые изменения с объектом и его записать, если надо - то опять открыть форму. Конткретней - что нужно то?
(Записать(), Закрыть()- не работает в этом случае)
Задача следующая:
нужно при редактировании элементов справочника1 автоматически внести изменения не в реквизит справочника2, а в список формы справочника2.
1.Поэтому я программно открываю элемент справочника2, вношу изменения, и надо программно сохранить и закрыть, как?
либо можно сделать способом 2.
2.Программно внести изменения в список формы элемента справочника2. Как??
Спасибо за ответы.
Задача следующая:
нужно при редактировании элементов справочника1 автоматически внести изменения не в реквизит справочника2, а в список формы справочника2.
1.Поэтому я программно открываю элемент справочника2, вношу изменения, и надо программно сохранить и закрыть, как?
либо можно сделать способом 2.
2.Программно внести изменения в список формы элемента справочника2. Как??
Спасибо за ответы.
(4) прог, Опять вопрос по терминам - "список формы справочника2" - что имеется ввиду? У справочника есть реквизиты - в них хранятся данные. Есть формы списка и, если задано в конфигураторе, форма элемента справочника. Форма служат для отображения реквизитов. Про какие изменения списка формы идёт речь?
(7) прог, Сформулируйте задачу конкретнее. Все формы справочников отображают их реквизиты и служат для добавления, изменения, удаления данных. Добавление в форму списка элементов (непонятно каких, ведь "Речь идет не об элементе справочника и не о реквизите справочника. ") должно служить каким то целям. Что Вы хотите получить на "выходе"?
У вас на форме диалога есть элемент список значений? Вам надо добавить туда значения? Тогда ИмяСписка.ДобавитьЗначение() в руки.
Другое дело, если у вас открыто две формы элементов справочников, и при изменении в одной форме необходимо автоматически обновлять список значений в другой форме. Тогда, полагаю, поможет FormEx, там вроде есть событие при смене фокуса окна.
Другое дело, если у вас открыто две формы элементов справочников, и при изменении в одной форме необходимо автоматически обновлять список значений в другой форме. Тогда, полагаю, поможет FormEx, там вроде есть событие при смене фокуса окна.
(11) Давайте по порядку. У вас откуда берутся данные для списка значений в справочнике2?
Я правильно понимаю, что из справочника1?
Формы обоих справочников открыты одновременно, так? И нужно, чтобы при изменении данных в одной форме автоматически менялось отображение в другой?
Можно ли форму справочника2 кинуть кнопку "Обновить данные" (в таком случае можно обойтись без ВК) или это по каким-либо сообржениям неприемлемо?
Я правильно понимаю, что из справочника1?
Формы обоих справочников открыты одновременно, так? И нужно, чтобы при изменении данных в одной форме автоматически менялось отображение в другой?
Можно ли форму справочника2 кинуть кнопку "Обновить данные" (в таком случае можно обойтись без ВК) или это по каким-либо сообржениям неприемлемо?
В форме эелемента справочника1 после сделанных изменений поставьте:
СохранитьЗначение("ДопИнф", ЗначениеДопИнф);
При открытии справочника2 используйте:
Буфер=ВосстановитьЗначение("ДопИнф");
Для Сч=1 По Буфер.РазмерСписка() Цикл
ДопИнф.ДобавитьЗначение(Буфер.ПолучиьЗначение(Сч));
КонецЦикла;
ДопИнф=ВосстановитьЗначение("ДопИнф"); - не прокатит
Можно также ипользовать конструкции ЗначениеВФайл, ЗначениеИзФайла
СохранитьЗначение("ДопИнф", ЗначениеДопИнф);
При открытии справочника2 используйте:
Буфер=ВосстановитьЗначение("ДопИнф");
Для Сч=1 По Буфер.РазмерСписка() Цикл
ДопИнф.ДобавитьЗначение(Буфер.ПолучиьЗначение(Сч));
КонецЦикла;
ДопИнф=ВосстановитьЗначение("ДопИнф"); - не прокатит
Можно также ипользовать конструкции ЗначениеВФайл, ЗначениеИзФайла
(17) прог, ты что-совсем запутал :)
Если я правильно понял - тебе нужно обновить справочник2? Если так, то зачем его программно открывать?
Можно Спр2 = СоздатьОбъект(Справочник.Справочник2);
Если Спр2.НайтиЭлемент(Элемент) .. или там НайтиПоКоду(Код) = 1 Тогда
Спр2.ДопИнфо = .... бла бла бла;
Спр2.Записать();
КонецЕсли;
Или у меня едут лыжи? :)
Если я правильно понял - тебе нужно обновить справочник2? Если так, то зачем его программно открывать?
Можно Спр2 = СоздатьОбъект(Справочник.Справочник2);
Если Спр2.НайтиЭлемент(Элемент) .. или там НайтиПоКоду(Код) = 1 Тогда
Спр2.ДопИнфо = .... бла бла бла;
Спр2.Записать();
КонецЕсли;
Или у меня едут лыжи? :)
>так нельзя, т.к. нужно обновить не элемент справочника2, а элемент его формы!
(21) Когда открывается форма элемента справочника2, этот элемент формы - список - каким-то образом заполняется, т.е. откуда-то берутся исходные данные для его заполнения. Вот эти исходные данные, там, где они хранятся, и нужно изменить и записать программно.
Сам список в уже заполненном виде, при сохранении элемента справочника2 не сохраняется (это не реквизит). Поэтому другие варианты (не очень хорошие, нет контроля ссылочной целостности и т.п., хотя нужно смотреть в каждом конкретном случае) - завести для него реквизит и записывать в него список, как предложил dusha0020 в (36) или без добавления реквизита записывать в файл или настройки, как предложил nicotin в (12)
PS. Посмотри, как реализовано подобное в типовых. Например в бухии у формы элемента номенклатуры есть слой "Цены" с одноименной закладкой. Данные по ценам храняться в справочнике "Цены", а при выборе соответствующей закладки в форме элемента номенклатуры этими данными заполняется элемент формы - ТаблицаЗначений
(21) Когда открывается форма элемента справочника2, этот элемент формы - список - каким-то образом заполняется, т.е. откуда-то берутся исходные данные для его заполнения. Вот эти исходные данные, там, где они хранятся, и нужно изменить и записать программно.
Сам список в уже заполненном виде, при сохранении элемента справочника2 не сохраняется (это не реквизит). Поэтому другие варианты (не очень хорошие, нет контроля ссылочной целостности и т.п., хотя нужно смотреть в каждом конкретном случае) - завести для него реквизит и записывать в него список, как предложил dusha0020 в (36) или без добавления реквизита записывать в файл или настройки, как предложил nicotin в (12)
PS. Посмотри, как реализовано подобное в типовых. Например в бухии у формы элемента номенклатуры есть слой "Цены" с одноименной закладкой. Данные по ценам храняться в справочнике "Цены", а при выборе соответствующей закладки в форме элемента номенклатуры этими данными заполняется элемент формы - ТаблицаЗначений
MaxDavid.
берутся данные для списка значений в справочнике2 из справочника1 - да.
открыта только форма справочника1.
(открывать форму справочника2 пользователь не должен. Открыть форму справочника2 можно программно и лишь только для того, чтобы внести изменения в справочник2, но тогда нужно и программно его закрыть.)
Можно в форму справочника2 кинуть кнопку "Обновить данные", но с условием, что пользователь не будет нажимать эту кнопку, а кнопка "Обновить данные" сработает автоматически. Так реально сделать???
берутся данные для списка значений в справочнике2 из справочника1 - да.
открыта только форма справочника1.
(открывать форму справочника2 пользователь не должен. Открыть форму справочника2 можно программно и лишь только для того, чтобы внести изменения в справочник2, но тогда нужно и программно его закрыть.)
Можно в форму справочника2 кинуть кнопку "Обновить данные", но с условием, что пользователь не будет нажимать эту кнопку, а кнопка "Обновить данные" сработает автоматически. Так реально сделать???
В форме элемента справочника "Номенклатура" (справочник2) добавлен элемент диалога список "ДопИнф".
открывать форму справочника2 пользователь не должен
Надо ли это понимать, что пользователи не должны открывать справочник "Номенклатура" ?
Короче напишу так:
Пишешь в форме (модуле формы) справочника2 процедуру СделатьТоИТо() в ней пишешь все что нужно сделать пользуясь данными из параметра формы (Форма.Параметр).
Первым параметром передаешь нужно ли это делать - если не нужно выходишь.
Если нужно обновляешь что и как хочешь в этой процедуре, а в конце - Записать() и Закрыть().
Эту процедуру вешаешь в невидимое и недоступное поле в форме - тогда она запустится уже после открытия, то есть весь контекст формы должен быть доступен.
Пишешь в форме (модуле формы) справочника2 процедуру СделатьТоИТо() в ней пишешь все что нужно сделать пользуясь данными из параметра формы (Форма.Параметр).
Первым параметром передаешь нужно ли это делать - если не нужно выходишь.
Если нужно обновляешь что и как хочешь в этой процедуре, а в конце - Записать() и Закрыть().
Эту процедуру вешаешь в невидимое и недоступное поле в форме - тогда она запустится уже после открытия, то есть весь контекст формы должен быть доступен.
(34) прог, Ты не понял. Не нужно стирать информацию. Сотри вызов процедуры из поля "Формула" элемента диалога.
Запускай нужную тебе процедуру добавления данных из процедуры ПриОткрытии() формы элемента справочника 2. Но...
Все что ты вносишь в элемент диалога, а не реквизит справочника не сохранится. Даже если процедура Сохранить сработает правильно.
Запускай нужную тебе процедуру добавления данных из процедуры ПриОткрытии() формы элемента справочника 2. Но...
Все что ты вносишь в элемент диалога, а не реквизит справочника не сохранится. Даже если процедура Сохранить сработает правильно.
(34) прог, Лучше создай подходящий реквизит как строку неограниченной длины, допустим СтрДляСписка. Сформируй список нужных тебе значений допустим спТоЧтоНужно, а затем спозиционируйся на нужном элементе (Элем2) справочника 2 из модуля справочника 1, дальше: Элем2.СтрДляСписка = ЗначениеВСтроку(спТоЧтоНужно) и Элем2.Записать().
А при открытии справочника2 восстанови этот реквизит в нужный тебе элемент диалога. Примерно Так:
Форма.НужныйЭлемДиалога = ЗначениеИзСтроки(СтрДляСписка);
А при открытии справочника2 восстанови этот реквизит в нужный тебе элемент диалога. Примерно Так:
Форма.НужныйЭлемДиалога = ЗначениеИзСтроки(СтрДляСписка);
Добавлять новый реквизит справочника не есть хорошо, поскольку его надо будет каждый раз формировать заново для новых элементов справочника и при изменении списка перезаписывать для всех уже существующих элементов справочника.
(32)И все же объясните, что вы все время пытаетесь программно сохранить и записать. Коды в (12) предназначены для интерактивной работы со справочником2.Здесь нет речи о программном открытии-сохранении-закрытии.
А если "пользователи не должны открывать форму справочника2", тогда зачем она вообще нужна ?
Чтобы кто-то программно открывал ее ? Кто и с какой целью ?
И еще, как правильно сказано в (26), в 7.7 нет механизмов для сохранения списков и таблиц значений. Может быть в 8-ке есть?
(32)И все же объясните, что вы все время пытаетесь программно сохранить и записать. Коды в (12) предназначены для интерактивной работы со справочником2.Здесь нет речи о программном открытии-сохранении-закрытии.
А если "пользователи не должны открывать форму справочника2", тогда зачем она вообще нужна ?
Чтобы кто-то программно открывал ее ? Кто и с какой целью ?
И еще, как правильно сказано в (26), в 7.7 нет механизмов для сохранения списков и таблиц значений. Может быть в 8-ке есть?
Уважаемые форумчане!
Столкнулся с такой же проблемой как и у ТС
В форме элемента справочника на кнопке ОК в формуле прописано #Записать? Закрыть.
Как повторить все те же действия в процедуре?
На кнопку вешаю процедуру ОК()
Процедура ОК()
Записать();
Форма.Закрыть()
КонецПроцедуры // ОК
При такой реализации не сохраняются периодические реквизиты.
Столкнулся с такой же проблемой как и у ТС
В форме элемента справочника на кнопке ОК в формуле прописано #Записать? Закрыть.
Как повторить все те же действия в процедуре?
На кнопку вешаю процедуру ОК()
Процедура ОК()
Записать();
Форма.Закрыть()
КонецПроцедуры // ОК
При такой реализации не сохраняются периодические реквизиты.
(44) lvv75, какая конфигурация ? Вообще практически в каждой типовой конфигурации для этих целей имеется обработка ЗаписьПериодическихРеквизитов. Вызыватся с помощью функции ГМ глЗаписьПериодическихРеквизитов в предопределенной процедуре ПриЗаписи. Так что дело за малым - скопипастить весь механизм. Лучше предварительно разобраться в принципе действия.
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)