запись даты в справочник

1. DbIM 29.08.07 15:09 Сейчас в теме
из документа обращаюсь к справочнику
1)Открываю справочник 2)меняю дату в справочнике на дату из документа, 3)Записываю обратно в справочник.
с 3 пунктом проблема :)

1) Спр=СоздатьОбъект("Справочник.Клиенты");
2) Организация.замена=датадок;
3) Спр.Записать();
Как правильно?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. defini 464 29.08.07 15:31 Сейчас в теме
Спр = СоздатьОбъект("Справочник.Клиенты");
Если Спр.НайтиЭлемент("ИмяРеквизитаВДокументе") = 1 Тогда
Спр.Замена = ДатаДок;
Спр.Записать();
КонецЕсли;
3. sevenlis 70 29.08.07 15:39 Сейчас в теме
если в документе есть реквизит Клиент с типом Справочник.Клиенты:
Код
Спр=СоздатьОбъект("Справочник.Клиенты");
СпрОрг=СоздатьОбъект("Справочник.Организации");
Если Спр.НайтиЭлемент(Клиент)=0 Тогда
   Возврат;
КонецЕсли; 
Если СпрОрг.НайтиПоРеквизиту("Клиент",Спр.ТекущийЭлемент(),0)=0 Тогда
   Возврат;
КонецЕсли;
СпрОрг.Замена=ДатаДок; 
СпрОрг.Записать();
Спр.Организация=СпрОрг.ТекущийЭлемент();
Спр.Записать();
Показать полностью

короче, элемент справочника должен быть спозиционирован (выбран). иначе нечего записывать и получаем ошибку типа не выбран элемент и т.д.
4. sevenlis 70 29.08.07 15:44 Сейчас в теме
я правильно понял?
конструкция Спр.Организация.Замена=ДатаДок; не сработает, т.к. Организация также является реквизитом справочника Клиенты с типом Справочник.Организации.
а если Организация - реквизит документа, тогда все равно элемент надо спозиционировать...
5. poppy 29.08.07 16:15 Сейчас в теме
> конструкция Спр.Организация.Замена=ДатаДок; не сработает

Правильно, через две точки присваивать нельзя.
6. DbIM 29.08.07 16:28 Сейчас в теме
как все по умному. ;)
хорошо
через две точки присваивать нельзя.
то что надо спозиционировать... согласен
но конструкция
Спр.Замена=ДатаДок;
Спр.Записать();
Спр.Организация=Спр.ТекущийЭлемент();
Спр.Записать();
не рабочая.
все равно ругается.
и зачем искать элементы ?
У меня просто условие что если открыт вполне конкретный документ и выбрано определенные параметры в нем, то в справочнике клиента дата замены меняется на дату вот этого самого документа.
Думал что Спр.Записать будет достаточно, а 1С и в самом деле ругается что элемент не выбран.
7. sevenlis 70 29.08.07 16:44 Сейчас в теме
>Спр.Организация=Спр.ТекущийЭлемент();

читай внимательней код. конструкцию не проверял, но:
Спр.Организация=СпрОрг.ТекущийЭлемент();
Спр - Клиент, СпрОрг - Организация, Организация - реквизит Спр. Оба элемента спозиционированы. должно работать.
8. sevenlis 70 29.08.07 16:48 Сейчас в теме
конструкцию ".Записать();" можно применять только к объектам, созданным функцией СоздатьОбъект, а никак не к реквизитам документов или еще чего-нить, и тем более не просто к реквизитам диалога на форме...
9. poppy 29.08.07 16:49 Сейчас в теме
2DbIM

Контсрукция, которую ты привел может быть рабочая. Все зависит от того, что у тебя в переменной Спр.

Почитай описание метода Записать(). Там написано, что он работает только для объекта, созданного функцией СоздатьОбъект().
10. DbIM 29.08.07 17:20 Сейчас в теме
2 LiS В первом примере я не понял при чем здесь справочник.организации (у меня такого вообще нет)
То что Записать() работает только для объекта, созданного функцией СоздатьОбъект().
Это понятно. Я же создал этот самый Спр. В первом сообщении моя первая строка кода.
Про ТекущийЭлемент() и позиционированние...
Ребят. Я понимаю, что ничего не понимаю. Может есть (на Мисте) или еще где подходящий кусок готового кода похожего. Чтобы я мог ткнуться носом и посмотреть как правильно там это реализованно.
2 ошибки: то Значение не представляет агрегатный объект
то не выбран элемент.
Уже запарился.
11. sevenlis 70 29.08.07 17:24 Сейчас в теме
DbIM Написал:
-------------------------------------------------------
> 1) Спр=СоздатьОбъект("Справочник.Клиенты");
> 2) Организация.замена=датадок;
> 3) Спр.Записать();

что такое Организация? и если Организация - реквизит справочника Клиенты, то какой у этого реквизита тип?
12. sevenlis 70 29.08.07 17:27 Сейчас в теме
полагаю, задача решается в 2-3 строки кода. но тогда подробнее опиши задачу: где и что надо поменять? и что это ГДЕ и где это ЧТО.
13. DbIM 29.08.07 17:30 Сейчас в теме
Организация - реквизит шапки документа. Поле ввода в котором выбираеш из справочника клиенты.
А в справочнике клиенты есть поле замена (дата).
14. DbIM 29.08.07 17:35 Сейчас в теме
В справочнике клиенты в поле замена (тип дата) поменять дату на датудок текущего открытого документа.
15. sevenlis 70 29.08.07 17:50 Сейчас в теме
... ну тада:
Код
Спр=СоздатьОбъект("Справочник.Клиенты");
Если Спр.НайтиЭлемент(Организация)=0 Тогда
   Возврат;
КонецЕсли; 
Спр.Замена=ДатаДок; 
Спр.Записать();
Показать полностью
16. sevenlis 70 29.08.07 17:52 Сейчас в теме
директива НайтиЭлемент позиционирует справочник. условие проверяется при любом раскладе. вот и все.
17. poppy 29.08.07 17:53 Сейчас в теме
Напиши свой код здесь и где какие ошибки выдает. Желательно описать структуру метаданных в части касающейся.
Код нужно выкладывать краткий, только для того можно было понять суть алгоритма.
18. defini 464 30.08.07 09:25 Сейчас в теме
действительно, опиши задачу и метаданные поподробней, а то гадаем тут...
19. DbIM 30.08.07 10:44 Сейчас в теме
Процедура ПриОткрытии()
Причина.ДобавитьЗначение("Замена ЭКЛЗ");
КонецПроцедуры

Процедура Заполнить()
Спр=СоздатьОбъект("Справочник.Клиенты");
НоваяСтрока();
Строк=Причина.ТекущаяСтрока();
Прич=Причина.ПолучитьЗначение(Строк);
если Прич=("Замена ЭКЛЗ") тогда
Если Спр.НайтиЭлемент(Организация)=0 Тогда
Возврат;
КонецЕсли;
Организация.замена=датадок;
Спр.Записать();
конецесли;
T=СоздатьОбъект("Таблица");
Т.ИсходнаяТаблица("Таблица");
Т.ВывестиСекцию("Секция_1");
Т.Показать();
КонецПроцедуры

Последний Рабочий вариант.
Выводит таблицу. Скажем если указать какую-нить переменную и присвоить ей значение Организация.замена и вывести ее на таблицу то будет видно что замэкл теперь содержит текущую дату. Однако эта дата все равно пока в справочник не записалась.
До этого с вариантами
Спр.Замена=ДатаДок;
Спр.Записать();
Ругалась и выдавала ошибку:
Поле агрегатного объекта не обнаружено (Замена)

Повторюсь.
В Справочнике Клиенты есть поле Замена с типом Дата.
В документе выбираю организацию из этого справочника и хочу присвоить (и сохранить) текущую дату в этом поле у выбранной организации.

Виноват если очень громоздко.
20. poppy 30.08.07 11:56 Сейчас в теме
Вообще-то вариант с

Спр.Замена=ДатаДок;
Спр.Записать();

должен работать. Пройдись отладчиком - сразу увидишь причину.
21. DbIM 30.08.07 15:01 Сейчас в теме
ok разобрался
Спр.замена=Дата(датадок);
Спр.Записать();
22. CheBurator 3125 16.10.07 23:13 Сейчас в теме
спр = создатьобъект("справочник.номенклатура");
спр.найтипореквизиту("Артикул",Артикул,1);
Сообщить(Спр.Наименование); //работает!
Спр.Записать();
Сообщить(Спр.Наименование); //не работает!!!, элемент не выбран
23. danser 3 26.10.07 02:23 Сейчас в теме
Сhe Burashka Написал:
-------------------------------------------------------
> спр = создатьобъект("справочник.номенклатура");
> спр.найтипореквизиту("Артикул",Артикул,1);
> Сообщить(Спр.Наименование); //работает!
> Спр.Записать();
> Сообщить(Спр.Наименование); //не работает!!!,
> элемент не выбран

//*******************************************
Процедура Сформировать()
cпр = создатьобъект("справочник.номенклатура");
cпр.найтипореквизиту("Артикул",Артикул,1);
Сообщить(cпр.Наименование); //работает!
cпр.Записать();
cпр.найтипореквизиту("Артикул",Артикул,1);
Сообщить(cпр.Наименование); //не работает!!!, элемент не выбран\
КонецПроцедуры

После записи он переходит с элемента справочника :) Я лично Записать всегда в конце документа делаю :)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот