Модераторы: stron
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Внешний отчет и создание документа 
:(
    Опции темы
ukrop
Дата 20.6.2010, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



Здравствуйте.

Пытаюсь во внешней обработке создать документ 1с (версия 8.1 предприятие).
После записи документа и закрытия его в процедуре не происходит записи всех атрибутов в базу.
У меня во внешней обработке  есть одна форма с одной кнопкой, которая вызывает при нажатии процедуру:
Процедура СоздатьНажатие(Элемент)
    док = Документы.ПриходныйКассовыйОрдер.СоздатьДокумент ();
    // Тут я записываю номер-дату, они дальше остаются правильными, номерация и время соответствуют.
    док.Дата = ТекущаяДата ();
    док.УстановитьВремя( РежимАвтоВремя.ТекущееИлиПоследним );
    док.УстановитьНовыйНомер();

    док.ВидОперации = Перечисления.ВидыОперацийПКО.РасчетыПоКредитамИЗаймамСКонтрагентами;

    // Это, насколько я нагуглил, нужно для того, чтобы начали действовать обработки событий    
    ф = док.ПолучитьФорму( "ФормаДокумента", ЭтаФорма );
    ф.Открыть ();
            
    // Вот эта строчки срабатывает полностью. 
    ф.Организация = Справочники.Организации.НайтиПоКоду( "000000001" ); 

    // Эти строчки хотя-бы остаются в документе после записи.
    ф.ОтражатьВНалоговомУчете = ЛОЖЬ;        
    ф.Контрагент = Справочники.Контрагенты.НайтиПоКоду( "000000001" );

    // Эти уже совсем не работают. В дебуггере происходит изменение как в "ф", так и в "док", а документе после повторного открытия ничего нет.
    ф.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;      
    ф.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду( "643" ).
    ф.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.КассаОрганизации;
    
    док.Записать ();
        
    // форма.Закрыть();
КонецПроцедуры

Для проверки я во все события, которые должны происходить, я вставил текст вида
    Сообщить( "ПКО::ОрганизацияПриВыборе" );
И также по всем остальным событиями, которые по логике должны вызываться.
Если я щелкаю мышкой и клавиатурой, то события происходят в нужное время, пересчитывают все, что нужно, сообщения пишутся. А в том коде, кторый я привел, происходит только "ОрганизаяПриВыборе" и "ПриЗаписи". Между ними по логике должно быть "ОтражатьВНалоговомУчетеПриИзменении", "КонтрагентПриИзменении", "СтавкаНДСПриИзменении" и дальше. Ничего не происходит.

Насколько я сейчас понимаю, я создаю наверное не обьект, а копию, что-ле. Поэтому критичные поля типо даты-времени-ид и организации (она индексируема) пишутся быстро и напрямую в базу, вызываются события. А остальные поля не критичны и не происходит ничего. Это максимум, до чего я дошел.

Помогите пожалуйста написать эту обработку smile

Это сообщение отредактировал(а) ukrop - 20.6.2010, 00:32
PM MAIL   Вверх
Zero
Дата 20.6.2010, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 15
Всего: 24



Не записываются потому что ты изменения вносишь в форме документа, а не в объекте. А записываешь потом сам объект в котором как не было изменений, так и нету.
В твоём случае форму получать вообще ненужно.
А вторая ошибка это то, что ты не проверил данные. Там есть как реквизиты шапки и есть табличная часть. Те данные которые относятся к табличной части, нужно вносить по особенному smile 
Код


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

док.ВидОперации = Перечисления.ВидыОперацийПКО.РасчетыПоКредитамИЗаймамСКонтрагентами;

Док.Организация = Справочники.Организации.НайтиПоКоду( "000000001" );
Док.ОтражатьВНалоговомУчете = Ложь;
Док.Контрагент = Справочники.Контрагенты.НайтиПоКоду("000000001");
Док.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду("643");

// Это уже табличная часть
НоваяСтрокаТабЧасти = Док.РасшифровкаПлатежа.Добавить();
НоваяСтрокаТабЧасти.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
    
Док.Записать();

PM MAIL ICQ   Вверх
ukrop
Дата 20.6.2010, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



В этом документе нет табличной части. Вернее в дизайнере если посмотреть на форму, видно, что есть как табличная часть, так и просто несколько полей (если считается одна строка) на разных панелях. Если я вношу документ руками и мышкой, то мне видны именно поля для ввода, а не табличная часть.
В дебуггере в этих, вручную заполненных полях появляются все данные.

Цитата
В твоём случае форму получать вообще ненужно.

Если не создававь форму, то не идут события вида ПриИзменении, то есть к примеру при внесении контрагента должно самостоятельно выбираться поле Договор (там событие есть) и оно не происходит. Как я выше писал, должны были пройти несколько событий "ПриИзменении". А происходит только одно "ОрганизаяПриВыборе".

Цитата
Не записываются потому что ты изменения вносишь в форме документа, а не в объекте. 

В независимости от того, куда я вношу данные, в "Ф" или в "док", данные все равно наполовину не сохраняются, так что разницы нету. Сейчас поменял "ф" на "док" и проверил. Нет разницы smile

Вот мой текущий код:
Код

Процедура СоздатьНажатие(Элемент)
... Создание документа-номера-даты.
    
    // ф = док.ПолучитьФорму( "ФормаДокумента", ЭтаФорма );
    // ф.Открыть ();
                
// Если не создана форма, то не идет событие ПриИзменении. Если создана - идет.
    док.Организация = Справочники.Организации.НайтиПоКоду( "000000001" ); 
// Тут не вызывается ОтражатьВНалоговомУчетеПриИзменении, в независимости от того, создана форма или нет. 
// При интерактивном вводе все нормально.
    док.ОтражатьВНалоговомУчете = ЛОЖЬ;
// Аналогично тому, что выше.
    док.Контрагент = Справочники.Контрагенты.НайтиПоКоду( "000000001" );
// Аналогично выше.
    док.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду("643");

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



Это сообщение отредактировал(а) ukrop - 20.6.2010, 10:12
PM MAIL   Вверх
Zero
Дата 20.6.2010, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 15
Всего: 24



Цитата(ukrop @  20.6.2010,  10:12 Найти цитируемый пост)
В этом документе нет табличной части. Вернее в дизайнере если посмотреть на форму, видно, что есть как табличная часть, так и просто несколько полей (если считается одна строка) на разных панелях. Если я вношу документ руками и мышкой, то мне видны именно поля для ввода, а не табличная часть.

От того что они тебе не видны, не означает что их нету. Если хочешь управлять "внутренним" представлением документа в информационной базе, тогда нужно ориентироваться именно данными объекта а не формы.
Цитата(ukrop @  20.6.2010,  10:12 Найти цитируемый пост)
Если не создававь форму, то не идут события вида ПриИзменении, то есть к примеру при внесении контрагента должно самостоятельно выбираться поле Договор (там событие есть) и оно не происходит.

Естественно... заполнение договора и т.п. нужно делать также средствами встроенного языка, например:
Код

Док.Контрагент = <...>;
Док.Договор = Док.Контрагент.ОсновнойДоговор;
...

PM MAIL ICQ   Вверх
ukrop
Дата 20.6.2010, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



Ура, я понял, как заносить  реквизиты в табличную часть. Вы были правы, надо было вносить ее именно туда smile
В том коде, который я прислал последним, надо заменить
Код
 стр = док.РасшифровкаПлатежа.Добавить ();

На
Код
стр = док.РасшифровкаПлатежа.Получить(0);

Случайно заметил, что ПриОткрытии создает одну строчку smile Спасиба.

А про события все равно не понятно - почему ПриИзменении идет только на поле Организация, а на остальыне нет.
Не хочется переписывать (копипастить) весь код событий. Единственная разница это то, что организация индексируема. Больше вроде никакой разницы нет.
PM MAIL   Вверх
Zero
Дата 20.6.2010, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 15
Всего: 24



Цитата(ukrop @  20.6.2010,  10:50 Найти цитируемый пост)
В том коде, который я прислал последним, надо заменить
 стр = док.РасшифровкаПлатежа.Добавить ();
На
стр = док.РасшифровкаПлатежа.Получить(0);

Это в случае, если строка заранее каким-то образом уже добавлена. По умолчанию новые документы её не имеют. smile Видимо, твой документ уже какое-то событие имеет, связанное с добавлением строки табличной части.
Цитата(ukrop @  20.6.2010,  10:50 Найти цитируемый пост)
А про события все равно не понятно - почему ПриИзменении идет только на поле Организация, а на остальыне нет.

Посмотри обработчик события документа "ВводНового", возможно там указан вызов процедуры ЗаполнениеШапки.
Быть может от туда он и заполняет организацию smile 
PM MAIL ICQ   Вверх
ukrop
Дата 20.6.2010, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



Цитата
стр = док.РасшифровкаПлатежа.Получить(0);

Тут я теперь проверяю на количество. Если ноль - создать, иначе получить первую строку. В конструкторе так-же происходит.

Цитата
Посмотри обработчик события документа "ВводНового"

Я не нашел его. Событие ОрганизацияПриИзменении и впрямь вызывается не за счет смены поля, а в конструкторе формы.
Мдя. По ходу придется делать маленький копипаст для всех обработчиков.

Спасиба за помощь smile Реально ничего не получалось два дня smile
PM MAIL   Вверх
Zero
Дата 20.6.2010, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 15
Всего: 24



Цитата(ukrop @  20.6.2010,  11:25 Найти цитируемый пост)
Мдя. По ходу придется делать маленький копипаст для всех обработчиков.

Обычно стандартные процедуры связанные с заполнением "стандартных" реквизитов документов находятся в общих модулях в виде процедур. Им в качестве параметров передаётся контекст объекта и таким образом наборы одинаковых строк текста писать не приходится.
Ну если у тебя своеобразная задача связанная с заполнением реквизитов документа, тогда можешь их заполнить по своему.
PM MAIL ICQ   Вверх
ukrop
Дата 21.6.2010, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.6.2010

Репутация: нет
Всего: нет



К сожалению, большая часть методов тут описаны в локальной форме. Так что только большой копипаст (хотя буду смотреть, может обработчик ничего и не делает с документом).
Все равно - спасибо за помощь smile

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "1C: Предприятие, SAP, ERP и учётные системы"
stron

Запрещается!

1. Обсуждение крэков, кейгенов и других подобных программ

Пробуйте искать сами или обращайтесь в приват к участникам форума.

Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения.

Также запрещается обсуждение проблем работы этих программ (что куда вписать, куда что скопировать и т.п...)

2. Давать ссылки на взломанные продукты

  • Пожалуйста, пользуйтесь поиском перед тем, как задать вопрос - возможно ответ уже есть на форуме.
  • Название темы должно отражать её суть
  • Действия модераторов можно обсудить здесь

С уважением, stron, Pegas.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | 1C: Предприятие, SAP, ERP и учётные системы | Следующая тема »


 




[ Время генерации скрипта: 0.0467 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.