Имя: Пароль:
1C
1С v8
Как програмно записать изменённые реквизиты у существующего документа
0 Asadoff
 
18.05.12
13:29
Не нашел нужного ответа, может ещё не научился как следут искать, но "я не волшебник - я только учусь!"

Есть Документ ПриходОтУслуг у него есть табличная часть ПриходПоКлиентам
в ней реквизиты Контрагент, Договор, НомерДоговора, ДатаДоговора ....
Этот документ играет роль реестра, и при проведении создаются документы:
Соглашение, СчётКОплате, Квитанция и др...


//Вот отрывок из процедуры проведения ПриходОтУслуг
НовыйДок = Документы.Соглашение.СоздатьДокумент();
НовыйДок.Дата = ТекСтрокаПриходПоКлиентам.ДатаДоговора;
НовыйДок.ДатаДоговора = ТекСтрокаПриходПоКлиентам.ДатаДоговора;
НовыйДок.Номер = ТекСтрокаПриходПоКлиентам.НомерДоговора;
НовыйДок.НомерДоговора = ТекСтрокаПриходПоКлиентам.НомерДоговора;
НовыйДок.Контрагент = ТекСтрокаПриходПоКлиентам.Контрагент;
НовыйДок.ВидДела = ТекСтрокаПриходПоКлиентам.ВидДела;
НовыйДок.Сумма = ТекСтрокаПриходПоКлиентам.Сумма;
НовыйДок.УстановитьВремя();
НовыйДок.УстановитьНовыйНомер();
Документ.Записать(РежимЗаписиДокумента.Запись);
//Конец отрывка

Всё дыло бы здорово, но при обнаружении ошибки, и повторном перепроведени такой код создаёт новые документы.
Если закомментировать строки:
//НовыйДок.УстановитьВремя();
//НовыйДок.УстановитьНовыйНомер();
новые не существующие ещё документы создаются нормально при первом проведении,
а вот при повторном проведении выдаётся ошибка "Номер не уникален..."

Какой код написать чтобы сбновить (изменить) содержание реквизитов
уже существующих документов?

(если это повтор, прошу прощения заранее, и попрошу ссылку на ответ)
1 rotting
 
18.05.12
13:31
нужно сначала получить ДокументОбъект, изменить в нем нужные реквизиты, а потом записать
2 Asadoff
 
18.05.12
13:33
Это должно быть проверкой перед записью?
3 rotting
 
18.05.12
13:35
НовыйДок = Документы.Соглашение.СоздатьДокумент();

В этой строчке у тебя всегда будет создаваться новый объект.

А вообще при проведении нельзя создавать документы. Бить по рукам за такое надо
4 DrShad
 
18.05.12
13:36
еще раньше
5 rotting
 
18.05.12
13:36
Теперь у тебя наверное при перепроведении бока и лезут....
6 n koretsky
 
18.05.12
13:36
ну, как минимум, в коде я не увидел того, что база както узнаёт о том, что она создала документ в комплекте с тем, который проводишь...
7 rotting
 
18.05.12
13:37
господа, не советуйте ему ничего пока не уберет "при проведении создаются документы"
8 Asadoff
 
18.05.12
13:38
Бух долго работал в Екселе она хочет "набить таблицу поступления от физлиц" и "нажать на кнопочку",
всё было бы здорово, если бы "таблица" не нуждалась в редактировании (((
9 n koretsky
 
18.05.12
13:38
(7) согласен в какойто степени
10 Ksandr
 
18.05.12
13:39
Приход риальне наступает?
Вздръжне эффект?

Создать реквизит ДокументОснование, писать ссылку на приход туда, перед созданием запросом получать документ, если нет - создавать
11 DrShad
 
18.05.12
13:40
(8) сам то где до этого долго работал?
12 n koretsky
 
18.05.12
13:41
(10) все испортил. я его на эту мысль толкал, чтоб он сам понял. а ты взял все сам рассказал. эх.
13 ЧеловекДуши
 
18.05.12
13:44
Зачем тебе вейлосипед :)
Поройся в конфе УТ11, там есть механизм Истории изменения документов.
14 Asadoff
 
18.05.12
13:44
В течении недели данные по приходу могут меняться несколько раз, и ГлБух задаёт такой вопрос: "Чтобы не было расхождений в пяти разных документах одних и тех же данных, можно сделать путём перепроведения одного табличного документа для синхронизации всех остальных?"

Вопрос с точки зрения ГлБуха выглядит логичным...
15 Maxus43
 
18.05.12
13:47
(14) кури как при проведении РТУ например синхронизирует документы Счет фактура
16 Asadoff
 
18.05.12
13:48
Я до этого работал на велосипедной фабрике, изобретал велосипед. А в одинэс пошел самоучкой (пока не дошел)))
17 ЧеловекДуши
 
18.05.12
13:58
>>> Какой код написать чтобы сбновить (изменить) содержание реквизитов
уже существующих документов?

Убрать строки:
НовыйДок = Документы.Соглашение.СоздатьДокумент();
...
НовыйДок.УстановитьВремя();
НовыйДок.УстановитьНовыйНомер();

Добавить проверку на то, что все таки документ, не новый.
18 ЧеловекДуши
 
18.05.12
13:59
(16)Очень жаль, жаль что вы покинули веЙлосипедную фабрику :)
19 Asadoff
 
18.05.12
14:09
Благодарю за поддержку и подсказки, пошел все это переварить...
20 n koretsky
 
18.05.12
15:15
тут не переваривать, тут переписывать надо
21 Asadoff
 
19.05.12
21:07
(15) Про РТУ не совсем понял поясни плиз подробней.
22 Asadoff
 
19.05.12
21:12
(17) это я сразу понял, только не нашел как правильно составить запрос.
23 Asadoff
 
19.05.12
21:14
(20) если не надо бы переписывать, я бы и не спрашивал)))
но задача в целом ведь разрешима, просто нужна помощь в написание запроса проверки наличия записанного документа.
24 Asadoff
 
19.05.12
21:18
(18) на тему веЙлосипедной фабрики :) согласен!
но, можно подумать, что все, кто на этом форуме обладают регалиями и опытом таковыми родились)))

(что делать я понимал с самого начала, вопрос не в этом, и даже не в том, что это криво или ровно, вопрос в том "как" это реализовать?)
25 hhhh
 
19.05.12
22:29
ну если пустая клетка в таблице, то нужно создать документ, если уже заполнена, то создавать не надо, просто получить объект. Ну это же элементарно.
26 Asadoff
 
19.05.12
23:00
Вот этого элементарного я пока и не понимаю

//запрос типа
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
|Соглашение.ДокументОснование.Ссылка
|ИЗ
|Документ.Соглашение КАК Соглашение
|ГДЕ
|Соглашение.ДокументОснование ССЫЛКА Документ.ПриходОтУслуг
|И Соглашение.ДокументОснование <> ЗНАЧЕНИЕ(Документ.ПриходОтУслуг.ПустаяСсылка)";
//

а как дальше его обрабатывать не понятно
27 Asadoff
 
19.05.12
23:02
(может предложить одминистрации форума запретить недоучкам регистрацию? а то ходят с элементарными вопросами, портят сайт где полно обсуждений про хокей комплексы и другие важные темы..)
28 Asadoff
 
19.05.12
23:24
можете написать три строчки кода - напишите.
Не можете (не хотите) не пишите, я спросил "как?"
В результате получил двадцать ответов на вопрос "что?"
29 Asadoff
 
19.05.12
23:42
Летят доктор Ватсон и Шерлок Холмс на воздушном шаре. Заблудились в тумане. Вдруг видят внизу какого-то пастуха. Кричат ему:
- Любезнейший, скажите, пожалуйста, где мы находимся?
На что тот отвечает:
- Вы находитесь на воздушном шаре!
- Все ясно. - сказал Холмс. - Мы находимся в России.
- Но, почему? - спросил Ватсон.
- Элементарно! Только програмист мог дать такой точный и, в тоже время, такой бесполезный ответ, и только в России програмист может работать пастухом.
30 Has
 
19.05.12
23:55
(26) выгрузить в ТЗ
31 FIXXXL
 
20.05.12
17:59
научите не создавать доки при проведении основного дока?
32 Asadoff
 
20.05.12
20:00
Может перебор из выборки на дату устроить

//
ДокВыборка = Документы.Соглашение.Выбрать(ТекСтрокаПриходПоКлиентам.ДатаДоговора,ТекСтрокаПриходПоКлиентам.ДатаДоговора);
Пока ДокВыборка.Следующий() Цикл
//
Только я не нашел как проверить пустую выборку
и как проверить отсутствие записанного документа

(стаж 2 недели обучения напишите две строчки кода плизз)
33 hhhh
 
20.05.12
20:01
Если ЗначениеЗаполнено(ТвоеПолеГдеДокумент) Тогда
34 Asadoff
 
20.05.12
20:41
hhhh Спасибо Огромное!!!
за (33) всё заработало отлично
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший