Имя: Пароль:
1C
1С v8
Вызов процедуры из внешней обработки
0 EKO LX
 
10.10.12
10:43
УТ 81, документ ЧекККМ. нужно нажать на кнопку "КнопкаОплатаБезСдачи" Делаю так:

Фрм = Результат.ДокументСсылка.ПолучитьФорму("ФормаДокумента");
Фрм.ВидОплаты = Справочники.ВидыОплатЧекаККМ.Наличные;
Фрм.КнопкаОплатаБезСдачиНажатие();
Фрм.ЗаписатьВФорме(РежимЗаписиДокумента.Запись);
Сообщить(Результат.ДокументСсылка);

ругается что
{Форма.Форма(51)}: Недостаточно фактических параметров
    Фрм.КнопкаОплатаБезСдачиНажатие();

какие фактические параметры? помогите пожалуйста, очень нужно
1 ZanderZ
 
10.10.12
10:44
Фрм.КнопкаОплатаБезСдачиНажатие("");
2 Нуф-Нуф
 
10.10.12
10:44
открой обработку, и посмотри какие параметры должны быть на входе в процедуру Фрм.КнопкаОплатаБезСдачиНажатие
3 Нуф-Нуф
 
10.10.12
10:45
(1) скорее всего
4 EKO LX
 
10.10.12
10:50
вот сама процедура

Процедура КнопкаОплатаБезСдачиНажатие(Элемент) Экспорт

   Если ПереключательОплатаПростая Тогда
       СуммаОплаты = Товары.Итог("Сумма");

       ПриИзмененииСуммыОплаты();
   Иначе
       Предупреждение("Оплата редактируется в списке!");
   КонецЕсли;

КонецПроцедуры // КнопкаОплатаБезСдачиНажатие()
5 Нуф-Нуф
 
10.10.12
10:51
(4) и? никакие мысли в голову не приходят?
см (1)
6 EKO LX
 
10.10.12
11:03
(5) дописываю Элемент - КнопкаОплатаБезСдачиНажатие(Элемент)
конфа ругается на
{Форма.Форма(51,35)}: Переменная не определена (Элемент)
    Фрм.КнопкаОплатаБезСдачиНажатие(<<?>>Элемент);
делаю ее переменной в начале модуля, проверяю
в пользовательском режиме при переходе к каждому документу появляется та самая предупреждение("оплата редактируется в списке!");
а потом
{Форма.Форма(52)}: Ошибка при вызове метода контекста (ЗаписатьВФорме): Операция не выполнена!
    Фрм.ЗаписатьВФорме(РежимЗаписиДокумента.Запись)
7 Нуф-Нуф
 
10.10.12
11:04
сделай так и не парь мозг

Фрм = Результат.ДокументСсылка.ПолучитьФорму("ФормаДокумента");
Фрм.ВидОплаты = Справочники.ВидыОплатЧекаККМ.Наличные;
Фрм.КнопкаОплатаБезСдачиНажатие("");
Фрм.ЗаписатьВФорме(РежимЗаписиДокумента.Запись);
Сообщить(Результат.ДокументСсылка);
8 EKO LX
 
10.10.12
11:43
(7) так тоже пробовал, она эту процедуру вызывает так как выходит та предупреждение из процедуры, и то это предупреждение появляется при переходе на те документы у которых это поле заполнено, затем выдает ошибку "Сумма всех типов оплат меньше суммы документа" и
{Форма.Форма(52)}: Ошибка при вызове метода контекста (ЗаписатьВФорме): Операция не выполнена!
    Фрм.ЗаписатьВФорме(РежимЗаписиДокумента.Запись);
9 1Страх
 
10.10.12
11:44
кто ее сделал экспортной, вот вопрос
давай доламывай дальше:

Процедура КнопкаОплатаБезСдачиНажатие(Элемент=Неопределено) Экспорт
10 1Страх
 
10.10.12
11:45
кто придумал так записывать объекты?
11 EKO LX
 
10.10.12
11:47
(10) так тоже не идет
12 EKO LX
 
10.10.12
11:48
(10) а что ни так?
13 Kreont
 
10.10.12
11:51
(0) Так вставь себе весь код из процедуры: КнопкаОплатаБезСдачиНажатие
а для ПриИзмененииСуммыОплаты() добавь Экспорт

или

наоборот:
В проц.КнопкаОплатаБезСдачиНажатие добавь процедуру
КодКнопкаОплатаБезСдачиНажатие();//Экспортную только сделай ее
и в нее впихни все из КнопкаОплатаБезСдачиНажатие
14 EKO LX
 
10.10.12
11:56
(13) первый вариант я так и сделал, саму процедуру Экспорт и вызываю ее из внешней обработки. не идет. а второй вариант не понял, можно по подробней?
15 hhhh
 
10.10.12
11:59
(14) а чего вы эту процедуру смотрите? У вас ведь ошибка в ЗаписатьВФорме? Там и смотрите.
16 Kreont
 
10.10.12
11:59
(14) Типа так:
Процедура КнопкаОплатаБезСдачиНажатие(Элемент)

КнопкаОплатаБезСдачиНажатиеСделать();

КонецПроцедуры // КнопкаОплатаБезСдачиНажатие()

Процедура КнопкаОплатаБезСдачиНажатиеСделать() Экспорт

   Если ПереключательОплатаПростая Тогда
       СуммаОплаты = Товары.Итог("Сумма");

       ПриИзмененииСуммыОплаты();
   Иначе
       Предупреждение("Оплата редактируется в списке!");
   КонецЕсли;

КонецПроцедуры

и вызывай уже у себя во внешн.обработке :
Фрм.КнопкаОплатаБезСдачиНажатиеСделать()
17 EKO LX
 
10.10.12
12:08
(16) не идет может действительно в методе записи проблема. я проверял без вызова процедуры другие операции обработка делает и записывает
18 osa1C
 
10.10.12
12:15
ПриИзмененииСуммыОплаты() копать надо
19 EKO LX
 
10.10.12
12:18
Фрм = Результат.ДокументСсылка.ПолучитьФорму("ФормаДокумента");
Фрм.ВидОплаты = Справочники.ВидыОплатЧекаККМ.Наличные;
Фрм.КнопкаОплатаБезСдачиНажатие("");
Фрм.Записать(РежимЗаписиДокумента.Запись);
Сообщить(Результат.ДокументСсылка);

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

Иначе
       Предупреждение("Оплата редактируется в списке!");
КонецЕсли;
20 hhhh
 
10.10.12
12:20
(19) попробуй всё-таки

Фрм = Результат.ДокументСсылка.ПолучитьОбъект().ПолучитьФорму("ФормаДокумента");
21 EKO LX
 
10.10.12
12:21
не знаю как просто нужно сделать так чтобы было

Если ПереключательОплатаПростая Тогда

в этом случаи думаю он заполнит
22 hhhh
 
10.10.12
12:22
(21) ну вы же получаете

Фрм = Результат.ДокументСсылка.ПолучитьФорму("ФормаДокумента");

абсолютно чистую форму, без данных.
23 EKO LX
 
10.10.12
12:23
(20) нет, не идет. о пять это предупреждение((
24 Kreont
 
10.10.12
12:23
Может так задать перед вызовом:
Фрм.ПереключательОплатаПростая = Истна
25 EKO LX
 
10.10.12
12:25
(20) нет, не идет. опять выдает это предупреждение((
26 EKO LX
 
10.10.12
12:28
(24) ОГРОМНОЕ ВАМ СПАСИБО!!! ПОШЛО)) ВСЕ СПАСИБО ЗА ПОМОЩЬ!!!
27 EKO LX
 
10.10.12
12:30
эхх...вид оплаты не выбирает...

Фрм.ВидОплаты = Справочники.ВидыОплатЧекаККМ.Наличные;
28 Kreont
 
10.10.12
12:39
(27) "ВидОплаты" реквизит ТЧ, а не документа
29 EKO LX
 
10.10.12
13:12
(28) так сойдет?

Для Каждого Строка Из ЧекККМ.Оплата Цикл
    Если НЕ ЗначениеЗаполнено(Строка.ВидОплаты) Тогда    
    Оплата = Справочники.ВидыОплатЧекаККМ.Наличные;    
    Строка.ВидОплаты = Оплата;
    КонецЕсли;
    КонецЦикла;
30 EKO LX
 
10.10.12
13:14
Когда идет два цикла при закрытии циклов порядок какой, сверху вниз или снизу вверх?
31 Kreont
 
10.10.12
13:15
Вроде да, ну для оптимизации можно:
"Оплата = Справочники.ВидыОплатЧекаККМ.Наличные;"
вверх за цикл вынести, но компы и так минимум 2-ядерные, потянут...

(30) LIFO :)
32 1Страх
 
10.10.12
13:20
(30) что такое закрытие цикла?
33 EKO LX
 
10.10.12
13:22
(32) конеццикла
34 EKO LX
 
10.10.12
13:23
(31) ясненько. спасибо еще раз!
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший