|
v8: Преобразование значения к типу Число не может быть выполнено Ø (GROOVY 05.05.2014 23:53) | ☑ | ||
---|---|---|---|---|
0
листопад
05.05.14
✎
23:30
|
Не понятно, почему закрыли мою тему??? Проблема так и не решилась. А очень надо, не закрывайте и эту тему, пож-та!!!
Формирую внешнюю печ.форму сразу в Ворд. Проблема с реквизитом: в спр.ФЛ, на вкладке "Прочее" есть возможность вводить Заметки. Мы вводим Дату и Содержание. В случае, если у ФЛ заметки нет, при формировании этой внеш.печ.формы выдает сообщение об ошибке и не формирует: Не удалось сформировать внешнюю печатную форму! Преобразование значения к типу Число не может быть выполнено Если Заметка заполнена, то все формируется. Опытным путем обнаружила, что если закомментировать строчку: ш_ДовДата = ДатаПрописью(ДовДата); то в любом случае печ.форма формируется, только в случае не заполнения Заметки, эти поля не выводятся и в печ.форму. Вопрос, как сделать, чтобы печ.форма формиловалась без закомментирования этой строчки. Ведь в ней вызывается функция, которая возвращает Дату прописью. Вот код: Функция Печать() Экспорт Выборка = СформироватьЗапросДляПечатиТрудовогоДоговораН().Выбрать(); Если Выборка.Следующий() Тогда // заметки Доверенность ВидЗ = Справочники.ВидыЗаметок.НайтиПоНаименованию("доверенность"); Если НЕ ВидЗ.Пустая() Тогда ВидЗаметки = ВидЗ.Ссылка; Содержание=""; з=Новый Запрос; з.Текст= "ВЫБРАТЬ | Заметки.Дата, | Заметки.Объект, | Заметки.Содержание, | Заметки.ВидЗаметки |ИЗ | РегистрСведений.Заметки КАК Заметки |ГДЕ | Заметки.Объект = &ФЛ | И Заметки.ВидЗаметки = &Вид"; з.УстановитьПараметр("ФЛ",Выборка.ФизЛицо); з.УстановитьПараметр("Вид", ВидЗаметки); ВыбЗаметка = з.Выполнить().Выбрать(); Если ВыбЗаметка.Следующий() Тогда ДовДата = ВыбЗаметка.Дата; ДовНомер = ВыбЗаметка.Содержание; КонецЕсли; Иначе ДовДата = " "; ДовНомер = " "; Сообщить( "У физ.лица " + Выборка.ФизЛицо + " не заполнен ВидЗаметки"); КонецЕсли; ш_ДовНомер = ДовНомер; ш_ДовДата = ДовДата; ш_ДовДата = ДатаПрописью(ДовДата); КонецЕсли; Макет = ПолучитьМакет("МакетДоверенность"); MSWord = Макет.Получить(); Попытка Документ = MSWord.Application.Documents(1); Документ.Activate(); Замена = Документ.Content.Find; Замена.Wrap = 1; //чтобы не писать каждый раз Find Замена.Execute("ш_ДовНомер", , , , , , , , ,ш_ДовНомер,2); Замена.Execute("ш_ДовДата", , , , , , , , ,ш_ДовДата,2); MSWord.Application.Visible=Истина; MsWord.Activate(); Исключение Сообщить(ОписаниеОшибки()); MSWord.Application.Quit(); КонецПопытки; КонецФункции Вот код фунукции, вызов которой приходится закомментировать, иначе ошибка: Функция ДатаПрописью(ДП) Экспорт стрРез = ""; Д=Формат(ДП,"ДЛФ=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)); КонецЕсли; КонецЕсли; стрГод = Строка(_т)+" "+Строка(с)+" "+Строка(дс)+" "+Строка(е); КонецЕсли; Иначе КонецЕсли; стрГод = стрГод+" года"; стрГод = СтрЗаменить(стрГод," "," "); стрРез = Строка(стрДень)+" "+Строка(стрМес)+" "+Строка(стрГод); стрРез = СтрЗаменить(стрРез," "," "); Возврат стрРез; КонецФункции |
|||
1
Otkr
05.05.14
✎
23:32
|
Никому неохота разбираться в гомнокоде
|
|||
2
shuhard
05.05.14
✎
23:33
|
(0) убейся наконец об стенку
|
|||
3
PR
05.05.14
✎
23:33
|
Ну вот, девушка еще и про правило 8 не знает. Бяда :))
|
|||
4
PR
05.05.14
✎
23:34
|
(2) Что злой такой?
|
|||
5
Otkr
05.05.14
✎
23:34
|
(4) А сам то, Роман)))
|
|||
6
PR
05.05.14
✎
23:35
|
(5) Я? Злой?! :)) Да я добрее Карлсона :))
|
|||
7
листопад
05.05.14
✎
23:35
|
Пять сообщений, и хоть бы одно по существу... И охота людям в 12ч.ночи гадости другим писать...
|
|||
8
su_mai
05.05.14
✎
23:37
|
||||
9
PR
05.05.14
✎
23:37
|
(7) Мадам, поймите, программисты 1С зарабатывают на жизнь тем, что как раз секут всякие эти преобразования к типу число, даты прописью и прочую труху :))
И тут либо открывайте книжки и начинайте потихоньку складывать буквы в слова, а слова в предложения, либо вызывайте этих колдунов, они вам за 2000 в час все наколдуют :)) |
|||
10
Otkr
05.05.14
✎
23:38
|
(9) Вооот! Первый пост по существу))))
|
|||
11
листопад
05.05.14
✎
23:43
|
(9) у всех разные способности, кто-то, как Вы выражаетесь, быстрее начинае "сечь", кто-то позже.
|
|||
12
листопад
05.05.14
✎
23:44
|
(9) Вы так усиленно свои услуги предлагаете: совсем плохо с деньгами?
|
|||
13
su_mai
05.05.14
✎
23:46
|
||||
14
PR
05.05.14
✎
23:46
|
(11) Да, а еще кто-то берет материалы и начинает изучать, а кто-то хочет, чтобы ему азы разжевали на форуме :))
|
|||
15
Фокусник
05.05.14
✎
23:46
|
(0) вместо
ш_ДовДата = ДатаПрописью(ДовДата); Поставь Если ЗначениеЗаполнено(ДовДата) Тогда ш_ДовДата = ДатаПрописью(ДовДата); Иначе ш_ДовДата = ""; КонецЕсли; |
|||
16
PR
05.05.14
✎
23:47
|
(12) То есть у Газпрома по вашей логике тоже совсем труба с баблом? :))
|
|||
17
листопад
05.05.14
✎
23:48
|
(15) Спасибо, я уже тоже до этого дошла... щас посмотрю...
|
|||
18
su_mai
05.05.14
✎
23:48
|
(14) Не ну если один два вопроса, то нормально, а тут просто надо как то азы понять. Как тут объяснить?
|
|||
19
листопад
05.05.14
✎
23:48
|
(16) Вы и Газпром, я думаю, понятия несовместимые.
|
|||
20
Фокусник
05.05.14
✎
23:51
|
(19) не стОит...
|
|||
21
GROOVY
модератор
05.05.14
✎
23:52
|
Забаню ТС на сутки, думаю поможет ей в ее проблеме разобраться.
|
|||
22
листопад
05.05.14
✎
23:53
|
(21) Не надо. Я все уже сделала. Всем СПАСИБО!!!
|
|||
23
GROOVY
05.05.14
✎
23:53
|
Ну я же говорил...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |