Имя: Пароль:
1C
1С v8
Преобразование значения к типу Число не может быть выполнено
Ø (GROOVY 05.05.2014 23:22)
0 листопад
 
05.05.14
22:46
Формирую внешнюю печ.форму сразу в Ворд. Проблема с реквизитом: в спр.ФЛ, на вкладке "Прочее" есть возможность вводить Заметки. Мы вводим Дату и Содержание. В случае, если у ФЛ заметки нет, при формировании этой внеш.печ.формы выдает сообщение об ошибке и не формирует:

Не удалось сформировать внешнюю печатную форму!
Преобразование значения к типу Число не может быть выполнено

Если Заметка заполнена, то все формируется. Опытным путем обнаружила, что если закомментировать строчку:  ш_ДовДата = ДатаПрописью(ДовДата);
то в любом случае печ.форма формируется, только в случае не заполнения Заметки, эти поля не выводятся и в печ.форму.
Вопрос, как сделать, чтобы печ.форма формиловалась без закомментирования этой строчки. Ведь в ней вызывается функция, которая возвращает Дату прописью.

Вот код:


Функция Печать() Экспорт

Выборка = СформироватьЗапросДляПечатиТрудовогоДоговораН().Выбрать();

Если Выборка.Следующий() Тогда
    
    // заметки Доверенность
    ВидЗ = Справочники.ВидыЗаметок.НайтиПоНаименованию("доверенность");
    Если  НЕ ВидЗ.Пустая() Тогда
        ВидЗаметки = ВидЗ.Ссылка;
        
        Содержание="";
        з=Новый Запрос;
        з.Текст=        
        "ВЫБРАТЬ
        |    Заметки.Дата,
        |    Заметки.Объект,
        |    Заметки.Содержание,
        |    Заметки.ВидЗаметки
        |ИЗ
        |    РегистрСведений.Заметки КАК Заметки
        |ГДЕ
        |    Заметки.Объект = &ФЛ
        |    И Заметки.ВидЗаметки = &Вид";
        
        з.УстановитьПараметр("ФЛ",Выборка.ФизЛицо);
        з.УстановитьПараметр("Вид", ВидЗаметки);
        
        ВыбЗаметка = з.Выполнить().Выбрать();
        Если ВыбЗаметка.Следующий() Тогда
            ДовДата = ВыбЗаметка.Дата;
            ДовНомер = ВыбЗаметка.Содержание;
        КонецЕсли;
    Иначе
        ДовДата = " ";
        ДовНомер = " ";
        Сообщить( "У физ.лица " + Выборка.ФизЛицо + " не заполнен ВидЗаметки");
    КонецЕсли;
    
    ш_ДовНомер = ДовНомер;
    ш_ДовДата = ДовДата;
    ш_ДовДата = ДатаПрописью(ДовДата);
    
КонецЕсли;
Макет = ПолучитьМакет("МакетДоверенность");
MSWord = Макет.Получить();

Попытка
    Документ = MSWord.Application.Documents(1);
    Документ.Activate();
    Замена = Документ.Content.Find;
    Замена.Wrap = 1;   //чтобы не писать каждый раз  Find
    Замена.Execute("ш_ДовНомер", , , , , , , , ,ш_ДовНомер,2);
    Замена.Execute("ш_ДовДата", , , , , , , , ,ш_ДовДата,2);
    MSWord.Application.Visible=Истина;
    MsWord.Activate();
Исключение
    Сообщить(ОписаниеОшибки());
    MSWord.Application.Quit();
КонецПопытки;

КонецФункции
1 листопад
 
05.05.14
22:48
Вот код фунукции, вызов которой приходится закомментировать, иначе ошибка:


Функция ДатаПрописью(ДП) Экспорт
    стрРез = "";
    Д=Формат(ДП,"ДЛФ=D");
    спсМес = Новый СписокЗначений;
    спсМес.Добавить("января");
    спсМес.Добавить("февраля");
    спсМес.Добавить("марта");
    спсМес.Добавить("апреля");
    спсМес.Добавить("мая");
    спсМес.Добавить("июня");
    спсМес.Добавить("июля");
    спсМес.Добавить("августа");
    спсМес.Добавить("сентября");
    спсМес.Добавить("октября");
    спсМес.Добавить("ноября");
    спсМес.Добавить("декабря");
    
    спсЧисл = Новый СписокЗначений;
    спсЧисл.Добавить("первое","первого");
    спсЧисл.Добавить("второе","второго");
    спсЧисл.Добавить("третье","третьего");
    спсЧисл.Добавить("четвертое","четвертого");
    спсЧисл.Добавить("пятое","пятого");
    спсЧисл.Добавить("шестое","шестого");
    спсЧисл.Добавить("седьмое","седьмого");
    спсЧисл.Добавить("восьмое","восьмого");
    спсЧисл.Добавить("девятое","девятого");
    
    //числительные им.падеж
    спсЧислИм = Новый СписокЗначений;
    спсЧислИм.Добавить("тысяча","тысячного");
    спсЧислИм.Добавить("две тысячи","двухтысячного");
    спсЧислИм.Добавить("три тысячи","трехтысячного");
    спсЧислИм.Добавить("четыре тысячи","четырёхтысячного");
    спсЧислИм.Добавить("пять","пятитысячного");
    спсЧислИм.Добавить("шесть","шеститысячного");
    спсЧислИм.Добавить("семь","семитысячного");
    спсЧислИм.Добавить("восемь","восьмитысячного");
    спсЧислИм.Добавить("девять","девятитысячного");
    
    спсСотни = Новый СписокЗначений;
    спсСотни.Добавить("сто");
    спсСотни.Добавить("двести");
    спсСотни.Добавить("триста");
    спсСотни.Добавить("четыреста");
    спсСотни.Добавить("пятьсот");
    спсСотни.Добавить("шестьсот");
    спсСотни.Добавить("семьсот");
    спсСотни.Добавить("восемьсот");
    спсСотни.Добавить("девятьсот");
    
    //десятки им.падеж
    спсДесИм = Новый СписокЗначений;
    спсДесИм.Добавить("","десятого");
    спсДесИм.Добавить("двадцать","двадцатого");
    спсДесИм.Добавить("тридцать","тридцатого");
    спсДесИм.Добавить("сорок","сорокового");
    спсДесИм.Добавить("пятьдесят","пятидесятого");
    спсДесИм.Добавить("шестьдесят","шестидесятого");
    спсДесИм.Добавить("семьдесят","семидесятого");
    спсДесИм.Добавить("восемьдесят","восьмидесятого");
    спсДесИм.Добавить("девяносто","девяностого");
    
    //субдесятки род.падеж
    спсСубДесРод = Новый СписокЗначений;
    спсСубДесРод.Добавить("одиннадцатого");
    спсСубДесРод.Добавить("двенадцатого");
    спсСубДесРод.Добавить("тринадцатого");
    спсСубДесРод.Добавить("четырнадцатого");
    спсСубДесРод.Добавить("пятнадцатого");
    спсСубДесРод.Добавить("шестнадцатого");
    спсСубДесРод.Добавить("семнадцатого");
    спсСубДесРод.Добавить("восемнадцатого");
    спсСубДесРод.Добавить("девятнадцатого");
    
    спсДес = Новый СписокЗначений;
    спсДес.Добавить("десятое");
    спсДес.Добавить("двадцатое","двадцать");
    спсДес.Добавить("тридцатое","тридцать");
    спсДес.Добавить("сороковое","тридцать");
    спсДес.Добавить("пятидесятое","тридцать");
    спсДес.Добавить("шестидесятое","тридцать");
    спсДес.Добавить("семидесятое","тридцать");
    
    спсСубДес = Новый СписокЗначений;
    спсСубДес.Добавить("одиннадцатое");
    спсСубДес.Добавить("двенадцатое");
    спсСубДес.Добавить("тринадцатое");
    спсСубДес.Добавить("четырнадцатое");
    спсСубДес.Добавить("пятнадцатое");
    спсСубДес.Добавить("шестнадцатое");
    спсСубДес.Добавить("семнадцатое");
    спсСубДес.Добавить("восемнадцатое");
    спсСубДес.Добавить("девятнадцатое");
    
    спсДаты = СтрЗаменить(СокрЛП(Д),".",Символы.ПС);
    //разбираем день
    стрДень = СокрЛП(Число(СтрПолучитьСтроку(спсДаты,1)));
    Если СтрДлина(стрДень)=1 Тогда
        стрДень = спсЧисл.Получить(Число(стрДень)-1).Значение;
    Иначе
        десДень = Число(Лев(стрДень,1));
        едДень = Число(Прав(стрДень,1));
        
        Если едДень=0 Тогда
            стрДень = спсДес.Получить(десДень-1).Значение;
        Иначе
            Если десДень>1 Тогда
                т = Строка(спсДес.Получить(десДень-1));
                стрДень = т+" "+Строка(спсЧисл.Получить(едДень-1).Значение);
            Иначе
                стрДень = спсСубДес.Получить(едДень-1).Значение;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    //разбираем месяц
    стрМес = спсМес.Получить(Число(СтрПолучитьСтроку(спсДаты,2))-1).Значение;
    
    //разбираем год
    стрГод = СтрПолучитьСтроку(спсДаты,3);
    длинаГода = СтрДлина(стрГод);
    Если длинаГода=4 Тогда
        тыс = Сред(стрГод,1,1); сот = Сред(стрГод,2,1); дес = Сред(стрГод,3,1); ед = Сред(стрГод,4,1);
        _т = спсЧислИм.Получить(Число(тыс)-1).Значение;
        Если (Число(сот)=0) и (Число(дес)=0) и (Число(ед)=0) Тогда
            миллениум = Строка(спсЧислИм.Получить(Число(тыс)-1));
            стрГод = миллениум;
        Иначе
            с = ""; дс = ""; е = "";
            Если Число(сот)<>0 Тогда
                с = спсСотни.Получить(Число(сот)-1).Значение;
            КонецЕсли;
            Если Число(дес)<>0 Тогда
                Если Число(ед)=0 Тогда
                    дг = Строка(спсДесИм.Получить(Число(дес)-1));
                    дс = дг;
                Иначе
                    дс = спсСубДесРод.Получить(Число(ед)-1).Значение;
                КонецЕсли;
            КонецЕсли;
            Если (Число(дес)>1) или (Число(дес)=0) Тогда
                Если Число(ед)<>0 Тогда
                    е =Строка(спсЧисл.Получить(Число(ед)-1));
                КонецЕсли;
            КонецЕсли;
            стрГод = Строка(_т)+" "+Строка(с)+" "+Строка(дс)+" "+Строка(е);
        КонецЕсли;
    Иначе
        
    КонецЕсли;
    стрГод = стрГод+" года";
    стрГод = СтрЗаменить(стрГод," "," ");
    стрРез = Строка(стрДень)+" "+Строка(стрМес)+" "+Строка(стрГод);
    стрРез = СтрЗаменить(стрРез," "," ");
    Возврат стрРез;
КонецФункции
2 shuhard
 
05.05.14
22:48
(0) пипец
3 листопад
 
05.05.14
22:48
(2) что такое опять???
4 GROOVY
 
05.05.14
22:51
Когда же уже ТС поймет что такое типы значений и как с ними работать? Возьмите учебник по информатике за 9-10 классы и почитайте.
5 листопад
 
05.05.14
22:54
(4) На праздники обещаю заняться этим пробелом ))) Но мне надо сейчас решить эту проблему. Поэтому HELP!!! SOS!!!
6 PR
 
05.05.14
22:55
(5) Решаю проблемы. 2000 в час.
7 PR
 
05.05.14
22:56
+(6) Ой, это еще и девушка. Как вас занесло на почву 1С-то?
8 Torquader
 
05.05.14
22:57
Поищи стандартную функцию "число прописью" и не мучайся.
9 листопад
 
05.05.14
22:58
(6) Ну вот, началось... Как будто не на форум по 1С за помощью к колегам с более светлыми головами обратилась, а на сайт фриланса...
10 листопад
 
05.05.14
22:59
(8) И снова здравствуйте, Torquader. Уже который вечер мы с Вами ведем диалоги здесь ))) По поводу Вашего совета: у меня не числа, а ДАТА выводиться должна прописью. Стандартную функцию в ЗУПе я не нашла.
11 Torquader
 
05.05.14
23:00
(9) Ну, неси мисочку для слёз - сейчас опять топить будем.
12 2S
 
05.05.14
23:00
(10) почту видела от меня?
13 Torquader
 
05.05.14
23:02
Как бы - ЧислоПрописью - чем не подходит ?
14 листопад
 
05.05.14
23:03
(7) Знали бы Вы, сколько раз я слышала этот вопрос...
15 листопад
 
05.05.14
23:04
(12) нет, не приходило ничего...
16 2S
 
05.05.14
23:06
(15) в профиле верный адрес?
17 листопад
 
05.05.14
23:07
(12), Ой, я не в ту почту заходила. Сейчас зашла, которая у меня в профиле. Получила ))) Вы меня засмущали...
18 2S
 
05.05.14
23:08
Все в почту )
19 листопад
 
05.05.14
23:08
(18) Ответила )))
20 листопад
 
05.05.14
23:12
Ап! Куда все пропали? Проблема в (0) не решена еще...
21 Torquader
 
05.05.14
23:12
А что в почте ?
22 Torquader
 
05.05.14
23:13
(20) А что будет за решение проблемы ?
23 листопад
 
05.05.14
23:18
(22) Если бы что-то было, я бы на другой ресурс сходила. А так - простое человеческое СПАСИБО, и Вам плюсик к карме, что доброе дело сделали, помогли девушке.
24 Torquader
 
05.05.14
23:20
Во-первых, полезно проверить дату на пустоту, чтобы вместо пустой даты вывести пустую строку.
25 листопад
 
05.05.14
23:20
Уже 45мин.прошло... Кто-нибудь!!!