Почему возникает ошибка «Не определен список получаемых файлов» при сохранении ценников в 1С и как её исправить?

Программист 1С v8.3 (Управляемые формы) Торговля и дистрибуция
← На главную

При работе с системой 1С пользователи, особенно при попытке сохранения или отправки печатных форм, таких как ценники, в форматы PDF или по электронной почте, могут столкнуться с загадочной ошибкой: «Не определен список получаемых файлов». Эта проблема является достаточно распространенной и часто ставит в тупик как обычных пользователей, так и администраторов системы. Давайте вместе выясним причины её возникновения и рассмотрим подробные методы решения, основанные на опыте коллег и рекомендациях по работе с платформой.

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

Решение 1: Проверка и очистка пользовательских настроек

Наиболее частой причиной возникновения ошибки «Не определен список получаемых файлов» являются поврежденные или некорректные пользовательские настройки, хранящиеся в базе данных 1С. Система хранит множество индивидуальных параметров для каждого пользователя, включая настройки печати, форм документов, расположения элементов интерфейса и многое другое. Если эти настройки по какой-либо причине становятся неактуальными или повреждаются, это может привести к невозможности корректного формирования файлов.

Полная очистка настроек пользователя

Самым действенным и часто первым шагом для решения проблемы является полное удаление всех сохраненных настроек для проблемного пользователя. Это заставляет систему заново инициализировать все параметры, как если бы пользователь зашел в базу в первый раз.

  1. Перейдите в меню «Администрирование».
  2. Выберите пункт «Настройки пользователей и прав».
  3. Откройте раздел «Пользователи».
  4. Найдите и выберите пользователя, у которого возникает ошибка.
  5. Перейдите к его настройкам (обычно через кнопку «Настройки» или двойным кликом по пользователю).
  6. Найдите опцию для очистки всех сохраненных настроек. В различных конфигурациях эта опция может называться по-разному, например, «Очистить все настройки пользователя» или быть представленной в виде списка, где можно удалить все элементы. Если такой опции нет, вам может потребоваться удалить настройки вручную через стандартные механизмы работы с хранилищем общих настроек или через внешнюю обработку.
  7. После очистки настроек попросите пользователя повторить операцию сохранения ценников.

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

Частичная очистка настроек и очистка кэша

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

  1. Через тот же раздел «Настройки пользователей и прав», перейдите к настройкам проблемного пользователя.
  2. Поищите настройки, относящиеся к «Настройкам печати табличных документов» или аналогичным параметрам, и удалите только их.

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

  1. Закройте все сеансы 1С для проблемного пользователя.
  2. Перейдите в проводнике по пути: C:\Users\%username%\AppData\Roaming\1C\ (для глобального кэша) и C:\Users\%username%\AppData\Local\1C\ (для локального кэша). Замените %username% на имя пользователя Windows.
  3. В этих папках найдите каталоги, названия которых состоят из длинной последовательности символов (GUID). Это кэши баз данных. Удалите их целиком или переместите в другую папку для резервного копирования.
  4. После очистки кэша запустите 1С и проверьте работу.

Создание нового пользователя как обходное решение

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

  1. Создайте в базе 1С нового пользователя с правами, аналогичными проблемному.
  2. Используйте специализированные обработки для изменения ссылок на объекты, созданные старым пользователем, на нового пользователя (например, документы, отчеты, обработки). Это можно сделать, если старый пользователь является автором документов, и вам важно сохранить эту информацию для нового. Если это не критично, можно пропустить этот шаг.
  3. Пометьте старого пользователя на удаление.
  4. Удалите помеченные объекты (старого пользователя) стандартными средствами 1С.

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

Решение 2: Программные доработки и анализ кода печатных форм

Если проблема не в пользовательских настройках, то, скорее всего, она кроется в программном коде, отвечающем за формирование печатных форм, особенно если речь идет о внешних или доработанных формах. Ошибка «Не определен список получаемых файлов» сигнализирует о том, что механизм печати 1С не может корректно определить, к каким объектам относится выводимый табличный документ, или не может правильно собрать информацию для сохранения/отправки.

Корректное использование УправлениеПечатью.ЗадатьОбластьПечатиДокумента

Одной из ключевых процедур при формировании печатных форм является УправлениеПечатью.ЗадатьОбластьПечатиДокумента. Эта процедура связывает выводимую область табличного документа с конкретным объектом базы данных. Её отсутствие или некорректное использование — частая причина обсуждаемой ошибки, особенно когда мы формируем печатную форму для нескольких объектов (например, пачки ценников для разных товаров или документов).

Назначение процедуры: УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, СсылкаНаОбъект):

Мы должны вызывать эту процедуру внутри цикла формирования печатной формы, после вывода каждой части документа, соответствующей одному объекту.

Рассмотрим пример, как это должно выглядеть в коде:


// Предполагаем, что у нас есть цикл по ВыборкеПоДокументам
// В каждой итерации цикла ВыборкаПоДокументам.Ссылка - это ссылка на текущий объект

// В начале цикла формирования печатной формы для каждого объекта
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;

// ... Здесь идет код формирования одной печатной формы (например, одного ценника)
// используя данные из ВыборкаПоДокументам.Ссылка
// Например, ТабличныйДокумент.Вывести(ОбластьМакета);

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

Если эта процедура отсутствует, или параметры передаются некорректно, система не сможет определить, какие «файлы» (части табличного документа) относятся к каким «получателям» (объектам), что и приводит к ошибке.

Анализ и обработка параметра ОбъектыПечати

Параметр ОбъектыПечати играет центральную роль в процессе формирования и сохранения печатных форм. Это список значений, в котором каждое значение — это ссылка на объект (например, документ), для которого производится печать. Если этот список пуст, содержит некорректные или неопределенные значения, или сам механизм печати неправильно его обрабатывает, может возникнуть ошибка.

Иногда, как ни странно, решение проблемы может быть в том, чтобы передать в процедуру печати пустой список значений в качестве ОбъектыПечати, особенно для внешних печатных форм с нестандартной логикой. Это может быть актуально, когда логика печатной формы не требует явной привязки к конкретным объектам для сохранения (например, если она всегда печатает один общий отчет, а не набор документов).

Мы должны убедиться, что список ОбъектыПечати корректно инициализирован и заполнен актуальными ссылками на документы или объекты, для которых генерируется печатная форма. При передаче этого списка в модули печати убедимся, что он не содержит пустых значений.

Расширение функции УправлениеПечатью.ПечатныеФормыПоОбъектам

В некоторых случаях ошибка возникает глубже, в стандартных модулях платформы. Например, в модуле УправлениеПечатью, функция ПечатныеФормыПоОбъектам может возвращать пустой Соответствие вместо ожидаемой Структуры, если она не находит связанных областей с объектами печати. Это может быть связано с особенностями обработки самописных форм.

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


&Вместо("ПечатныеФормыПоОбъектам")
Функция _вместо_ПечатныеФормыПоОбъектам(ПечатнаяФорма, ОбъектыПечати)

    // Вызываем оригинальную функцию для получения результата
    Результат = ПродолжитьВызов(ПечатнаяФорма, ОбъектыПечати);

    // Проверяем, если результат является Соответствием и при этом пуст
    Если ТипЗнч(Результат) = Тип("Соответствие") Тогда
        Если Результат.Количество<=0 Тогда
            // Если Соответствие пусто, возвращаем Структуру,
            // чтобы избежать ошибки в последующих вызовах
            Возврат Новый Структура("ОбъектыПечатиНеЗаданы", ПечатнаяФорма);
        КонецЕсли;
    КонецЕсли;

    // В противном случае возвращаем оригинальный результат
    Возврат Результат;

КонецФункции

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

Проверка сохраненных настроек количества копий

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

Мы можем реализовать механизм сброса таких некорректных настроек. Следующий код (предполагающий наличие функции в модуле) проверяет сохраненные настройки печатных форм и удаляет их, если обнаружено нулевое или незаполненное количество копий:


&НаСервере
Процедура Olp_СброкитьНастройкиЕслиЕстьНулевоеКоличествоКопий(СохраненныеНастройкиПечатныхФорм, КлючНастроек)
    НадоСбрасыватьНастройки = Ложь;
    Для каждого Эл из СохраненныеНастройкиПечатныхФорм Цикл
        Если Не ЗначениеЗаполнено(Эл.Количество) Тогда
            НадоСбрасыватьНастройки = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Если НадоСбрасыватьНастройки = Истина Тогда
        // Удаляем некорректные настройки для текущего пользователя
        ОбщегоНазначения.ХранилищеОбщихНастроекУдалить("НастройкиПечатныхФорм", КлючНастроек, Пользователи.ТекущийПользователь);
    КонецЕсли;
КонецПроцедуры

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


&НаСервере &Перед("ЗагрузитьНастройкиКоличестваКопий")
Процедура Olp_ЗагрузитьНастройкиКоличестваКопий
    СохраненныеНастройкиПечатныхФорм = Новый Массив;
    ИспользоватьСохраненныеНастройки = Истина;
    Если ТипЗнч(Параметры.ПараметрыПечати) = Тип("Структура") И Параметры.ПараметрыПечати.Свойство("ПереопределитьПользовательскиеНастройкиКоличества") Тогда
        ИспользоватьСохраненныеНастройки = Не Параметры.ПараметрыПечати.ПереопределитьПользовательскиеНастройкиКоличества;
    КонецЕсли;
    Если ИспользоватьСохраненныеНастройки Тогда
        Если ЗначениеЗаполнено(Параметры.ИсточникДанных) Тогда
            КлючНастроек = Строка(Параметры.ИсточникДанных.УникальныйИдентификатор) + "-" + Параметры.ПараметрыИсточника.ИдентификаторКоманды;
        Иначе
            ИменаМакетов = Параметры.ИменаМакетов;
            Если ТипЗнч(ИменаМакетов) = Тип("Массив") Тогда
                ИменаМакетов = СтрСоединить(ИменаМакетов, ",");
            КонецЕсли;
            КлючНастроек = Параметры.ИмяМенеджераПечати + "-" + ИменаМакетов;
        КонецЕсли;
        СохраненныеНастройкиПечатныхФорм = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПечатныхФорм", КлючНастроек, Новый Массив);
        Olp_СброкитьНастройкиЕслиЕстьНулевоеКоличествоКопий(СохраненныеНастройкиПечатныхФорм, КлючНастроек); // Вызов процедуры для сброса
    КонецЕсли;
КонецПроцедуры

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

Дополнительные методы для внешних печатных форм

Для внешних печатных форм, помимо УправлениеПечатью.ЗадатьОбластьПечатиДокумента, нам может потребоваться использовать и другие вспомогательные процедуры, такие как ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати (или аналогичные, в зависимости от конфигурации). Эти процедуры помогают корректно инициализировать и передать все необходимые параметры в подсистему печати, особенно когда речь идет о сложных сценариях печати с несколькими объектами или дополнительными параметрами вывода.

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

Заключение

Ошибка «Не определен список получаемых файлов» в 1С может иметь множество причин, от поврежденных пользовательских настроек до специфических нюансов программного кода печатных форм. Мы рассмотрели комплексный подход к её решению, начиная с административных действий по сбросу настроек пользователя и заканчивая программными доработками для разработчиков.

Всегда начинаем с самых простых шагов — проверки и очистки пользовательских настроек и кэша. Если эти методы не помогают, мы переходим к анализу и отладке программного кода печатной формы, особенно обращая внимание на использование процедур УправлениеПечатью.ЗадатьОбластьПечатиДокумента, работу с параметром ОбъектыПечати и возможное применение расширений для обхода особенностей платформы. Систематический подход позволит нам эффективно диагностировать и устранить эту ошибку, обеспечивая стабильную работу системы печати в 1С.

← На главную