![]() |
|
Модераторы: stron |
![]()
|
|
| ukrop |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 20.6.2010 Репутация: нет Всего: нет |
Здравствуйте.
Пытаюсь во внешней обработке создать документ 1с (версия 8.1 предприятие). После записи документа и закрытия его в процедуре не происходит записи всех атрибутов в базу. У меня во внешней обработке есть одна форма с одной кнопкой, которая вызывает при нажатии процедуру: Процедура СоздатьНажатие(Элемент) док = Документы.ПриходныйКассовыйОрдер.СоздатьДокумент (); // Тут я записываю номер-дату, они дальше остаются правильными, номерация и время соответствуют. док.Дата = ТекущаяДата (); док.УстановитьВремя( РежимАвтоВремя.ТекущееИлиПоследним ); док.УстановитьНовыйНомер(); док.ВидОперации = Перечисления.ВидыОперацийПКО.РасчетыПоКредитамИЗаймамСКонтрагентами; // Это, насколько я нагуглил, нужно для того, чтобы начали действовать обработки событий ф = док.ПолучитьФорму( "ФормаДокумента", ЭтаФорма ); ф.Открыть (); // Вот эта строчки срабатывает полностью. ф.Организация = Справочники.Организации.НайтиПоКоду( "000000001" ); // Эти строчки хотя-бы остаются в документе после записи. ф.ОтражатьВНалоговомУчете = ЛОЖЬ; ф.Контрагент = Справочники.Контрагенты.НайтиПоКоду( "000000001" ); // Эти уже совсем не работают. В дебуггере происходит изменение как в "ф", так и в "док", а документе после повторного открытия ничего нет. ф.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС; ф.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду( "643" ). ф.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.КассаОрганизации; док.Записать (); // форма.Закрыть(); КонецПроцедуры Для проверки я во все события, которые должны происходить, я вставил текст вида Сообщить( "ПКО::ОрганизацияПриВыборе" ); И также по всем остальным событиями, которые по логике должны вызываться. Если я щелкаю мышкой и клавиатурой, то события происходят в нужное время, пересчитывают все, что нужно, сообщения пишутся. А в том коде, кторый я привел, происходит только "ОрганизаяПриВыборе" и "ПриЗаписи". Между ними по логике должно быть "ОтражатьВНалоговомУчетеПриИзменении", "КонтрагентПриИзменении", "СтавкаНДСПриИзменении" и дальше. Ничего не происходит. Насколько я сейчас понимаю, я создаю наверное не обьект, а копию, что-ле. Поэтому критичные поля типо даты-времени-ид и организации (она индексируема) пишутся быстро и напрямую в базу, вызываются события. А остальные поля не критичны и не происходит ничего. Это максимум, до чего я дошел. Помогите пожалуйста написать эту обработку Это сообщение отредактировал(а) ukrop - 20.6.2010, 00:32 |
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: 15 Всего: 24 |
Не записываются потому что ты изменения вносишь в форме документа, а не в объекте. А записываешь потом сам объект в котором как не было изменений, так и нету.
В твоём случае форму получать вообще ненужно. А вторая ошибка это то, что ты не проверил данные. Там есть как реквизиты шапки и есть табличная часть. Те данные которые относятся к табличной части, нужно вносить по особенному
|
|||
|
||||
| ukrop |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 20.6.2010 Репутация: нет Всего: нет |
В этом документе нет табличной части. Вернее в дизайнере если посмотреть на форму, видно, что есть как табличная часть, так и просто несколько полей (если считается одна строка) на разных панелях. Если я вношу документ руками и мышкой, то мне видны именно поля для ввода, а не табличная часть.
В дебуггере в этих, вручную заполненных полях появляются все данные.
Если не создававь форму, то не идут события вида ПриИзменении, то есть к примеру при внесении контрагента должно самостоятельно выбираться поле Договор (там событие есть) и оно не происходит. Как я выше писал, должны были пройти несколько событий "ПриИзменении". А происходит только одно "ОрганизаяПриВыборе".
В независимости от того, куда я вношу данные, в "Ф" или в "док", данные все равно наполовину не сохраняются, так что разницы нету. Сейчас поменял "ф" на "док" и проверил. Нет разницы Вот мой текущий код:
Это сообщение отредактировал(а) ukrop - 20.6.2010, 10:12 |
||||||
|
|||||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: 15 Всего: 24 |
От того что они тебе не видны, не означает что их нету. Если хочешь управлять "внутренним" представлением документа в информационной базе, тогда нужно ориентироваться именно данными объекта а не формы. Естественно... заполнение договора и т.п. нужно делать также средствами встроенного языка, например:
|
|||
|
||||
| ukrop |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 20.6.2010 Репутация: нет Всего: нет |
Ура, я понял, как заносить реквизиты в табличную часть. Вы были правы, надо было вносить ее именно туда
В том коде, который я прислал последним, надо заменить
На
Случайно заметил, что ПриОткрытии создает одну строчку А про события все равно не понятно - почему ПриИзменении идет только на поле Организация, а на остальыне нет. Не хочется переписывать (копипастить) весь код событий. Единственная разница это то, что организация индексируема. Больше вроде никакой разницы нет. |
||||
|
|||||
| Zero |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: 15 Всего: 24 |
Это в случае, если строка заранее каким-то образом уже добавлена. По умолчанию новые документы её не имеют.
Посмотри обработчик события документа "ВводНового", возможно там указан вызов процедуры ЗаполнениеШапки. Быть может от туда он и заполняет организацию |
||||
|
|||||
| ukrop |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 20.6.2010 Репутация: нет Всего: нет |
Тут я теперь проверяю на количество. Если ноль - создать, иначе получить первую строку. В конструкторе так-же происходит.
Я не нашел его. Событие ОрганизацияПриИзменении и впрямь вызывается не за счет смены поля, а в конструкторе формы. Мдя. По ходу придется делать маленький копипаст для всех обработчиков. Спасиба за помощь |
||||
|
|||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: 15 Всего: 24 |
Обычно стандартные процедуры связанные с заполнением "стандартных" реквизитов документов находятся в общих модулях в виде процедур. Им в качестве параметров передаётся контекст объекта и таким образом наборы одинаковых строк текста писать не приходится. Ну если у тебя своеобразная задача связанная с заполнением реквизитов документа, тогда можешь их заполнить по своему. |
|||
|
||||
| ukrop |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 20.6.2010 Репутация: нет Всего: нет |
К сожалению, большая часть методов тут описаны в локальной форме. Так что только большой копипаст (хотя буду смотреть, может обработчик ничего и не делает с документом).
Все равно - спасибо за помощь |
|||
|
||||
![]()
|
| Правила форума "1C: Предприятие, SAP, ERP и учётные системы" | |
|
|
Запрещается! 1. Обсуждение крэков, кейгенов и других подобных программ Пробуйте искать сами или обращайтесь в приват к участникам форума. Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения. Также запрещается обсуждение проблем работы этих программ (что куда вписать, куда что скопировать и т.п...) 2. Давать ссылки на взломанные продукты
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | 1C: Предприятие, SAP, ERP и учётные системы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |