Информационный поток
Задания вакансии материалы разработки сообщения форума
a.v.nikolaev
Приватное сообщение

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

Тула(Россия)
11 | 0
3 января 2016 в 17:49:06(48 недель 6 дней 7 часов назад)
2700
Текст задания
Прошу найти ошибку в тексте: Преобразование значения к типу Число не может быть выполнено

Перем ЛокальныеПеременные;
Перем ИcпользоватьПоиск;

// !№№!
// !56! укратил
// !55! Падежи - для оглы и кызы
// !54!
// !53! Очередное сокращение кода
// !51! Прегромадное спасибо Олегу Дубровскому за оказанную моральную, информационную и материальную поддержку сего проекта.
// Сергею Толкачёву за напоминание о том, что в русском языке всегда есть место исключениям!
// !50! П:Ответственный за электрохозяйство Ф:Ацута Груша
// !48! исправлена ошибка при склонении фамилий (спасибо, Mario).
// !47! исправлена ошибка при склонении профессий ( спасибо, Павел Ковалев).
// !46! оптимизация + четвертый параметр задает, что вернуть - фамилия, имя или отчество или всё сразу в нужном падеже
// !42! Осел + Соловей + Воробей + Немец + Кормилец + Силиец
// !41! отчества оканчивающиеся на "ы" считаются женскими ?

// Функция для склонения одного слова!!!
// z1 - само слово
// z2 - номер падежа
// z3 - пол
// z4 - 1-склонять как фамилию, 2-имя, 3-отчество
Функция ПадежС(z1,Знач z2=2,Знач z3="*",z4=0) Экспорт
z5=Найти(z1,"-");
z6=?(z5=0,"","-"+ПадежС(Сред(z1,z5+1,СтрДлина(z1)-z5+1),z2,z3,z4));
z1=НРег(?(z5=0,z1,Лев(z1,z5-1)));
z7=Прав(z1,3);z8=Прав(z7,2);z9=Прав(z8,1);
z5=СтрДлина(z1);
za=Найти("ая ия ел ок яц ий па да ца ша ба та га ка",z8);
zb=Найти("аеёийоуэюяжнгхкчшщ",Лев(z7,1));
zc=Макс(z2,-z2);
zd=?(za=4,5,Найти("айяь",z9));
zd=?((zc=1)или(z9=".")или((z4=2)и(Найти("оиеу"+?(z3="ч","","бвгджзклмнпрстфхцчшщъ"),z9)>0))или((z4=1)и(Найти("мия мяэ лия кия жая лея",z7)>0)),9,?((zd=4)и(z3="ч"),2,?(z4=1,?(Найти("оеиую",z9)+Найти("их ых аа еа ёа иа оа уа ыа эа юа яа",z8)>0,9,?(z3<>"ч",?(za=1,7,?(z9="а",?(za>18,1,6),9)),?(((Найти("ой ый",z8)>0)и(z5>4)и(Прав(z1,4)<>"опой"))или((zb>10)и(za=16)),8,zd))),zd)));
ze=Найти("лец вей бей дец пец мец нец рец вец аец иец ыец бер",z7);
zf=?((zd=8)и(zc<>5),?((zb>15)или(Найти("жий ний",z7)>0),"е","о"),?(z1="лев","ьв",?((Найти("аеёийоуэюя",Сред(z1,z5-3 ,1))=0)и((zb>11)или(zb=0))и(ze<>45),"",?(za=7,"л",?(za=10,"к",?(za=13,"йц",?(ze=0,"",?(ze<12,"ь"+?(ze=1,"ц",""),?(ze<37,"ц",?(ze<49,"йц","р"))))))))));
// zf=?((zd=9)или((z4=3)и(z3="ы")),z1,Лев(z1,z5-?((zd>6)или(zf<>""),2,?(zd>0,1,0)))+zf+СокрП(Сред("а у а "+Сред("оыые",Найти("внч",z9)+1,1)+"ме "+?(Найти("гжкхш",Лев(z8,1))>0,"и","ы")+" е у ойе я ю я ем"+?(za=16,"и","е")+" и е ю ейе и и ь ьюи и и ю ейи ойойу ойойойойуюойойгомуго"+?((zf="е")или(za=16)или((zb>12)и(zb<16)),"и","ы")+"мм",10*zd+2*zc-3,2)));

zf=?((zd=9)или((z4=3)и(Прав(z1,1)="ы")),z1,Лев(z1,z5-?((zd>6)или(zf<>""),2,?(zd>0,1,0)))+zf+СокрП(Сред("а у а "+Сред("оыые",Найти("внч",z9)+1,1)+"ме "+?(Найти("гжкхш",Лев(z8,1))>0,"и","ы")+" е у ойе я ю я ем"+?(za=16,"и","е")+" и е ю ейе и и ь ьюи и и ю ейи ойойу ойойойойуюойойгомуго"+?((zf="е")или(za=16)или((zb>12)и(zb<16)),"и","ы")+"мм",10*zd+2*zc-3,2)));
Возврат ?(""=z1,"",?(z4>0,ВРег(Лев(zf,1))+?((z2<0)и(z4>1),".",Сред(zf,2)),zf)+z6);
КонецФункции

//_____________________________________________________________________________
// z1 - фамилия имя отчество например Железняков Юрий Юрьевич
// z2 - Падеж ( по умолчанию = 2 - родительный)
// 2 - родительный ( нет кого? ) Железнякова Юрия Юрьевича
// 3 - дательный ( кому? ) Железнякову Юрию Юрьевичу
// 4 - винительный ( вижу кого? ) Железнякова Юрия Юрьевича
// 5 - творительный ( кем? ) Железняковым Юрием Юрьевичем
// 6 - предложный ( о ком? ) Железнякове Юрии Юрьевиче
// Если задать Z2 меньше 0, то на выходе получим от -1=Железняков Ю. Ю. до -6=Железнякове Ю. Ю.
// z3 - параметр Пол может не указываться, но при наличии фамилий с
// инициалами точное определение пола невозможно, поэтому предлагается задавать пол этим
// параметром 1 - мужской 2 - женский
// ДЛЯ СКЛОНЕНИЯ ПРОФЕССИЙ ИСПОЛЬЗУЙТЕ ФУНКЦИЮ ПАДЕЖП И БУДЕТ ВАМ СЧАСТЬЕ!
// ---------------------------------------------------------------------------------------
// Бибик Галушка Цой Николайчик Наталия Петровна Герценберг Кривошей Капица-Метелица
// Если Падеж(Фио ,1 ,3), то на выходе получим Фамилия Имя Отчество и т.д.
// Если Падеж(Фио ,1 ,3,"1" ), то Фамилия
// Если Падеж(Фио ,1 ,3,"2" ), то Имя
// Если Падеж(Фио ,1 ,3,"3" ), то Отчество
// Если Падеж(Фио, 1 ,3,"12" ), то Фамилия Имя
// Если Падеж(Фио, 1 ,3,"23" ), то Имя Отчество
// Если Падеж(Фио,-1 ,3,"231" ),то И. О. Фамилия
// Если Падеж(Фио,-1 ,3,"23" ), то И. О.
// 10-11-2003 3-20
Функция Падеж(z1,z2=2,z3=3,z4="123",z5=1) Экспорт
z6=Нрег(Прав(СокрП(z1),4));
z7=Прав(z6,1);
Возврат?(z5<4,Падеж(СокрЛП(СтрЗаменить(Сред(z1,Найти(z1+" "," ")+1),".",". ")),z2,z3,СтрЗаменить(z4,z5,ПадежС(?((z5=3)и(z7="ы"),z1,Лев(z1,Найти(z1+" "," ")-1)),z2,Сред("ча"+z7,?(z3=3,?(z6="оглы",1,?(z6="кызы",1,3)),z3),1),z5)+" "),z5+1),z4);
КонецФункции

Функция ПадежП(Знач z1,Знач z2,z3=0) Экспорт
z1=СокрЛП(z1);z4=Найти(z1+" "," ")+1;z5=Лев(z1,z4-2);z6=Прав(z5,2);
z7=?((Найти("ая ий ый",z6)>0)и(Найти("ющий нный",Сред(z1,z4-5,4))=0)и(z3=0),"1","*");
Возврат НРег(?((z6="ая")или(Прав(z6,1)="а"),ПадежС(z5,z2,z7,1)+" "+ПадежС(Сред(z1,z4),z2),ПадежС(z5,z2,"ч",1)+?((z6="ий")и(Найти(z1," ")=0),""," "+?(z7="1",ПадежП(Сред(z1,z4),z2,Число(z7)),Сред(z1,z4)))));
КонецФункции

//Функция возвращает список доступных назначений для "Свойств и категорий объектов"
//по переданной ссылке
// Параметры:
//Ссылка - Ссылка на справочник или документ
//
// Возвращаемое значение:
// Список значений: доступные назначения для свойств и категорий
Функция лПолучитьСписокНазначенийСвойствКатегорийОбъектовПоСсылке(Ссылка)

Результат = Новый СписокЗначений;

ТипСсылки = ТипЗнч(Ссылка);
ЭтоХарактеристика = (ТипСсылки = Тип("СправочникСсылка.ХарактеристикиНоменклатуры"));

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НазначениеХарактеристика", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_ХарактеристикиНоменклатуры);

ТекстЗапроса = "
|ВЫБРАТЬ
| Назначения.Ссылка КАК Ссылка,
| Назначения.ТипЗначения КАК ТипЗначения
|ИЗ
| ПланВидовХарактеристик.НазначенияСвойствКатегорийОбъектов КАК Назначения
|ГДЕ
| НЕ Назначения.ПометкаУдаления
| И НЕ Назначения.ЭтоГруппа
|";

Если ЭтоХарактеристика Тогда
ТекстЗапроса = ТекстЗапроса + "
| И Назначения.Ссылка = &НазначениеХарактеристика
|";
Иначе
ТекстЗапроса = ТекстЗапроса + "
| И Назначения.Ссылка <> &НазначениеХарактеристика
|";
КонецЕсли;

Запрос.Текст = ТекстЗапроса;

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если ЭтоХарактеристика Или Выборка.ТипЗначения.СодержитТип(ТипСсылки) Тогда
Результат.Добавить(Выборка.Ссылка);
КонецЕсли;
КонецЦикла;

Возврат Результат;

КонецФункции // ПолучитьСписокНазначенийСвойствКатегорийОбъектовПоСсылке()

Функция ЗначениеСвойства(Объект, НаименованиеСвойства)

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СвойстваОбъектов.Ссылка
|ИЗ
| ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов
|ГДЕ
| СвойстваОбъектов.Наименование = &НаименованиеСвойства
| И СвойстваОбъектов.НазначениеСвойства в (&НазначениеСвойства)
|";

Запрос.УстановитьПараметр("НаименованиеСвойства", НаименованиеСвойства);
НазначениеСвойства = лПолучитьСписокНазначенийСвойствКатегорийОбъектовПоСсылке(Объект);
Запрос.УстановитьПараметр("НазначениеСвойства", НазначениеСвойства);

Выборка = Запрос.Выполнить().Выбрать();

Если не Выборка.Следующий() Тогда
НовоеСвойство = ПланыВидовХарактеристик.СвойстваОбъектов.СоздатьЭлемент();
НовоеСвойство.НазначениеСвойства = НазначениеСвойства[0].Значение;
НовоеСвойство.Наименование = НаименованиеСвойства;
НовоеСвойство.ТипЗначения = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(50));
НовоеСвойство.Записать();
Свойство = НовоеСвойство.Ссылка;
Иначе
Свойство = Выборка.Ссылка;
КонецЕсли;

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Значение
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Свойство = &Свойство
| И ЗначенияСвойствОбъектов.Объект = &Объект
|";

Запрос.УстановитьПараметр("Свойство", Свойство);
Запрос.УстановитьПараметр("Объект", Объект);

Результат = Запрос.Выполнить();

Если Результат.Пустой() Тогда
Возврат " ";
КонецЕсли;

Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Значение;
КонецЕсли;

Возврат " ";

КонецФункции

Процедура ЗаписатьПеременную(Док, ИмяПеременной, Значение)

Если ИcпользоватьПоиск Тогда
Замена = Док.Content.Find;
Замена.Wrap = 1;
Замена.Execute(ИмяПеременной, , , , , , , , ,Строка(Значение), 2);
Иначе
Если Не ЗначениеЗаполнено(Значение) Тогда
Док.Variables.Add(ИмяПеременной, Символы.НПП);
Возврат;
КонецЕсли;

Док.Variables.Add(ИмяПеременной, Строка(Значение));
КонецЕСли;

КонецПроцедуры

Функция ПолучитьОплаты()
Результат = Новый Структура("Процент, Оплата, СуммаЗаказа, Долг, Наличные, Безналичные, Карта, Кредит");
Результат.Процент = 0;
Результат.Оплата = 0;
Результат.СуммаЗаказа = 0;
Результат.Долг = 0;

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

Запрос.Текст = "ВЫБРАТЬ
| ЗаказыПокупателейОбороты.СуммаВзаиморасчетовПриход КАК СуммаЗаказа
|ИЗ
| РегистрНакопления.ЗаказыПокупателей.Обороты(, , , ДоговорКонтрагента = &Договор) КАК ЗаказыПокупателейОбороты";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Результат.СуммаЗаказа = Выборка.СуммаЗаказа;
КонецЕсли;

Результат.Процент = ?(Результат.Оплата=0, "", Результат.Оплата / Результат.СуммаЗаказа * 100);
Результат.Долг = ?(Результат.Оплата=0, "", Результат.СуммаЗаказа - Результат.Оплата);

Возврат Результат;
КонецФункции

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

КонецФункции

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

КонецФункции

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

КонецФункции

Функция ПолучитьРазмер()

Для Каждого СтрокаТовара ИЗ СсылкаНаОбъект.Товары Цикл

Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Значение
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Объект = &Объект
| И ЗначенияСвойствОбъектов.Свойство = &Свойство";
Запрос.УстановитьПараметр("Объект", СтрокаТовара.Номенклатура);
Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Габаритные размеры (Ш&#215;Г&#215;В), мм"));
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Значение;
Иначе
Возврат "";
КонецЕсли;
КонецЦикла;
КонецФункции

Функция Печать() Экспорт;
0
Выбранные исполнители
Отклики
Предложения отсутствуют
    На главную страницу ≡ к списку заданий 1С