Здравствуйте!
Подскажите пожалуйста по какой причине функция Выполнить может не исполнять следующий скрипт:
Данный код проверил с помощью внешней обработке - всё сработало корректно.
Перед отправкой в функцию Выполнить делаю очистку от переносов строк и символов "|", на других примерах это срабатывало корректно:
После отработки функция Выполнить возвращает следующею строку (код):
Судя по тому, что кроме данной строки кода ничего не выводится, то не одно из исключений не срабатывает
Подскажите пожалуйста по какой причине функция Выполнить может не исполнять следующий скрипт:
Попытка
Результат="";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| рбсВидыДоговоровЗаполнениеРеквизитовДоговора.РеквизитДоговора,
| рбсВидыДоговоровЗаполнениеРеквизитовДоговора.Комментарий
|ИЗ
| Справочник.рбсВидыДоговоров.ЗаполнениеРеквизитовДоговора КАК рбсВидыДоговоровЗаполнениеРеквизитовДоговора
|ГДЕ
| рбсВидыДоговоровЗаполнениеРеквизитовДоговора.Ссылка = &Ссылка
| И рбсВидыДоговоровЗаполнениеРеквизитовДоговора.РеквизитДоговора.Наименование = ""ЧасовВМес""";
Запрос.УстановитьПараметр("Ссылка", Объект.ВидДоговора.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
СтрокаКомментария=Выборка.Комментарий;
ЧислоИзСтроки="";
Для Индекс = 0 По СтрДлина(СтрокаКомментария) Цикл
Сим=Сред(СтрокаКомментария,Индекс,1);
Если Сим>="0" и Сим<="9" тогда
ЧислоИзСтроки = ЧислоИзСтроки+Сим;
КонецЕсли;
КонецЦикла;
Попытка
ЧасовВМес=Число(ЧислоИзСтроки);
Исключение
ЧасовВМес=Неопределено;
Сообщить("Не верно задано значение ЧасовВМес в виде договора");
КонецПопытки;
КонецЦикла;
Если ТипЗнч(ЧасовВМес)=Тип("Число") Тогда
Запрос2 = Новый Запрос;
Запрос2.Текст ="ВЫБРАТЬ
| рбсДоговорПодпискаИТС.ДатаНачала,
| рбсДоговорПодпискаИТС.ДатаОкончания
|ИЗ
| Документ.рбсДоговор.ПодпискаИТС КАК рбсДоговорПодпискаИТС
|ГДЕ
| рбсДоговорПодпискаИТС.Ссылка = &Ссылка
| И рбсДоговорПодпискаИТС.ДатаНачала = &ДатаНачала";
Запрос2.УстановитьПараметр("Ссылка", Объект.Ссылка);
Запрос2.УстановитьПараметр("ДатаНачала", Параметры.ДатаПодпискиИТС);
РезультатЗапроса2 = Запрос2.Выполнить();
Выборка2 = РезультатЗапроса2.Выбрать();
Если Выборка2.Следующий() Тогда
КоличествоМесяцев=(Год(Выборка2.ДатаОкончания)-Год(Выборка2.ДатаНачала))*12+Месяц(Выборка2.ДатаОкончания)-Месяц(Выборка2.ДатаНачала)+Окр((День(Выборка2.ДатаОкончания)-День(Выборка2.ДатаНачала))/30);
Иначе
Сообщить("Проверьте заполнение ИТС периода");
КонецЕсли;
Иначе
Сообщить("Проверьте значение ЧасовВМес в виде договора");
КонецЕсли;
Результат=КоличествоМесяцев*ЧасовВМес;
Исключение
Результат="Проверьте значение ЧасовВМес в виде договора и Периоды ИТС"
КонецПопытки;
ПоказатьДанный код проверил с помощью внешней обработке - всё сработало корректно.
Перед отправкой в функцию Выполнить делаю очистку от переносов строк и символов "|", на других примерах это срабатывало корректно:
Действие=СтрЗаменить(Выборка.Действие, "|" ," ");
Действие=СтрЗаменить(Действие,Символ(182)," ");
После отработки функция Выполнить возвращает следующею строку (код):
Попытка Результат=""; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ рбсВидыДоговоровЗаполнениеРеквизитовДоговора.РеквизитДоговора, рбсВидыДоговоровЗаполнениеРеквизитовДоговора.Комментарий ИЗ Справочник.рбсВидыДоговоров.ЗаполнениеРеквизитовДоговора КАК рбсВидыДоговоровЗаполнениеРеквизитовДоговора ГДЕ рбсВидыДоговоровЗаполнениеРеквизитовДоговора.Ссылка = &Ссылка И рбсВидыДоговоровЗаполнениеРеквизитовДоговора.РеквизитДоговора.Наименование = ""ЧасовВМес"""; Запрос.УстановитьПараметр("Ссылка", Объект.ВидДоговора.Ссылка); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл СтрокаКомментария=Выборка.Комментарий; ЧислоИзСтроки=""; Для Индекс = 0 По СтрДлина(СтрокаКомментария) Цикл Сим=Сред(СтрокаКомментария,Индекс,1); Если Сим>="0" и Сим<="9" тогда ЧислоИзСтроки = ЧислоИзСтроки+Сим; КонецЕсли; КонецЦикла; Попытка ЧасовВМес=Число(ЧислоИзСтроки); Исключение ЧасовВМес=Неопределено; Сообщить("Не верно задано значение ЧасовВМес в виде договора"); КонецПопытки; КонецЦикла; Если ТипЗнч(ЧасовВМес)=Тип("Число") Тогда Запрос2 = Новый Запрос; Запрос2.Текст ="ВЫБРАТЬ рбсДоговорПодпискаИТС.ДатаНачала, рбсДоговорПодпискаИТС.ДатаОкончания ИЗ Документ.рбсДоговор.ПодпискаИТС КАК рбсДоговорПодпискаИТС ГДЕ рбсДоговорПодпискаИТС.Ссылка = &Ссылка И рбсДоговорПодпискаИТС.ДатаНачала = &ДатаНачала"; Запрос2.УстановитьПараметр("Ссылка", Объект.Ссылка); Запрос2.УстановитьПараметр("ДатаНачала", Параметры.ДатаПодпискиИТС); РезультатЗапроса2 = Запрос2.Выполнить(); Выборка2 = РезультатЗапроса2.Выбрать(); Если Выборка2.Следующий() Тогда КоличествоМесяцев=(Год(Выборка2.ДатаОкончания)-Год(Выборка2.ДатаНачала))*12+Месяц(Выборка2.ДатаОкончания)-Месяц(Выборка2.ДатаНачала)+Окр((День(Выборка2.ДатаОкончания)-День(Выборка2.ДатаНачала))/30); Иначе Сообщить("Проверьте заполнение ИТС периода"); КонецЕсли; Иначе Сообщить("Проверьте значение ЧасовВМес в виде договора"); КонецЕсли; Результат=КоличествоМесяцев*ЧасовВМес; Исключение Результат="Проверьте значение ЧасовВМес в виде договора и Периоды ИТС" КонецПопытки;:
Судя по тому, что кроме данной строки кода ничего не выводится, то не одно из исключений не срабатывает
По теме из базы знаний
- Облегчение совместной жизни с COM соединением. Выполнение произвольного кода в подключенной базе.
- Асинхронная концепция программирования в «1С:Предприятие 8» или выполнение программного кода «в фоне»
- УНФ 1.5.3 Создание документов Перемещение запасов на основании данных Авансового отчета
- Выполнение произвольного кода в фоновых заданиях
- Выполнение внешней обработки по расписанию для управляемого и обычного приложения
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(6) И это тоже. И нужно, чтобы переменная "Результат", в которой сохраняется результат работы алгоритма, проходила сквозь весь код, от начала до конца и участвовала во всех крупных блоках. Это я понял когда разбил весь алгоритм на 2-е части и запустил по отдельности - и они выполнились, потому что в каждой был "Результат"
(1) В общем нужно, чтобы переменная "Результат", в которой сохраняется результат работы алгоритма, проходила сквозь весь код, от начала до конца и участвовала во всех крупных блоках. Это я понял когда разбил весь алгоритм на 2-е части и запустил по отдельности - и они выполнились, потому что в каждой был "Результат" Вот такой вариант сработал:
Попытка
Результат="";
Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| рбсВидыДоговоровЗаполнениеРеквизитовДоговора.РеквизитДоговора,
| рбсВидыДоговоровЗаполнениеРеквизитовДоговора.Комментарий
|ИЗ
| Справочник.рбсВидыДоговоров.ЗаполнениеРеквизитовДоговора КАК рбсВидыДоговоровЗаполнениеРеквизитовДоговора
|ГДЕ
| рбсВидыДоговоровЗаполнениеРеквизитовДоговора.Ссылка = &Ссылка
| И рбсВидыДоговоровЗаполнениеРеквизитовДоговора.РеквизитДоговора.Наименование = ""ЧасовВМес""";
Запрос.УстановитьПараметр("Ссылка", Объект.ВидДоговора.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
СтрокаКомментария=Выборка.Комментарий;
ЧислоИзСтроки="";
Для Индекс = 0 По СтрДлина(СтрокаКомментария) Цикл
Сим=Сред(СтрокаКомментария,Индекс,1);
Если Сим>="0" и Сим<="9" тогда
ЧислоИзСтроки = ЧислоИзСтроки+Сим;
КонецЕсли;
КонецЦикла;
Попытка
Результат=Число(ЧислоИзСтроки);
Исключение
Результат=Неопределено;
Сообщить("Не верно задано значение ЧасовВМес в виде договора");
КонецПопытки;
КонецЦикла;
Если ТипЗнч(Результат)=Тип("Число") Тогда
Запрос2 = Новый Запрос;
Запрос2.Текст ="ВЫБРАТЬ
| рбсДоговорПодпискаИТС.ДатаНачала,
| рбсДоговорПодпискаИТС.ДатаОкончания
|ИЗ
| Документ.рбсДоговор.ПодпискаИТС КАК рбсДоговорПодпискаИТС
|ГДЕ
| рбсДоговорПодпискаИТС.Ссылка = &Ссылка
| И рбсДоговорПодпискаИТС.ДатаНачала = &ДатаНачала";
Запрос2.УстановитьПараметр("Ссылка", Объект.Ссылка);
Запрос2.УстановитьПараметр("ДатаНачала", Параметры.ДатаПодпискиИТС);
РезультатЗапроса2 = Запрос2.Выполнить();
Выборка2 = РезультатЗапроса2.Выбрать();
Если Выборка2.Следующий() Тогда
КоличествоМесяцев=(Год(Выборка2.ДатаОкончания)-Год(Выборка2.ДатаНачала))*12+Месяц(Выборка2.ДатаОкончания)-Месяц(Выборка2.ДатаНачала)+Окр((День(Выборка2.ДатаОкончания)-День(Выборка2.ДатаНачала))/30);
Иначе
Сообщить("Проверьте заполнение ИТС периода");
КонецЕсли;
Иначе
Сообщить("Проверьте значение ЧасовВМес в виде договора");
КонецЕсли;
Результат=КоличествоМесяцев*Результат;
Исключение
Результат="Проверьте значение ЧасовВМес в виде договора и Периоды ИТС"
КонецПопытки;
Показать
(5) Сделайте реквизит справочника с типом хранилище значения, туда кладите файл внешней обработки, при выполнении вытаскивайте ее и запускайте экспортную функцию/процедуру в модуле объекта. Сберегает кучу времени и нервов, легко модифицировать и отлаживать и на переделку нужен час от силы. А руководство странное.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот