Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Какой параметр передать в форму документа, чтобы нажать кнопку Записать Провести Закрыть?

Какой параметр передать в форму документа, чтобы нажать кнопку Записать Провести Закрыть?
Я
   МимохожийОднако
 
24.12.21 - 11:12
6. Есть другие пути67% (2)
1. Такое невозможно33% (1)
2. Надо искать экспортную процедуру формы0% (0)
3. Без расширения не обойтись0% (0)
4. Надо сляпать скрипт нажатия кнопок0% (0)
5. Использовать режим сценарного тестирования0% (0)
Всего мнений: 3

Сегодня неожиданно поступил от клиента данный вопрос. Конфигурация КА 2.4. Хотят провести некий массив через открытие формы по кнопке ОК.
Я не смог ответить сходу. Надеюсь в пятницу будет счастье.
   МимохожийОднако
 
1 - 24.12.21 - 11:13
Я "не шмогла"

1. Такое невозможно
   Ёпрст
 
2 - 24.12.21 - 11:13
(0) а форму то нахрена открывать ?
Гений1с покусал там кого ?
   PuhUfa
 
3 - 24.12.21 - 11:14
(0) Кнопка "ОК" это чья кнопка?
   youalex
 
4 - 24.12.21 - 11:14
ЗаписатьВФорме(<РежимЗаписи>)  ?
   МимохожийОднако
 
5 - 24.12.21 - 11:14
(2)Возможно ) Общался с клиентами по удалёнке
   МимохожийОднако
 
6 - 24.12.21 - 11:16
(3) Как я понял. Это типовая кнопка "Провести и закрыть". Когда они перепроводили документы по правой клавиши из списка документов, эффект проведения был другой. А когда открывали и проводили, то "всё вставало как надо"
   PLUT
 
7 - 24.12.21 - 11:17
(2) встречал г.внокод, когда магия на клиенте в форме документа происходит по кнопке ОК :)
   Kassern
 
8 - 24.12.21 - 11:18
(6) ну так сравните чем отличаются эти 2 процесса проведения. Если там, что-то заполняется при открытии, или при записи на форме, то делайте это програмно в обработке и тупо Записать(РежимЗаписи.Проведение)
   PuhUfa
 
9 - 24.12.21 - 11:18
(6) ну тогда надо найти отличие в "проведении" из формы... исправить этот г.внокод, взять за это 2500руб/час и не пытаться допиливать "это" -)
   Ryzeman
 
10 - 24.12.21 - 11:19
Посмотреть что за хрень наколхозили на форме и выкинуть в нормальную подписку на событие. Програмное открытие формы и нажатие "ок" - это бороться с огнём маслом.

6. Есть другие пути
   Kassern
 
11 - 24.12.21 - 11:20
(8) Самый простой способ, посмотрите как заполнен ЭтотОбъект в модуле объекта при записи из формы и как он заполнен при записи программно

6. Есть другие пути
   Базис
 
12 - 24.12.21 - 11:21
По-правильному, конечно, так как сказали коллеги.

Тяп-ляп - VBS с примерно таким кодом:

пауза, цикл, Sendkey [Ctrl+Enter] с задержкой, Sendkey [Down].
   МимохожийОднако
 
13 - 24.12.21 - 11:21
(10) По словам клиентов, всё типовое. Как будет доступ к базе-посмотрю, проверю. А какая подписка наиболее близка к данной ситуации?
   pechkin
 
14 - 24.12.21 - 11:26
Форма.Записать(СтруктураПараметров)
   pechkin
 
15 - 24.12.21 - 11:27
Классический дымовой тест
   МимохожийОднако
 
16 - 24.12.21 - 11:27
(4) Кстати. Открыл типовую демо КА2.4 и нашёл в общем модуле ОбменСКонтрагентамКлиент любопытный кусочек
#Если ТолстыйКлиентОбычноеПриложение Тогда

        РезультатПроверки = Неопределено;
        ОбменСКонтрагентамиКлиентПереопределяемый.ОбъектМодифицирован(Объект, Форма, РезультатПроверки);
        Если РезультатПроверки = Неопределено Тогда
            
            Если Форма.Модифицированность ИЛИ НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
                
                Проведен    = Метаданные.Документы.Содержит(Объект.Метаданные()) И Объект.Проведен;
                СтрПроведен = ?(Проведен, НСтр("ru = 'записать и провести.
                |Записать и провести?'"), НСтр("ru = 'записать.
                |Записать?'"));
                
                ШаблонСообщения = НСтр("ru = 'Документ изменен. Для формирования электронного документа его необходимо %1'");
                ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, СтрПроведен);
                
                ДополнительныеПараметры = Новый Структура();
                ДополнительныеПараметры.Вставить("СсылкаНаОбъект", Объект.Ссылка);
                ДополнительныеПараметры.Вставить("ИмяКоманды", ИмяКоманды);
                ДополнительныеПараметры.Вставить("Форма", Форма);
                ДополнительныеПараметры.Вставить("Проведен", Проведен);
                
                Обработчик = Новый ОписаниеОповещения( "ЗаписатьВФорме", ЭтотОбъект, ДополнительныеПараметры);
                
                ПоказатьВопрос( Обработчик, ТекстВопроса, РежимДиалогаВопрос.ОКОтмена, , КодВозвратаДиалога.Отмена,
                    НСтр("ru = 'Документ изменен.'"));
                
            КонецЕсли;
        КонецЕсли;
    #КонецЕсли
   МимохожийОднако
 
17 - 24.12.21 - 11:28
(14) А что положить в СтруктураПараметров?
   pechkin
 
18 - 24.12.21 - 11:34
(17) РежимЗаписи, РежимПроведения
   Ryzeman
 
19 - 24.12.21 - 11:35
(13) Смотря что "встаёт". Если там автоматически заполняются какие-то обязательные реквизиты, то ПередЗаписью, наверное. Никто же пока не знает что там у них не так в принципе и в чём разница между проведением через форму и не через форму.

А то, что проведение отличается в типовой - как-то совсем невероятно. Я с типовой КА не имел дел, но отказываюсь верить, что 1с могут написать так криво.
   Kassern
 
20 - 24.12.21 - 11:36
(12) Вот вам пятничное решение на питоне))
x, y = pyautogui.position()
pix = pyautogui.pixel(x, y)
Получили координаты и цвет пикселя нужного (кнопка провести и закрыть). А дальше все просто, передаем комбинацию ктрл+ентер, либо курсор наводим и кликаем программно. После этого проверяем по пикселю, что открылась форма списка и передаем вниз и энтер и ищем снова кнопку провести и закрыть. Лучше конечно еще номер с датой проверять - делаем скрин области даты и номера документа и сравниваем с текущим номером и датой, если коэфицент совпадения больше определенного числа, то прерываем цикл.
   pechkin
 
21 - 24.12.21 - 11:37
(20) тогда уж лучше opencv и поиск кнопки закрыть
   Kassern
 
22 - 24.12.21 - 11:38
(21) пиксель по координатам быстрее находится, чем саму кнопку искать
   PLUT
 
23 - 24.12.21 - 11:41
(21) обычный биоробот из бухгалтерии справится. зачем такие сложности?
   Kassern
 
24 - 24.12.21 - 11:43
(23) тут написать то мин 15-20. А биороботу еще платить надо, да и подзабить на работу может
   youalex
 
25 - 24.12.21 - 11:51
(16) не взлетает без соответствующего экспортного метода.
А если метод есть, то можно его напрямую дергать.
В качестве бреда - можно форму документа скопировать в обработку, а там в цикле менять объект (ЗначениеВРеквизитОбъекта) и ЗаписатьВФорме() )  Так и наглядно будет все
   Kassern
 
26 - 24.12.21 - 11:52
(25) еще больше пятничных костылей в студию)
   Ryzeman
 
27 - 24.12.21 - 11:53
(26) Програмно нажимать Tab и считывать активный элемент. Если он является кнопкой, прочитать его заголовок, если там "ок", то програмно послать Enter
   Kassern
 
28 - 24.12.21 - 11:54
(27) это только для 1 документа, а нужно обойти динамический список и провести все там)
   ptiz
 
29 - 24.12.21 - 13:13
(16) Ну да, там в итоге и вызывается методе формы: Форма.ЗаписатьВФорме()
   ptiz
 
30 - 24.12.21 - 13:14
Но это только для толстого клиента
 
 
   pechkin
 
31 - 24.12.21 - 13:26
(29) Но зачем, когда можно просто Записать()
   ptiz
 
32 - 24.12.21 - 13:34
(31) ЗаписатьВФорме() вызывает срабатывание обработчиков формы ПередЗаписью, ПриЗаписи, ПослеЗаписи


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.