Как программно записать и закрыть открытый элемент справочника??

1. прог 12.01.12 11:12 Сейчас в теме
Желательно сохранить и закрыть из модуля этого же открытого элемента справочника (если возможно).
Спасибо за ответы.
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. Alex_E 2353 12.01.12 11:31 Сейчас в теме
(1) прог, Вопрос не совсем понятный - элемент справочника открыт? тогда зачем программно - можно просто ОК нажать. Ну а если из модуля формы надо программно то Создать объект этот го справочника, найти нужный элемент, закрыть форму сделать необходимые изменения с объектом и его записать, если надо - то опять открыть форму. Конткретней - что нужно то?
49. Boorkov 2 13.01.17 12:01 Сейчас в теме
Решил по другому: "Форма.Обновить(1);". Теперь при закрытии происходит сохранение элемента.
2. S.V.Y 17 12.01.12 11:25 Сейчас в теме
Записать(), Закрыть()?, не совсем понял вопроса...
4. прог 12.01.12 11:54 Сейчас в теме
(Записать(), Закрыть()- не работает в этом случае)
Задача следующая:
нужно при редактировании элементов справочника1 автоматически внести изменения не в реквизит справочника2, а в список формы справочника2.
1.Поэтому я программно открываю элемент справочника2, вношу изменения, и надо программно сохранить и закрыть, как?
либо можно сделать способом 2.
2.Программно внести изменения в список формы элемента справочника2. Как??
Спасибо за ответы.
5. Alex_E 2353 12.01.12 12:01 Сейчас в теме
(4) прог, Опять вопрос по терминам - "список формы справочника2" - что имеется ввиду? У справочника есть реквизиты - в них хранятся данные. Есть формы списка и, если задано в конфигураторе, форма элемента справочника. Форма служат для отображения реквизитов. Про какие изменения списка формы идёт речь?
6. deniseek77 86 12.01.12 12:05 Сейчас в теме
Действительно не понятно, причем тут открыть...закрыть...Все делается без открытия форм.
7. прог 12.01.12 12:12 Сейчас в теме
Речь идет не об элементе справочника и не о реквизите справочника.
Речь идет об элементе диалога - списке.
В этот список необходимо добавить элементы.
8. Alex_E 2353 12.01.12 12:27 Сейчас в теме
(7) прог, Сформулируйте задачу конкретнее. Все формы справочников отображают их реквизиты и служат для добавления, изменения, удаления данных. Добавление в форму списка элементов (непонятно каких, ведь "Речь идет не об элементе справочника и не о реквизите справочника. ") должно служить каким то целям. Что Вы хотите получить на "выходе"?
9. MaxDavid 127 12.01.12 12:46 Сейчас в теме
У вас на форме диалога есть элемент список значений? Вам надо добавить туда значения? Тогда ИмяСписка.ДобавитьЗначение() в руки.
Другое дело, если у вас открыто две формы элементов справочников, и при изменении в одной форме необходимо автоматически обновлять список значений в другой форме. Тогда, полагаю, поможет FormEx, там вроде есть событие при смене фокуса окна.
10. прог 12.01.12 13:09 Сейчас в теме
В форме элемента справочника "Номенклатура" (справочник2) добавлен элемент диалога список "ДопИнф".
В "ДопИнф" необходимо добавить информацию программно при записи изменения в Справочнике1.
Как это прописать?
11. прог 12.01.12 13:14 Сейчас в теме
MaxDavid. (при изменении в одной форме необходимо автоматически обновлять список значений в другой форме.)
Если без FormEx нельзя, то какой должен быть код в FormEx??
Спасибо.
13. MaxDavid 127 12.01.12 13:39 Сейчас в теме
(11) Давайте по порядку. У вас откуда берутся данные для списка значений в справочнике2?
Я правильно понимаю, что из справочника1?
Формы обоих справочников открыты одновременно, так? И нужно, чтобы при изменении данных в одной форме автоматически менялось отображение в другой?
Можно ли форму справочника2 кинуть кнопку "Обновить данные" (в таком случае можно обойтись без ВК) или это по каким-либо сообржениям неприемлемо?
12. nicotin 35 12.01.12 13:23 Сейчас в теме
В форме эелемента справочника1 после сделанных изменений поставьте:
СохранитьЗначение("ДопИнф", ЗначениеДопИнф);

При открытии справочника2 используйте:
Буфер=ВосстановитьЗначение("ДопИнф");
Для Сч=1 По Буфер.РазмерСписка() Цикл
ДопИнф.ДобавитьЗначение(Буфер.ПолучиьЗначение(Сч));
КонецЦикла;

ДопИнф=ВосстановитьЗначение("ДопИнф"); - не прокатит

Можно также ипользовать конструкции ЗначениеВФайл, ЗначениеИзФайла
15. прог 12.01.12 14:22 Сейчас в теме
(12)Спасибо, НО
элемент справочника2 откроем, но как программно сохранить и закрыть этот элемент справочника?? (мы вернулись к первоначальному вопросу).
16. nicotin 35 12.01.12 14:49 Сейчас в теме
(15) А вот здесь я чего-то не догоняю. Что значит "сохранить" ?
Если список или поле со списком является элементом формы справочника ли, отчета ли,
то в явной форме он никак не сохраняется, формируется либо при открытии,
либо по какой-то другой кнопке.
17. прог 12.01.12 14:57 Сейчас в теме
(16)Поэтому я программно открываю форму элемента справочника, НО как программно сохранить и закрыть форму элемента??
18. S.V.Y 17 12.01.12 15:23 Сейчас в теме
(17) прог, ты что-совсем запутал :)
Если я правильно понял - тебе нужно обновить справочник2? Если так, то зачем его программно открывать?
Можно Спр2 = СоздатьОбъект(Справочник.Справочник2);
Если Спр2.НайтиЭлемент(Элемент) .. или там НайтиПоКоду(Код) = 1 Тогда
Спр2.ДопИнфо = .... бла бла бла;
Спр2.Записать();
КонецЕсли;
Или у меня едут лыжи? :)
21. прог 12.01.12 15:37 Сейчас в теме
(18)так нельзя, т.к. нужно обновить не элемент справочника2, а элемент его формы!
38. Pari 12.01.12 20:02 Сейчас в теме
>так нельзя, т.к. нужно обновить не элемент справочника2, а элемент его формы!
(21) Когда открывается форма элемента справочника2, этот элемент формы - список - каким-то образом заполняется, т.е. откуда-то берутся исходные данные для его заполнения. Вот эти исходные данные, там, где они хранятся, и нужно изменить и записать программно.
Сам список в уже заполненном виде, при сохранении элемента справочника2 не сохраняется (это не реквизит). Поэтому другие варианты (не очень хорошие, нет контроля ссылочной целостности и т.п., хотя нужно смотреть в каждом конкретном случае) - завести для него реквизит и записывать в него список, как предложил dusha0020 в (36) или без добавления реквизита записывать в файл или настройки, как предложил nicotin в (12)
PS. Посмотри, как реализовано подобное в типовых. Например в бухии у формы элемента номенклатуры есть слой "Цены" с одноименной закладкой. Данные по ценам храняться в справочнике "Цены", а при выборе соответствующей закладки в форме элемента номенклатуры этими данными заполняется элемент формы - ТаблицаЗначений
19. dusha0020 1103 12.01.12 15:34 Сейчас в теме
(17) прог, Из процедуры ПриОткрытии() справочника2. Кто тебе мешает вызвать из процедуры открытия все необходимые действия в форме, а после них поставить команды сохранения и закрытия?
Или я вообще не понимаю о чем тут идет такая жаркая дискуссия?!
14. прог 12.01.12 13:52 Сейчас в теме
MaxDavid.
берутся данные для списка значений в справочнике2 из справочника1 - да.
открыта только форма справочника1.
(открывать форму справочника2 пользователь не должен. Открыть форму справочника2 можно программно и лишь только для того, чтобы внести изменения в справочник2, но тогда нужно и программно его закрыть.)

Можно в форму справочника2 кинуть кнопку "Обновить данные", но с условием, что пользователь не будет нажимать эту кнопку, а кнопка "Обновить данные" сработает автоматически. Так реально сделать???
20. nicotin 35 12.01.12 15:34 Сейчас в теме
В форме элемента справочника "Номенклатура" (справочник2) добавлен элемент диалога список "ДопИнф".

открывать форму справочника2 пользователь не должен

Надо ли это понимать, что пользователи не должны открывать справочник "Номенклатура" ?
22. прог 12.01.12 15:39 Сейчас в теме
(20)пользователи работают в справочнике1, при этом Справочник2 должен автоматически обновляться.
пользователи не должны открывать справочник "Номенклатура" (,т.е. справочник2)
23. MaxDavid 127 12.01.12 15:46 Сейчас в теме
(22)Так ведь должен обновляться не сам справочник2, а список значений на его форме. А список значений сам по себе - штука временная, формируется при открытии формы.
26. dusha0020 1103 12.01.12 16:02 Сейчас в теме
(23) MaxDavid, Вот и мне кажется, что автор этого не понимает, и хочет записать, то что не записывается в принципе:)!
24. MaxDavid 127 12.01.12 15:48 Сейчас в теме
А вообще, можешь выложить скрины формы справочников 1 и 2? И что от чего зависит и обновляется?
27. прог 12.01.12 16:11 Сейчас в теме
(24)выдает ошибку при отправке.
25. dusha0020 1103 12.01.12 15:59 Сейчас в теме
Короче напишу так:
Пишешь в форме (модуле формы) справочника2 процедуру СделатьТоИТо() в ней пишешь все что нужно сделать пользуясь данными из параметра формы (Форма.Параметр).
Первым параметром передаешь нужно ли это делать - если не нужно выходишь.
Если нужно обновляешь что и как хочешь в этой процедуре, а в конце - Записать() и Закрыть().

Эту процедуру вешаешь в невидимое и недоступное поле в форме - тогда она запустится уже после открытия, то есть весь контекст формы должен быть доступен.
28. прог 12.01.12 16:32 Сейчас в теме
(25)ошибка Записать() Данная команда не может выполняться в формуле элемента диалога!
29. dusha0020 1103 12.01.12 16:38 Сейчас в теме
(28) прог, А в процедуре ПриОткрытии() не пробовал?
Только вместо Закрыть() там нужно писать СтатусВозврата(0)
30. прог 12.01.12 16:39 Сейчас в теме
31. dusha0020 1103 12.01.12 16:43 Сейчас в теме
32. прог 12.01.12 16:44 Сейчас в теме
Записать();
{Справочник.Номенклатура.Форма.Модуль(114)}: Данная команда не может выполняться в формуле элемента диалога!
33. dusha0020 1103 12.01.12 16:47 Сейчас в теме
(32) прог, Ну так и вынеси ее из элемента диалога, сотри. Запускай из ПриОткрытии()!
34. прог 12.01.12 16:56 Сейчас в теме
(33)это уже сложно, т.к. много уже внесено информации в этот элемент диалога и подходящего реквизита нет...
получатся, что задача не выполнима???
35. dusha0020 1103 12.01.12 17:08 Сейчас в теме
(34) прог, Ты не понял. Не нужно стирать информацию. Сотри вызов процедуры из поля "Формула" элемента диалога.
Запускай нужную тебе процедуру добавления данных из процедуры ПриОткрытии() формы элемента справочника 2. Но...
Все что ты вносишь в элемент диалога, а не реквизит справочника не сохранится. Даже если процедура Сохранить сработает правильно.
36. dusha0020 1103 12.01.12 17:15 Сейчас в теме
(34) прог, Лучше создай подходящий реквизит как строку неограниченной длины, допустим СтрДляСписка. Сформируй список нужных тебе значений допустим спТоЧтоНужно, а затем спозиционируйся на нужном элементе (Элем2) справочника 2 из модуля справочника 1, дальше: Элем2.СтрДляСписка = ЗначениеВСтроку(спТоЧтоНужно) и Элем2.Записать().
А при открытии справочника2 восстанови этот реквизит в нужный тебе элемент диалога. Примерно Так:
Форма.НужныйЭлемДиалога = ЗначениеИзСтроки(СтрДляСписка);
39. nicotin 35 13.01.12 08:55 Сейчас в теме
Добавлять новый реквизит справочника не есть хорошо, поскольку его надо будет каждый раз формировать заново для новых элементов справочника и при изменении списка перезаписывать для всех уже существующих элементов справочника.
(32)И все же объясните, что вы все время пытаетесь программно сохранить и записать. Коды в (12) предназначены для интерактивной работы со справочником2.Здесь нет речи о программном открытии-сохранении-закрытии.
А если "пользователи не должны открывать форму справочника2", тогда зачем она вообще нужна ?
Чтобы кто-то программно открывал ее ? Кто и с какой целью ?
И еще, как правильно сказано в (26), в 7.7 нет механизмов для сохранения списков и таблиц значений. Может быть в 8-ке есть?
37. S.V.Y 17 12.01.12 18:54 Сейчас в теме
Мне тоже кажется, что добавить реквизит справочника было бы намного проще и удобнее, чем разводить тут огород :)
40. прог 13.01.12 09:37 Сейчас в теме
Всем спасибо. Сделала реквизит - строка большой длины.
41. S.V.Y 17 13.01.12 10:53 Сейчас в теме
(40) прог, что и требовалось доказать :)
42. lvv75 13.08.13 17:19 Сейчас в теме
Уважаемые форумчане!
Столкнулся с такой же проблемой как и у ТС
В форме элемента справочника на кнопке ОК в формуле прописано #Записать? Закрыть.
Как повторить все те же действия в процедуре?
На кнопку вешаю процедуру ОК()

Процедура ОК()
Записать();
Форма.Закрыть()
КонецПроцедуры // ОК

При такой реализации не сохраняются периодические реквизиты.
Drapezhnik; +1 Ответить
43. Ёпрст 1063 13.08.13 17:45 Сейчас в теме
(42) воткни перед Записать() вызов ПриЗаписи()
44. lvv75 13.08.13 17:55 Сейчас в теме
(43) Ёпрст,
Не помогает. Вообще-то у меня в процедуре ПриЗаписи() ничего и нет.
В исходном варианте (#Записать? Закрыть), после нажатия кнопки еще выскакивает окошко с вопросом об изменении периодических реквизитов.
45. nicotin 35 13.08.13 20:55 Сейчас в теме
(44) lvv75, какая конфигурация ? Вообще практически в каждой типовой конфигурации для этих целей имеется обработка ЗаписьПериодическихРеквизитов. Вызыватся с помощью функции ГМ глЗаписьПериодическихРеквизитов в предопределенной процедуре ПриЗаписи. Так что дело за малым - скопипастить весь механизм. Лучше предварительно разобраться в принципе действия.
46. vcv 89 13.08.13 21:13 Сейчас в теме
Можно из процедуры сделать
Форма.СтрокаДействийФормы = "#Записать? Закрыть";
47. lvv75 16.08.13 16:08 Сейчас в теме
(46) vcv,
Получилось, но в процедуре пришлось написать только так (с Форма. 1С ругалась):
СтрокаДействийФормы = "#Записать? Закрыть";
48. Boorkov 2 13.01.17 12:00 Сейчас в теме
Та же проблема - Записать() выдает ошибку. Попробую через строку действий формы
50. imax26 91 19.04.17 05:11 Сейчас в теме
Записать();
Форма.Закрыть();
51. ohyen 41 21.09.17 17:17 Сейчас в теме
Форма. Открыть();
Форма.ЗаписатьВФорме();
Форма.Закрыть()
Оставьте свое сообщение
Вакансии
Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день