|   |   | 
| 
 | УФ и проведение документа 8.3 интерфейс "Такси" | ☑ | ||
|---|---|---|---|---|
| 0
    
        GhostAnton 16.10.13✎ 12:48 | 
        Суть проблемы в следующем,есть самописная конфигурация на уф 8.2, столкнулся с проблемой при переделке на уф 8.3 с интерфейсом такси. В старых уф было организовано следующее, если не заполнено поле "сумма задатка" то перед записью выдавался вопрос "Провести документ без задатка?"  в режиме да/нет, если нажимаешь да то документ проводится если нет то отказ от записи и проведения и показывался документ для корректировки.
 В режиме такси отсутствуют модальные окна и модуль продолжает выполняться когда организуешь вопрос пользователю, все бы ничего только вот этот нюанс, на вопрос еще не ответили а документ провелся уже, пробовал делать так чтоб только после ответа документ сохранялся и закрывался но провести документ не получается выдает ошибку параметра записи. Помогите правильно организовать алгоритм чтоб не делать это через одно место. &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) Если Объект.ДатаПараметра < НачалоДня(ТекущаяДата()) И Объект.Проведен = Ложь Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Исправьте дату состояния заказа!"; Сообщение.Поле = "ДатаПараметра"; //Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.ПутьКДанным = "Объект"; Сообщение.Сообщить(); //Сообщение = Новый СообщениеПользователю; //Сообщение.УстановитьДанные(Объект); //Сообщение.ИдентификаторНазначения = УникальныйИдентификатор; //Сообщение.Текст = "Исправьте дату состояния заказа!"; //Сообщение.Поле = "Объект.ДатаПараметра"; //Сообщение.Сообщить(); Отказ = Истина; Возврат; КонецЕсли; //если не введен задаток то спросить чтоно ввести документ без задатка, //если да то тогда распечатать иначе вернуться в форму и заставить ввести задаток!!! //при печати сразу проводить документ чтоб он не потерялся и вести взаиморасчеты с клиентами //в части должников на которых можно отдельно давать заказы Если Объект.Задаток = 0 И Объект.БезЗадатка = Ложь И Объект.Проведен = Ложь Тогда ТекстВопроса = НСтр("ru = 'Сохранить документ без задатка?'", "ru"); Оповещение = Новый ОписаниеОповещения( "ВопросЗакрытияДокумента", ЭтотОбъект, Отказ); ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет); Иначе //распечатаем квитанцию и пометим документ что квитанцию отпечатали на него КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ВопросЗакрытияДокумента(Результат, Параметры) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда Объект.БезЗадатка = Истина; Записать(РежимЗаписиДокумента.Проведение); //КАК СДЕЛАТЬ ПРАВИЛЬНО!!!!!!! :( Закрыть(); //ЭтотОбъект.Записать(РежимЗаписиДокумента.Проведение); //Закрыть(); //Возврат; Иначе Объект.БезЗадатка = Ложь; Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Введите сумму задатка!"; Сообщение.Поле = "Задатки"; //Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.ПутьКДанным = "Объект.Задатки[0].Сумма"; Сообщение.Сообщить(); //Возврат; КонецЕсли; КонецПроцедуры | |||
| 1
    
        GhostAnton 16.10.13✎ 14:29 | 
        Никто не сталкивался еще с этим?     | |||
| 2
    
        hhhh 16.10.13✎ 14:41 | 
        (1) ну как-то так
 Если ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда Отказ = Истина; | |||
| 3
    
        banco 16.10.13✎ 14:42 | 
        (0) После ПоказатьВопрос Отказ = Истина;     | |||
| 4
    
        GhostAnton 16.10.13✎ 14:45 | 
        В этом то все и дело что так к сожалению нельзя насколько я правильно понял
 {Документ.ЗаказТМЦ.Форма.ФормаДокументаУФ.Форма(122,8)}: Обращение к процедуре как к функции (ПоказатьВопрос) Если <<?>>ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда (Проверка: Тонкий клиент) | |||
| 5
    
        banco 16.10.13✎ 14:51 | 
        (4) не надо условие, просто после ПоказатьВопрос, Отказ =Истина; ты же в обработчике записываешь     | |||
| 6
    
        GhostAnton 16.10.13✎ 14:52 | 
        (3) да я пишу отказ истина, но дело в том что при ответе да не могу автоматом провести документ, только после второго нажатия на кнопку провести документ проводится: первый раз нажимаешь он спрашивает и устанавливает параметр а второй раз нажимаешь и он проводится и закрывается, если делаю сохранить() с режимом записи проведение, то выдает ошибку, если просто сохранить то документ записывается но не проведенный.     | |||
| 7
    
        MrStomak 16.10.13✎ 14:53 | 
        определить на форме реквизит "РезультатОтвета", перед записью если реквизит не заполнен показывать немодальный вопрос и отказываться от записи, в обработке события ответа на вопрос вызывать еще раз проведение.     | |||
| 8
    
        GhostAnton 16.10.13✎ 14:53 | 
        (5) так и делаю, но чтоб провести документ приходится второй раз нажимать на провести и закрыть после вопроса, а нужно чтоб после положительного ответа документ провелся и закрылся :(     | |||
| 9
    
        GhostAnton 16.10.13✎ 14:55 | 
        (7) У меня в модуле так и сделано и реквизит документа заведен для этого специально, как вызвать проведение программно открытого документа если Записать(РежимЗаписиДокумента.Проведение) выдает ошибку параметра :(     | |||
| 10
    
        banco 16.10.13✎ 14:57 | 
        (8) через дополнительные параметры в показатьвопрос передаешь параметрызаписи, в обработчике в ВопросЗакрытияДокумента ставишь в эту структуру флаг,что уже проверил и в ПередЗаписью проверяешь если есть этот флаг, то уже не задаешь вопрос     | |||
| 11
    
        GhostAnton 16.10.13✎ 14:59 | 
        Выдает конкретно вот это когда я пытаюсь провести, хотя синтаксис верный
 {Документ.ЗаказТМЦ.Форма.ФормаДокументаУФ.Форма(138)}: Ошибка при вызове метода контекста (Записать) Записать(РежимЗаписиДокумента.Проведение); по причине: Несоответствие типов (параметр номер '1') | |||
| 12
    
        MrStomak 16.10.13✎ 14:59 | 
        Расширение управляемой формы для документа (Managed form extension for documents)
 Записать (Write) Синтаксис: Записать(<ПараметрыЗаписи>) Параметры: <ПараметрыЗаписи> (необязательный) Тип: Структура. Структура параметров записи, которые могут быть обработаны в обработчиках событий записи. Состав параметров произвольный. Содержит предопределенные параметры записи РежимЗаписи и РежимПроведения. Предопределенные параметры передаются в метод объекта Записать. Параметры записи можно обработать в событиях формы ПередЗаписью, ПередЗаписьюНаСервере, ПриЗаписиНаСервере, ПослеЗаписиНаСервере, ПослеЗаписи. Возвращаемое значение: Тип: Булево. Истина - успешно записан; Ложь - в противном случае. Описание: Записывает объект. | |||
| 13
    
        GhostAnton 16.10.13✎ 15:03 | 
        (12) Вот то-то и оно что просто Записать() записывает документ, а вот с параметрами что его нужно провести не проводит а выдает ошибку из (11)     | |||
| 14
    
        Зойч 16.10.13✎ 15:04 | 
        делать не передзаписью, а в отдельной процедуре из которой вызывать записать()     | |||
| 15
    
        Зойч 16.10.13✎ 15:06 | 
        (13) параметры другие присмотрись     | |||
| 16
    
        GhostAnton 16.10.13✎ 15:07 | 
        (14) ответ на вопрос возвращается вообще в отдельную процедуру в которой я и пытаюсь записать сама логика у них теперь в "такси" такая     | |||
| 17
    
        banco 16.10.13✎ 15:09 | 
        (13) так передай правильный параметр     | |||
| 18
    
        GhostAnton 16.10.13✎ 15:13 | 
        (13) Не понимаю как его описать, в предыдущих версиях было Записать(РежимЗаписиДокумента.Проведение)     | |||
| 19
    
        GhostAnton 16.10.13✎ 15:14 | 
        (13) Блин что получается теперь структуру надо передавать вместо конкретно параметра???     | |||
| 20
    
        GhostAnton 16.10.13✎ 15:19 | 
        (13) Огромное спасибо, все получилось действительно теперь это пишется через структуру с параметром и в конечном итоге все заработало как я хотел
 &НаКлиенте Процедура ВопросЗакрытияДокумента(Результат, Параметры) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда Объект.БезЗадатка = Истина; ПарЗап = Новый Структура; ПарЗап.Вставить("РежимЗаписи", РежимЗаписиДокумента.Проведение); Записать(ПарЗап); //КАК СДЕЛАТЬ ПРАВИЛЬНО!!!!!!! Закрыть(); //Возврат; Иначе Объект.БезЗадатка = Ложь; Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Введите сумму задатка!"; Сообщение.Поле = "Задатки"; //Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.ПутьКДанным = "Объект.Задатки[0].Сумма"; Сообщение.Сообщить(); //Возврат; КонецЕсли; КонецПроцедуры | |||
| 21
    
        Поросенок Петр 16.10.13✎ 15:25 | 
        В командах с галкой "изменяет данные" тоже подобная хрень.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |