Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Проблема с данными из запроса          
rpodgornyy Подменю пользователя
сообщение 11.05.15, 19:40
Сообщение #1

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 139
Из: Киев
Спасибо сказали: 14 раз
Рейтинг: 0

Платформа 1С 8.3. Конфигурация - самописная.

Доброе время суток коллеги!

Завис на следующем вопросе. Есть регистр сведений "ПлатежиПоКоду": Измерения - Договор; Ресурсы - КодПлатежа и СуммаПлатежа. В документе, который будет делать запись в этом регистре, в "ОбработкеПроведения" пишу следующий код:

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


При проведении первого документа в КодПлатежа регистра записывается 1. При проведении второго - выдаётся "Преобразование значения к типу Число не может быть выполнено". При отладке остановка получается на строке: "КодПлатежа = Запрос.КодПлатежа + 1". Сам запрос в консоле работает корректно, выдаёт последнее значение записи регистра.

Vofka Подменю пользователя
сообщение 11.05.15, 20:00
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Что находится в переменной Запрос.КодПлатежа ? Похоже, что NULL. Попробуйте запрос написать так:

Запрос.Текст = 
"ВЫБРАТЬ
|    ЕСТЬNULL(ПлатежиПоКодуСрезПоследних.КодПлатежа, 0) КАК КодПлатежа
|ИЗ
|    РегистрСведений.ПлатежиПоКоду.СрезПоследних КАК ПлатежиПоКодуСрезПоследних
|ГДЕ
|    ПлатежиПоКодуСрезПоследних.Договор = &Договор";


Сообщение отредактировал Vofka - 11.05.15, 20:01

rpodgornyy Подменю пользователя
сообщение 11.05.15, 20:05
Сообщение #3

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 139
Из: Киев
Спасибо сказали: 14 раз
Рейтинг: 0

Цитата(Vofka @ 11.05.15, 21:00) *
Что находится в переменной Запрос.КодПлатежа ? Похоже, что NULL. Попробуйте запрос написать так:

Запрос.Текст = 
"ВЫБРАТЬ
|    ЕСТЬNULL(ПлатежиПоКодуСрезПоследних.КодПлатежа, 0) КАК КодПлатежа
|ИЗ
|    РегистрСведений.ПлатежиПоКоду.СрезПоследних КАК ПлатежиПоКодуСрезПоследних
|ГДЕ
|    ПлатежиПоКодуСрезПоследних.Договор = &Договор";


Пробовал таким образом - проблема аналогичная. В переменной Запрос.КодПлатежа изначально ничего нет. После проведения первого документа записывается "1". И в консоли запросов выдаётся "1". А дальше - ошибка...

Сообщение отредактировал rpodgornyy - 11.05.15, 20:05

Vofka Подменю пользователя
сообщение 11.05.15, 20:37
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Перед блоком

Если Запрос.Количество() = 0 Тогда


Напишите:

КодПлатежа = 0;

rpodgornyy Подменю пользователя
сообщение 11.05.15, 21:37
Сообщение #5

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 139
Из: Киев
Спасибо сказали: 14 раз
Рейтинг: 0

Увы, без изменений...

Irzik Подменю пользователя
сообщение 12.05.15, 4:30
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 35
Спасибо сказали: 2 раз
Рейтинг: 0

посмотрите тип Запрос.КодПлатежа , который получаете из запроса, мне кажется строка.

sava1 Подменю пользователя
сообщение 12.05.15, 7:20
Сообщение #7

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

После ИНаче :
Выборка.Получить; Выборка.Следующий.

Вы пытаетесь получить данные без позиционирования...

rpodgornyy Подменю пользователя
сообщение 13.05.15, 22:13
Сообщение #8

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 139
Из: Киев
Спасибо сказали: 14 раз
Рейтинг: 0

Цитата(Irzik @ 12.05.15, 5:30) *
посмотрите тип Запрос.КодПлатежа , который получаете из запроса, мне кажется строка.


Число 3.0

Цитата(sava1 @ 12.05.15, 8:20) *
После ИНаче :
Выборка.Получить; Выборка.Следующий.

Вы пытаетесь получить данные без позиционирования...


"Ошибка времени выполнения"... А можно немного подробнее, что означает получить данные без позиционирования?

sava1 Подменю пользователя
сообщение 14.05.15, 7:36
Сообщение #9

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

Цитата(rpodgornyy @ 13.05.15, 23:13) *
что означает получить данные без позиционирования

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

пробуйте так
//   Запрос = Запрос.Выполнить().Выбрать();
   Запрос = Запрос.Выполнить().Выгрузить();
    
Если Запрос.Количество() = 0 Тогда    
    КодПлатежа = 1;
Иначе
    КодПлатежа = Запрос[0].КодПлатежа + 1;
КонецЕсли;

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 23.04.24, 17:39
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!