Имя: Пароль:
1C
1С v8
УФ и проведение документа 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
В командах с галкой "изменяет данные" тоже подобная хрень.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс