![]() |
|
Запись на форме элемента справочника. | ☑ | ||
---|---|---|---|---|
0
Barry
25.11.22
✎
00:52
|
Не получается записать данные на форму элемента справочника. Дата срока годности, автоматом меняется в табличной части на заданную, но ничего не происходит. При выборе снова этого же документа, дата срока годности возвращается в исходной положение. Подскажите пожалуйста , что не так?((( Вот кусок кода:
ТЧИнфо = Объект.Инфо; ДокВыборка = Справочники.СерииНоменклатуры.Выбрать(); Пока ДокВыборка.Следующий() Цикл ДокОбъект = ДокВыборка.ПолучитьОбъект(); Для каждого СтрокиТабличнойЧасти из ТЧИнфо Цикл СтрокиТабличнойЧасти.ГоденДо = Объект.СрокГодности; ДокОбъект.ГоденДо = СтрокиТабличнойЧасти.ГоденДо; КонецЦикла; КонецЦикла; Попытка ДокОбъект.Записать(); Исключение Сообщить (ОписаниеОшибки()); КонецПопытки |
|||
1
Ryzeman
25.11.22
✎
02:04
|
ОФ\УФ? Конфа?
Ну и как минимум ты записываешь объект вне цикла, то есть самый последний. Ну и вообще, не в обиду, но выглядит очень криво. ДокВыборка, ДокОбъект, Объект тебе самому удобно так когда работаешь с разными документами? ТЧИнфо = Объект.Инфо; ВыборкаСерийНоменклатуры = Справочники.СерииНоменклатуры.Выбрать(); Пока ВыборкаСерийНоменклатуры.Следующий() Цикл СерияНоменклатурыОбъект = ВыборкаСерийНоменклатуры.ПолучитьОбъект(); Для каждого СтрокаТЧ из ТЧИнфо Цикл СтрокаТЧ.ГоденДо = Объект.СрокГодности; СерияНоменклатурыОбъект.ГоденДо = СтрокаТЧ.ГоденДо; КонецЦикла; КонецЦикла; Попытка СерияНоменклатурыОбъект.Записать(); Исключение Сообщить (ОписаниеОшибки()); КонецПопытки Видишь, сразу же удобнее? Плюс сразу видно логическую ошибку самого алгоритма. Зачем ты в двойном цикле перепереписываешь все строки твоего документа и в одинарном пытаешься переписывать все серииноменклатуры? Тут явно где-то ошибка. |
|||
2
Barry
25.11.22
✎
23:35
|
(1) Чуть проще сделал но хз почему всеравно не записывает(
ДокОбъект = Объект.Документ.ПолучитьОбъект(); ТЧСрокГодности = Объект.Инфо; Для Каждого Стр Из ТЧСрокГодности Цикл Стр.ГоденДо = Объект.СрокГодности; КонецЦикла; ДокОбъект.Записать(); |
|||
3
Barry
25.11.22
✎
23:39
|
(1) Здесь просто в самом документе, реквизит Годен до хранится в справочнике серии и запись происходит на форме элемента. Я не понимаю как это можно правильно записать.
Вот скрин: https://prnt.sc/Tz7wfN4KmAnb |
|||
4
Тындр
25.11.22
✎
23:41
|
(2) Разве не очевидно, что вместо "ТЧСрокГодности = Объект.Инфо;" нужно юзать "ТЧСрокГодности = ДокОбъект.Инфо;"?
|
|||
5
Тындр
25.11.22
✎
23:42
|
+4 Ну или как-то так. Меняешь ты один объект, а записываешь другой в итоге
|
|||
6
Barry
26.11.22
✎
00:03
|
(5) Так это моя табличная часть которую я создал в обработке, чтобы выводить в нее данные. Ну тогда так:
ТЧСрокГодности = Объект.Инфо; ТЧСрокГодности = ДокОбъект.Товары; Пишет теперь вот что: Поле объекта недоступно для записи (ГоденДо) {ВнешняяОбработка.Корректировка.Форма.Форма.Форма(55)}:Стр.Серия.ГоденДо = Объект.СрокГодности; |
|||
7
Тындр
26.11.22
✎
00:04
|
+5 Если непонятно выразился, поясню: Изменяешь ты объект Объект "ТЧСрокГодности = Объект.Инфо;"
А записываешь ДокОбъект "ДокОбъект = Объект.Документ.ПолучитьОбъект()" Это если не поймешь, то то хана. Не преодолел порог вхождения (( |
|||
8
Barry
26.11.22
✎
00:06
|
(7) Вот скрин: https://prnt.sc/Tz7wfN4KmAnb мне нужно на эту форму элемента дать запись, а не в сам документ. Я и спрашиваю как это сделать.
|
|||
9
Тындр
26.11.22
✎
00:09
|
(8) Соединение сброшено.
|
|||
10
GedKo
26.11.22
✎
00:10
|
вчитайтесь в описание ошибки (6). там же ясно написано что в ссылке попытка изменить значение
|
|||
11
Тындр
26.11.22
✎
00:15
|
(10) Тут главное понять что нужно сделать, а потом понять как это сделать.
90% что не получится, но нужно стараться. Предлагаю Барри сформулировать задачу простым языком, например, - "на форме обработки вводятся некотрые значения, которые потом записываются в базу данных в справочник такой-то" Иначе я просто не понимаю, что происходит )) |
|||
12
GedKo
26.11.22
✎
00:17
|
есть документ-ссылка с табличной частью.
в строках табличной части есть справочник-ссылка "серия", в которой нужно поменять значение реквизита. вопрос - для какой ссылки надо .ПолучитьОбъект() и .Записать() ? :)) |
|||
13
Barry
26.11.22
✎
00:20
|
(11) Есть обработка. В ней выбирается документ приходный ордер. Далее указываем дату Годен До (Хранится в справочнике Серии). Нажимаем получить, в табличную часть прилетает для визуального восприятия, нужные нам реквизиты, главный из них Годен до. Далее с помощью кнопки Записать, происходит замена для каждой строчки реквизита Годен До, на тот что указали в шапке. Все.
|
|||
14
Barry
26.11.22
✎
00:22
|
Если бы мне нужна была запись самого документа приходный ордер, то мой код отработал бы на все 100%. Но мне нужна запись на форме элемента справочника, на скрине указал.
|
|||
15
GedKo
26.11.22
✎
00:23
|
нда :(
|
|||
16
Тындр
26.11.22
✎
00:33
|
(13) Хорошо.
Действующие лица: Реквизиты обработки: - ПриходныйОрдер - НоваяДатаГоденДо - ТабличнаяЧастьДляВизуальногоВосприятия Основной реквизит "Объект", как я понимаю, это тип "ОбработкаОбъект". ПиходныйОрдер это ссылка на документ в базе. НоваяДатаГоденДо - это Дата ТабличнаяЧастьДляВизуальногоВосприятия - это копия структуры табличной части "Товары" приходного ордера. Как я понял, с чтением из базы и заполнением ТабличнаяЧастьДляВизуальногоВосприятия вопросов не возникло. Продолжаем. Тогда нам нужно просто записать новый срок годности в табличную часть ордера: ДокОбъект = Объект.ПриходныйОрдер.ПолучитьОбъект(); Для каждого СтрокаДокумента из ДокОбъект.Товары Цикл СтрокаДокумента.ГоденДо = Объект.НоваяДатаГоденДо; КонецЦикла; Док.Объект.Записать(); |
|||
17
Тындр
26.11.22
✎
00:36
|
+(16) не "Док.Объект.Записать();" а "ДокОбъект.Записать();"
Извините |
|||
18
Barry
26.11.22
✎
00:40
|
(17) Нет. Тоже самое пишет: Поле объекта недоступно для записи (ГоденДо)
|
|||
19
Barry
26.11.22
✎
00:42
|
(17) посмотрите скрин, который я кидал выше и станет ясно, что я хочу записать и где.
|
|||
20
Тындр
26.11.22
✎
00:43
|
(14) Запись элемента справочника чего?
Справочника серий? До этого шла речь о форме обработки. Форма обработки и форма справочника серий - это разные формы. Похоже все же порог вхождения таки ой. А скрин не открывается. "Не удается получить доступ к сайту Соединение сброшено." |
|||
21
Тындр
26.11.22
✎
00:44
|
(19) см (20)
|
|||
22
GedKo
26.11.22
✎
00:45
|
пока дошло() = ложь цикл
Читать12сообщение(); //там написано, что на форме отображается значение ссылки конецЦикла; |
|||
23
GedKo
26.11.22
✎
00:45
|
*значение реквизита ссылки
|
|||
24
Barry
26.11.22
✎
00:45
|
(20) Все верно, через документ приходный ордер, нужно записать изменения в справочнике серии на форме элемента.
|
|||
25
GedKo
26.11.22
✎
00:48
|
феерично! :)
|
|||
26
Barry
26.11.22
✎
00:51
|
(12) для справочник-ссылка "серия"
|
|||
27
Тындр
26.11.22
✎
00:56
|
(24) Жоско.
Конечно, Киркоров - один фиг румын, но форма обработки это не форма элемента справочника серии. Ладно, у нас есть форма обработки. На ней есть ссылка на ордер. Далее нужно обновить справочник серии, а именно реквизит ГоденДо, исходя из значений реквизита ГоденДо табличной части Товары документа Ордер? Все, телепатические способности покинули меня. Но было интересно |
|||
28
GedKo
26.11.22
✎
01:02
|
(26) так ты понял свою ошибку? :)
|
|||
29
Barry
26.11.22
✎
01:03
|
(27) именно так)
|
|||
30
Barry
26.11.22
✎
01:05
|
(28) ошибку понял, но не совсем понимаю как ее исправить
|
|||
31
GedKo
26.11.22
✎
01:07
|
плохо :( ПолучитОбъект() - делаем к ссылке, в которой меняем значение
//ДокОбъект = Объект.Документ.ПолучитьОбъект(); ТЧСрокГодности = Объект.Инфо; Для Каждого Стр Из ТЧСрокГодности Цикл о = стр.Серия.ПолучитьОбъект(); //Стр.ГоденДо = Объект.СрокГодности; о.ГоденДо = Объект.СрокГодности; о.Записать(); КонецЦикла; //ДокОбъект.Записать(); |
|||
32
Тындр
26.11.22
✎
01:18
|
(31) Есть замечание - не называть переменные однобуквами. И плохой тон, и не понятно, и опасно.
Особенно для новичков |
|||
33
Barry
26.11.22
✎
01:22
|
(31) Немного подправил и понял теперь чего не хватало. Мне просто в цикле нужно было еще раз обратиться к методу "Получить объект" для серии. Спасибо вам за помощь!)
|
|||
34
Тындр
26.11.22
✎
01:25
|
(33) Значит таки порог вхождения преодолен. Велкам!
|
|||
35
GedKo
26.11.22
✎
01:44
|
(32) в этом коде столько прекрасного - что "о" нужно замечать в самую последнюю очередь. ну или другие недостатки не видны :))
|
|||
36
Тындр
26.11.22
✎
01:55
|
(35) Пофиг. Барри понял - это главное. ))
|
|||
37
GedKo
26.11.22
✎
02:00
|
>нужно было *еще раз* обратиться к методу "Получить объект"
ни черта он не понял :) я уж не говорю про n-ую перезапись серии, если она в нескольких строках встречается |
|||
38
Barry
26.11.22
✎
02:15
|
(37) так мне и нужно было сделать перезапись во всех строках табличной части)
|
|||
39
GedKo
26.11.22
✎
02:41
|
т.е. если в документе серия встречается 1000 раз - мы тысячу раз выполним одно и тоже? нормально, да.
и вообще, никакой перезаписи строк табличной части ты не делаешь. используй (22). только честно - т.е. выход из цикла только когда дойдет :) |
|||
40
Остап Ибрагимович
26.11.22
✎
05:37
|
При чем тут форма?
Вам надо изменить данные. Перебрать строки таб.части документа, по каждой строке таб.части: 1) найти объект прописанной в этой строке ссылки на Серию (элемент справочника, судя по скрину) 2) в этом объекте установить в реквизит ГоденДо значение, прописанное в реквизите ГоденДо этой строки табличной части документа 3) сохранить измененный таким образом объект. Только вот если вдруг какой-то документ тоже изменит эти же самые элементы справочника - как вы определите, какие изменения "правильнее"? |
|||
41
Barry
26.11.22
✎
14:24
|
(39) Да, но мы же в рамках одного документа. Но вот насчет того, что в самой табличной части дата не поменялась здесь вы правы) В серию то записалась, но в табличной части документа остался висеть старый срок годности.
|
|||
42
Barry
26.11.22
✎
18:28
|
(39) Сделал проще. Вывел на форму выбор серии, циклом прошелся для каждой строчки. Метод ПолучитьОбъект() присвоил для своего документа который указывал на форме и запись. Итог запись пошла срока годности как и в саму серию так и в табличную часть документа. Вопрос закрыт! Всем спасибо!)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |