Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Несовместимое поведение ЧтениеДанных.Пропустить() #1113

Closed
Mr-Rm opened this issue Jul 21, 2021 · 2 comments

Comments

@Mr-Rm
Copy link
Collaborator

Mr-Rm commented Jul 21, 2021

Опишите ошибку
Для объекта ЧтениеДанных поведение метода Пропустить() отличается от базовой платформы.

  1. Отсутствует проверка типа параметра:
Данные = ПолучитьДвоичныеДанныеИзСтроки("123456");
Чтение = Новый ЧтениеДанных(Данные);
Чтение.Пропустить("2");  // работает
Чтение.Пропустить(Истина);  // работает

Должно падать с ошибкой "Несоответствие типов (параметр номер '1')"

  1. Отсутствует проверка значения параметра:
Данные = ПолучитьДвоичныеДанныеИзСтроки("123456");
Чтение = Новый ЧтениеДанных(Данные);
Чтение.Пропустить(2);
Чтение.Пропустить(-1);  // работает (только для позиционируемых потоков!)
Стр = Чтение.ПрочитатьСтроку(); // Стр = "23456"

Должно падать с ошибкой "Недопустимое значение числа"

И самое интересное:
3. Возвращаемый результат соответствует описанию, но не соответствует поведению

Данные = ПолучитьДвоичныеДанныеИзСтроки("123456");
Чтение = Новый ЧтениеДанных(Данные);
Рез1 = Чтение.Пропустить(2); // Рез1 = 2
Рез2 = Чтение.Пропустить(0); // Рез1 = 0
Рез3 = Чтение.Пропустить(1); // Рез1 = 1
Стр = Чтение.ПрочитатьСтроку(); // Стр = "456"

По описанию (Синтакс-помощник Конфигуратора или Справка EDT до версии 8.3.19 включительно)

Возвращаемое значение:
Тип: Число.
Количество фактически пропущенных данных.

Реально 1С возвращает позицию в потоке:
Рез1 = 2, Рез2 = 2, Рез3 = 3

В онлайн документации ни описания, ни примера работы с возвращаемым ЧтениеДанных.Пропустить() значением не обнаружилось.

В дополнение, в 1С:Исполнителе ЧтениеДанных.Пропустить() работает согласно описанию - возвращает количество фактически пропущенных данных.

@EvilBeaver
Copy link
Owner

ЧтениеДанных реализовывалось по остаточному принципу, т.к. это был новый механизм и опыт работы с ним не накоплен. Там может быть много ошибок еще.

@Mr-Rm
Copy link
Collaborator Author

Mr-Rm commented Jul 22, 2021

Ошибки выявляются в процессе раскручивания от #1080.
Проблема в фактическом отсутствии внятной и полной документации к 1С.
По п.1: есть функции, допускающие приведение типов, а есть требующие строгого соответствия. Нигде (?) не документировано.
По п.2 вопросов нет, это ошибка реализации. Но допустимые значения параметров и поведение при недопустимых также не документированы для подавляющего большинства функций.
Пункт 3 - баг 1С, явное расхождение документации и реального поведения. В какую сторону исправлять?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants