Неверные параметры разностьдат 1с

Обновлено: 06.07.2024

Помогите пожалуйста добрые люди , с кодом в 1с. В обработке возникла вот такая ошибка , что делать ?

Ошибка:": Ошибка при вызове метода контекста (Выполнить)
ТаблицаИсполнителей = Запрос.Выполнить().Выгрузить();
по причине:
<(11, 56)>: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги <<?>>= &УникальныеИдентификаторыУслуг)"

Код:
Функция ДанныеУслуг(Знач ОбъектПечати, Знач УслугиПечати)

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

ТЧДокумента = СписокТЧ.Получить(ТипЗнч(ОбъектПечати));
Если ТЧДокумента = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;

// МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК УникальныйИдентификаторУслуги,

// | ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги В (&УникальныеИдентификаторыУслуг))

ИмяТаблицыДляЗапроса = ОбъектПечати.Метаданные().ПолноеИмя() + "." + ТЧДокумента;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТаблицаУслуг", ИмяТаблицыДляЗапроса);

Если УслугиПечати = Неопределено Тогда
сообщить("массив");
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", Новый Массив);
Иначе
сообщить("услуги печати");
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", УслугиПечати);
КонецЕсли;

ПустыеУслуги = (УслугиПечати = Неопределено) ИЛИ (ТипЗнч(УслугиПечати) = Тип("Массив") И УслугиПечати.Количество() = 0);

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

ТаблицаНоменклатур = ТаблицаИсполнителей.Скопировать();
ТаблицаНоменклатур.Свернуть("Номенклатура");
МассивНоменклатур = ТаблицаНоменклатур.ВыгрузитьКолонку("Номенклатура");

ТаблицаСотрудников = ТаблицаИсполнителей.Скопировать();
ТаблицаСотрудников.Свернуть("Сотрудник");
МассивСотрудников = ТаблицаСотрудников.ВыгрузитьКолонку("Сотрудник");


Возврат Новый Структура("СписокУслуг, СписокСотрудников", МассивНоменклатур, МассивСотрудников);

Задача такая: в запросе хочу получить разницу в месяцах между свойством номенклатуры типа Дата и Текущей датой, соответственно пишу: РАЗНОСТЬДАТ(ЗначенияСвойствОбъектов.Значение, &ТекДата, МЕСЯЦ) Выдает ошибку "неверные параметры РАЗНОСТЬДАТ", такое ощущение, что не видит тип у значения свойства, думаю, если сделать свойство предопределенным, то прокатит или дело в другом?

ЗначенияСвойствОбъектов.Значение - не дата, это ж дураку (1С) даже понятно.

РАЗНОСТЬДАТ(ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Значение КАК ДАТА), &ТекДата, МЕСЯЦ) у тебя поле не составного типа

Тогда возможно лудше подзапросом. В одном выразить и обрезать всё что не дата и не номенклатура, а во втором уже считать.

он наверно туда другие свойства подсовывает, в эту функцию.

Время работы оптимизатора - тоже время - не правда ли.

Ну какая-же это чушь, если в файловой нету MS SQL? А Вы предлагаете все взвалить на сей инструмент.

вложенный запрос с отбором, а затем еще одна выборка по результату . вестимо будет медленнее одной выборки

не скажи, если в файловой отбор и соединение, то будет работать в 60 раз медленнее, чем сначала отбор в подзапросе, а потом соединение.

К Отбор в подзапросе с фильтром. И примерно во столько раз медленнее во сколько записей больше без предварительного фильтра в подзапросе. Соединение это почти декартово перемножение. Чем больше записей тем выходной результат больше. Если заранее перемножемые таблицы ограничить, то и перемножать придётся уже меньшие по количеству строк таблицы. А это уже быстрее. В принципе это прописные истины. А сваливать всё на некие оптимизаторы - не хорошо это. Видел я как оракл загибается от фильдипесового подобного запроса. Беруться четыре огромные таблицы и перемножаются. Потом на результат накладываются условия, но не только условия связи, а и условия на каждую таблицу. В результате получается одна небольшая таблица. Но запрос выполняется крайне медленно. Хорошо это писал не большой специалист в оракле (сопровождает он систему) и не в самой базе, а в отчёте. Тоже сказал - есть же оптимизатор. Немного подкорректировал - наложил фильтры заранее и в подзапросы. Скорость выполнения - стало буквально несколько секунд (2-3 сек). При этом в самой базе на которой это писалось и в оракле я не специалист совсем. Специалист наверное еще быстрее бы нарисовал.

а с чего ты взял, что фильтра нет О_о . речь об одной выборке с фильтром, против выборки из подзапроса с фильтром

Речь о РАЗНОСТЬДАТ для скольки строк она будет отрабатывать, если известно что данная операция довольно-таки медленная.

Ошибка:
: Ошибка при вызове метода контекста (Выполнить)
Возврат Запрос.Выполнить().Выгрузить();
по причине:
<(9, 51)>: Ожидается выражение "ВЫБРАТЬ"
И РАЗНОСТЬДАТ(&Дата, ПланГрафик.Дата, ДЕНЬ) = -1;<<?>>-2;-3


Что неправильно делаю

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

Функция разности дат
Вообщем есть дата например 16.02.2009 надо отнять от нее 13 дней, те получить дату 03.02.2009.

Расчет периода разности дат
Здравствуйте! Кто может помочь? Не могу понять где ошибаюсь. Есть на форме четыре поля: ДатаНачала.

Расчет разности дат в запросе
Здравствуйте. Делаю собственную конфигурацию в 1с 8.3. Есть справочник &quot;ЭтапыДоговоров&quot;, с.

Вычисление разности дат
Ребят, нужна помощь. Нужно, чтобы при вводе 1 даты и 2 даты показывалась их разность (с учётом.

ну понятно что нужно поставить одно число, я бы хотел здесь поставить, допустим: минус 1(день) минус 2 (дня) и т.д.
как можно здесь такое поставить подскажите плиз

в 1) не уверен в плане синтаксиса, надо попробовать. но тем интереснее чтоб заработал он. тем более так правильнее. я бы хотел здесь поставить, допустим: минус 1(день) минус 2 (дня) и т.д.

Совсем не понятна цель вашего маневра.
Если вы хотите сделать -1 потом -2 потом -3, то почему бы сразу не сделать -6 ?)

Если нужен 1 из 3 вариантов, набросайте как написали вам постом выше.

Если нужно какой то определенный выбирать в зависимости от условия, задайте там параметр и устанавливайте его вне тела запроса.

Yulunga, Вот так прописал:

ОбщийМодуль.РаботаСПочтой1.Модуль(22,16)>: Ожидается ключевое слово 'КонецФункции' ('EndFunction')
| span И РАЗНОСТЬДАТ(&Дата, ПланГрафик.Дата, ДЕНЬ) = -1 (Проверка: Сервер)
: Обнаружено логическое завершение исходного текста модуля
| ПланГрафик.Аудитор.ЭлектроннаяПочта";<<?>> (Проверка: Сервер)
: Ожидается ключевое слово 'КонецФункции' ('EndFunction')
| span И РАЗНОСТЬДАТ(&Дата, ПланГрафик.Дата, ДЕНЬ) = -1 (Проверка: Толстый клиент (обычное приложение))
: Обнаружено логическое завершение исходного текста модуля
| ПланГрафик.Аудитор.ЭлектроннаяПочта";<<?>> (Проверка: Толстый клиент (обычное приложение))

я закончил выступления в данной теме

Можете вы подскажете:

Вот так прописал:

ОбщийМодуль.РаботаСПочтой1.Модуль(22,16)>: Ожидается ключевое слово 'КонецФункции' ('EndFunction')
| span И РАЗНОСТЬДАТ(&Дата, ПланГрафик.Дата, ДЕНЬ) = -1 (Проверка: Сервер)
: Обнаружено логическое завершение исходного текста модуля
| ПланГрафик.Аудитор.ЭлектроннаяПочта";<<?>> (Проверка: Сервер)
: Ожидается ключевое слово 'КонецФункции' ('EndFunction')
| span И РАЗНОСТЬДАТ(&Дата, ПланГрафик.Дата, ДЕНЬ) = -1 (Проверка: Толстый клиент (обычное приложение))
: Обнаружено логическое завершение исходного текста модуля
| ПланГрафик.Аудитор.ЭлектроннаяПочта";<<?>> (Проверка: Толстый клиент (обычное приложение))

Распечатать

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

Еще в этой же категории

Момент Времени и Граница, назначение, примеры использования  38
Момент времени: Фирма 1С описывает так: Предназначен для получения и хранения момента времени для объекта в базе данных. Содержит дату и время, а также ссылку на объект базы данных. Используется в качестве значений свойств и параметров методо Преобразование даты 1С в unixtime (Unix Time Stamp)  17
Как известно, unixtime содержит количество секунд, прошедших с 1 января 1970 года. Поэтому, для преобразования даты 1С в дату unixtime нам всего то нужно от нашей даты отнять дату 01.01.1970 и перевести получившееся значения в удобоваримый формат. Функция месяц прописью  11
// пример от glory01 А = Формат(20020820153309, " ДФ=ММММ" ) // А = " Август" А = Формат(ТекущаяДата(), " ДФ=ММММ" ) // А = " Март" Функция МесяцПрописью(НомерМесяца) Экспорт НомерМесяца=Число(НомерМесяца); Если НомерМесяца = 1 Тогда Воз Как вычислить разницу между двумя датами в месяцах  11
Функция РазницаДатВМесяцах(Дата1, Дата2) Экспорт ДатаНач = ?(Дата1 Дата2, Дата1, Дата2); ДатаКон = ?(Дата1 Дата2, Дата2, Дата1); Годы = Год( датаКон ) - Год( датаНач ); Месяцы = Месяц( датаКон ) - Месяц( датаНач ); Разность = месяцы + Как вычислить разницу между двумя датами в часах и минутах  10
Функция РазностьВремени(Время1, Время2); Разность = Время1 - Время2; Если Разность 0 Тогда Часов = Цел(Разность / 3600); Минут = Цел((Разность - Часов * 3600) / 60); Возврат Дата(1, 1, 1, Часов, Минут, 0); Иначе Возврат Дата(1,1,1,0,0,0); Посмотреть все в категории Работа с Датами (Временем)

Читайте также: