Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Как программно передать реквизиты в шапку ПН?          
Sede Подменю пользователя
сообщение 16.07.15, 10:36
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 51
Спасибо сказали: 2 раз
Рейтинг: 0

Доброго всем дня.

1c 7.7

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


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


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

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

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

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

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


 ! 

Правила, п.4,5
 


Сообщение отредактировал logist - 16.07.15, 18:30

Sharzem Подменю пользователя
сообщение 16.07.15, 17:12
Сообщение #2

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

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


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


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


Но, Вы сами подумайте, зачем выполнять предопределенную процедуру ПриОткрытии(), если она в любом случае сработает и выполнит то что там написано ?


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

Спасибо сказали: Sede,

Sede Подменю пользователя
сообщение 17.07.15, 8:15
Сообщение #3

Говорящий
***
Группа: Пользователи
Сообщений: 51
Спасибо сказали: 2 раз
Рейтинг: 0

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

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

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


Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 11.05.24, 11:32
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!