Как исправить ошибку «An invalid argument was encountered» при перепроведении документов в 1С 7.7?

Программист 1С v7.7 1С:Комплексная автоматизация IT и автоматизация бизнеса
← На главную

При выполнении группового перепроведения документов через стандартную обработку в платформе 1С:Предприятие 7.7 пользователи нередко сталкиваются с системным сообщением: «An invalid argument was encountered». После нажатия кнопки подтверждения сеанс программы наглухо зависает, перестает отвечать на запросы пользователя и аварийно завершает работу. Разберем детально, почему возникает данный сбой и как его устранить на уровне программного кода и системных настроек.

Проанализируем техническую природу ошибки. Текст «An invalid argument was encountered» генерируется не встроенным языком 1С, а библиотеками интерфейса Microsoft Foundation Classes (MFC) и Win32 API операционной системы. Ошибка характерна для серверных операционных систем (в частности, Windows Server 2003 и более новых версий) при работе в терминальных сессиях RDP. Сбой происходит в диалоговой форме обработки («Сервис» – «Обработка документов») при попытке переместить виды документов между списками выбранных и исключенных объектов (кнопки с перемещением стрелками). В исходном коде типовой обработки в этот момент вызывается метод СортироватьПоПредставлению() для элемента интерфейса СписокЗначений. Платформа 1С 7.7 некорректно транслирует системные индексы строк в элементы управления Windows, что приводит к критическому исключению.

Способ 1. Исправление метода сортировки в коде обработки

Рассмотрим основной способ решения проблемы через конфигуратор или редактирование внешней обработки. Чтобы избежать интерфейсного сбоя MFC, необходимо исключить прямую сортировку визуального списка значений на форме либо заменить проблемный метод.

Разберем по шагам варианты программной корректировки:

  1. Замена прямого метода сортировки: найдем в модуле формы обработки строку с вызовом СортироватьПоПредставлению(). Если для задачи не критичен строгий алфавитный порядок по строкам представления, заменим его на базовый метод Сортировать().
  2. Сортировка через промежуточную таблицу значений: разделим интерфейс и вычисления. Выгрузим данные из экранного списка во временную таблицу значений в оперативной памяти, отсортируем данные программно и загрузим их обратно в элемент диалога.

Посмотрим на пример безопасной сортировки элементов списка через объект ТаблицаЗначений:


// Создаем временную таблицу для безопасной сортировки в памяти
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Значение");
ТЗ.НоваяКолонка("Представление", "Строка");

// Заполняем таблицу данными из исходного списка документов
Для Сч = 1 По СписокДокументов.РазмерСписка() Цикл
    ТЗ.НоваяСтрока();
    ТЗ.Значение = СписокДокументов.ПолучитьЗначение(Сч);
    ТЗ.Представление = СписокДокументов.Получить(Сч);
КонецЦикла;

// Сортируем строки в таблице значений по представлению
ТЗ.Сортировать("Представление+");

// Переносим результат обратно в экранный список значений
СписокДокументов.УдалитьВсе();
Для Сч = 1 По ТЗ.КоличествоСтрок() Цикл
    ТЗ.ПолучитьСтрокуПоНомеру(Сч);
    СписокДокументов.ДобавитьЗначение(ТЗ.Значение, ТЗ.Представление);
КонецЦикла;

Способ 2. Корректировка работы без изменения конфигурации

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

  1. Массовый перенос элементов: избегайте поочередного переноса документов одиночными кнопками со стрелками. Поочередные клики вызывают перерисовку и постоянный пересчет индексов строк. Используйте кнопку полного переноса всех позиций сразу (двойная стрелка), после чего возвращайте только те редкие элементы, которые не требуются для обработки.
  2. Режим совместимости исполняемого файла: на сервере в свойствах ярлыка или исполняемых файлов 1cv7s.exe и 1cv7.exe включим режим совместимости с Windows 2000 или Windows XP SP3. Это переключает механизмы отрисовки общих элементов управления Windows и снижает вероятность вызова исключений MFC.
  3. Проверка целостности данных: выполним процедуру «Тестирование и исправление информационной базы» и проверим корректность ссылочной целостности, чтобы исключить наличие битых ссылок и пустых типов в метаданных документов.

Способ 3. Использование альтернативных механизмов перепроведения

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

  1. Штатный пакетный режим: воспользуемся пунктом главного меню платформы «Операции» – «Проведение документов». Данный встроенный инструмент платформы работает напрямую с базой данных без сложных списочных элементов управления диалога и не подвержен ошибкам графической подсистемы.
  2. Внешняя обработка с табличным интерфейсом: применим внешнюю обработку перепроведения, где список видов документов отображается через классические флажки (галочки) или статическую таблицу, исключающую динамическую пересортировку элементов списка на лету.
← На главную