Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как программно передать реквизиты в шапку ПН?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Sede
Доброго всем дня.

1c 7.7

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


    // Заполняю табличную часть
  Для СтрокаДанных=НачалоДанных По ПоследниеДанные Цикл    
     //*** тут достаю название товаров, количестов, штуки и т.д.
     докПриходная.НоваяСтрока();
     //*** тут заполняю таблицу полученными данными
       докПриходная.Записать();
   КонецЦикла;
ЗафиксироватьТранзакцию();  
ОткрытьФорму(докПриходная.ТекущийДокумент());
////**/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/ КОНЕЦ ТРАНЗАКЦИИ


В Итоге при открытии в документе отсутствуют реквизиты шапки:

Ну оно и понятно - откуда им появиться если не передаю.
Вопросик:
1. Как правильно передать или заполнить недостающие реквизиты. С реквизитами справочник разберусь, больше интересуют ревизиты из списков, Выбор Фирмы. Некоторые реквизиты заполняются процедурами: ПриОткрытии(название фирмы, вид поставщика), ПриИзминенииКонтрагента (вид контрагента, валюта расчетов, заполняется поле курса) и т.д. Как заполнять такие поля? Судя по всему прямым назначением вроде:
 докПриходная.Резвизит=Значение;

Наверное будет неправильно.
2. Поле ВидПоставщика заполняется ПриОткрытии:
    спВидПоставщика.ДобавитьЗначение(СчетПоКоду("631"),"Отечественный поставщик");
    спВидПоставщика.ДобавитьЗначение(СчетПоКоду("632"),"Иностранный поставщик");
    спВидПоставщика.ДобавитьЗначение(СчетПоКоду("3721"),"Подотчетное лицо");
    спВидПоставщика.ДобавитьЗначение(СчетПоКоду("3772"),"Прочее");

Что тут подскажите? - Можно ли выполнить Процедуру (ПриОткрытии()) При Транзакции? Или надо заполнять поля вручную повторяя код из Процедуры ПриОткрытии()?

Всем заранее спасибо за советы. 433.gif


 ! 

Правила, п.4,5
 
Sharzem
Замечание 1:
Никакой Вам там транзакции не нужно. Сделайте вот так:
Для СтрокаДанных=НачалоДанных По ПоследниеДанные Цикл
    //*** тут достаю название товаров, количестов, штуки и т.д.
    докПриходная.НоваяСтрока();
    //*** тут заполняю таблицу полученными данными
    //!!!Зачем в цыкле запись???       докПриходная.Записать();
КонецЦикла;
//Добавте проверку на количество строк
Если докПриходная.КоличествоСтрок() > 0 Тогда
    докПриходная.Записать();
    ОткрытьФорму(докПриходная.ТекущийДокумент());
КонецЕсли;


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


ВыполнитьПроцедуру(<?>,,)
Синтаксис:
ВыполнитьПроцедуру(<Контекст>,<ИмяПроцедуры>,<СписокАргументов>)
Назначение:
Метод предназначен для выполнения процедуры в заданном контексте.
Возвращает 1 в случае успеха, 0 - в противном случае.
ПРИМЕР:
Перем Конт;
Сервис = СоздатьОбъект("Сервис");
ОткрытьФорму(Обработка.Демо, Конт);
Список = СоздатьОбъект("СписокЗначений");
Список.ДобавитьЗначение("Первый параметр");
Список.ДобавитьЗначение("Второй параметр");
Список.ДобавитьЗначение("Третий параметр");
Сервис.ВыполнитьПроцедуру(Конт, "Выполнить2


Но, Вы сами подумайте, зачем выполнять предопределенную процедуру ПриОткрытии(), если она в любом случае сработает и выполнит то что там написано ?
Sede
Sharzem Спасибо!
Касательно Транзакции - нашел в интернете пример, и по примеру обработки писал свою, Так что можно сказать просто продублировалось. Ну раз не надо значит поправлю.
Насчет
докПриходная.Записать();

уже тоже разобрался, думал это записывается строка оказалось - сохраняется вся приходная. Уже поправил.

За Листинг "Выполнения процедуры" - отдельное Большое спасибо. "Зеленому" вроде меня как раз то что надо. 12201689.gif

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.