При работе с системой 1С пользователи, особенно при попытке сохранения или отправки печатных форм, таких как ценники, в форматы PDF или по электронной почте, могут столкнуться с загадочной ошибкой: «Не определен список получаемых файлов». Эта проблема является достаточно распространенной и часто ставит в тупик как обычных пользователей, так и администраторов системы. Давайте вместе выясним причины её возникновения и рассмотрим подробные методы решения, основанные на опыте коллег и рекомендациях по работе с платформой.
Эта ошибка особенно коварна тем, что может проявляться избирательно: у одного пользователя все работает корректно, а у другого, даже с аналогичными правами, возникают постоянные сбои. Причины могут крыться как в индивидуальных настройках пользователя, так и в особенностях программного кода печатных форм, особенно если они являются внешними или доработанными.
Наиболее частой причиной возникновения ошибки «Не определен список получаемых файлов» являются поврежденные или некорректные пользовательские настройки, хранящиеся в базе данных 1С. Система хранит множество индивидуальных параметров для каждого пользователя, включая настройки печати, форм документов, расположения элементов интерфейса и многое другое. Если эти настройки по какой-либо причине становятся неактуальными или повреждаются, это может привести к невозможности корректного формирования файлов.
Самым действенным и часто первым шагом для решения проблемы является полное удаление всех сохраненных настроек для проблемного пользователя. Это заставляет систему заново инициализировать все параметры, как если бы пользователь зашел в базу в первый раз.
Почему это помогает? Сброс настроек приводит к тому, что система заново определяет устройства для печати, параметры формирования печатных форм, а также сбрасывает любые устаревшие или ошибочные ссылки на области печати, которые могли быть сохранены в пользовательских параметрах.
В некоторых случаях достаточно очистить только специфические настройки, например, связанные с печатью табличных документов. Если полный сброс настроек нежелателен (пользователь теряет все свои персональные настройки интерфейса), попробуйте более избирательный подход.
Помимо настроек в самой базе данных, рекомендуется также очищать локальный кэш 1С на компьютере пользователя. Кэш может содержать временные данные, которые также могут быть повреждены и вызывать ошибки.
C:\Users\%username%\AppData\Roaming\1C\ (для глобального кэша) и C:\Users\%username%\AppData\Local\1C\ (для локального кэша). Замените %username% на имя пользователя Windows.Если после всех попыток очистки настроек проблема сохраняется, и у вас нет времени на глубокий анализ причин, можно использовать радикальный, но рабочий метод: создать нового пользователя и перенести на него необходимые данные.
Этот метод часто используется, когда настройки пользователя настолько повреждены, что их восстановление или исправление занимает больше времени, чем создание нового профиля.
Если проблема не в пользовательских настройках, то, скорее всего, она кроется в программном коде, отвечающем за формирование печатных форм, особенно если речь идет о внешних или доработанных формах. Ошибка «Не определен список получаемых файлов» сигнализирует о том, что механизм печати 1С не может корректно определить, к каким объектам относится выводимый табличный документ, или не может правильно собрать информацию для сохранения/отправки.
УправлениеПечатью.ЗадатьОбластьПечатиДокументаОдной из ключевых процедур при формировании печатных форм является УправлениеПечатью.ЗадатьОбластьПечатиДокумента. Эта процедура связывает выводимую область табличного документа с конкретным объектом базы данных. Её отсутствие или некорректное использование — частая причина обсуждаемой ошибки, особенно когда мы формируем печатную форму для нескольких объектов (например, пачки ценников для разных товаров или документов).
Назначение процедуры: УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, СсылкаНаОбъект):
ТабличныйДокумент: сам формируемый табличный документ.НомерСтрокиНачало: номер строки, с которой начинается вывод текущей области для конкретного объекта.ОбъектыПечати: список значений, где хранятся ссылки на объекты, для которых формируется печатная форма. Это может быть как один объект, так и массив объектов.СсылкаНаОбъект: ссылка на конкретный объект, которому принадлежит текущая выводимая область.Мы должны вызывать эту процедуру внутри цикла формирования печатной формы, после вывода каждой части документа, соответствующей одному объекту.
Рассмотрим пример, как это должно выглядеть в коде:
// Предполагаем, что у нас есть цикл по ВыборкеПоДокументам
// В каждой итерации цикла ВыборкаПоДокументам.Ссылка - это ссылка на текущий объект
// В начале цикла формирования печатной формы для каждого объекта
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
// ... Здесь идет код формирования одной печатной формы (например, одного ценника)
// используя данные из ВыборкаПоДокументам.Ссылка
// Например, ТабличныйДокумент.Вывести(ОбластьМакета);
// В конце цикла, после вывода каждой области, связываем её с объектом
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаПоДокументам.Ссылка);
Если эта процедура отсутствует, или параметры передаются некорректно, система не сможет определить, какие «файлы» (части табличного документа) относятся к каким «получателям» (объектам), что и приводит к ошибке.
ОбъектыПечатиПараметр ОбъектыПечати играет центральную роль в процессе формирования и сохранения печатных форм. Это список значений, в котором каждое значение — это ссылка на объект (например, документ), для которого производится печать. Если этот список пуст, содержит некорректные или неопределенные значения, или сам механизм печати неправильно его обрабатывает, может возникнуть ошибка.
Иногда, как ни странно, решение проблемы может быть в том, чтобы передать в процедуру печати пустой список значений в качестве ОбъектыПечати, особенно для внешних печатных форм с нестандартной логикой. Это может быть актуально, когда логика печатной формы не требует явной привязки к конкретным объектам для сохранения (например, если она всегда печатает один общий отчет, а не набор документов).
Мы должны убедиться, что список ОбъектыПечати корректно инициализирован и заполнен актуальными ссылками на документы или объекты, для которых генерируется печатная форма. При передаче этого списка в модули печати убедимся, что он не содержит пустых значений.
УправлениеПечатью.ПечатныеФормыПоОбъектамВ некоторых случаях ошибка возникает глубже, в стандартных модулях платформы. Например, в модуле УправлениеПечатью, функция ПечатныеФормыПоОбъектам может возвращать пустой Соответствие вместо ожидаемой Структуры, если она не находит связанных областей с объектами печати. Это может быть связано с особенностями обработки самописных форм.
Для обхода этой ситуации мы можем использовать расширение конфигурации, чтобы изменить поведение стандартной функции:
&Вместо("ПечатныеФормыПоОбъектам")
Функция _вместо_ПечатныеФормыПоОбъектам(ПечатнаяФорма, ОбъектыПечати)
// Вызываем оригинальную функцию для получения результата
Результат = ПродолжитьВызов(ПечатнаяФорма, ОбъектыПечати);
// Проверяем, если результат является Соответствием и при этом пуст
Если ТипЗнч(Результат) = Тип("Соответствие") Тогда
Если Результат.Количество<=0 Тогда
// Если Соответствие пусто, возвращаем Структуру,
// чтобы избежать ошибки в последующих вызовах
Возврат Новый Структура("ОбъектыПечатиНеЗаданы", ПечатнаяФорма);
КонецЕсли;
КонецЕсли;
// В противном случае возвращаем оригинальный результат
Возврат Результат;
КонецФункции
Данное расширение позволяет предотвратить ошибку, принудительно возвращая структуру, когда стандартная функция возвращает пустое соответствие, что может сбить с толку дальнейшие механизмы печати.
Еще одной причиной ошибки может быть некорректное значение количества копий, сохраненное в пользовательских настройках печати. Если количество копий по какой-либо причине становится неопределенным или нулевым, это может привести к невозможности формирования печатного файла.
Мы можем реализовать механизм сброса таких некорректных настроек. Следующий код (предполагающий наличие функции в модуле) проверяет сохраненные настройки печатных форм и удаляет их, если обнаружено нулевое или незаполненное количество копий:
&НаСервере
Процедура Olp_СброкитьНастройкиЕслиЕстьНулевоеКоличествоКопий(СохраненныеНастройкиПечатныхФорм, КлючНастроек)
НадоСбрасыватьНастройки = Ложь;
Для каждого Эл из СохраненныеНастройкиПечатныхФорм Цикл
Если Не ЗначениеЗаполнено(Эл.Количество) Тогда
НадоСбрасыватьНастройки = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если НадоСбрасыватьНастройки = Истина Тогда
// Удаляем некорректные настройки для текущего пользователя
ОбщегоНазначения.ХранилищеОбщихНастроекУдалить("НастройкиПечатныхФорм", КлючНастроек, Пользователи.ТекущийПользователь);
КонецЕсли;
КонецПроцедуры
Эту процедуру мы можем вызывать в момент загрузки настроек печатных форм, чтобы предотвратить использование некорректных значений. Например, она может быть интегрирована в процедуру, которая изначально загружает настройки количества копий для печатной формы:
&НаСервере &Перед("ЗагрузитьНастройкиКоличестваКопий")
Процедура Olp_ЗагрузитьНастройкиКоличестваКопий
СохраненныеНастройкиПечатныхФорм = Новый Массив;
ИспользоватьСохраненныеНастройки = Истина;
Если ТипЗнч(Параметры.ПараметрыПечати) = Тип("Структура") И Параметры.ПараметрыПечати.Свойство("ПереопределитьПользовательскиеНастройкиКоличества") Тогда
ИспользоватьСохраненныеНастройки = Не Параметры.ПараметрыПечати.ПереопределитьПользовательскиеНастройкиКоличества;
КонецЕсли;
Если ИспользоватьСохраненныеНастройки Тогда
Если ЗначениеЗаполнено(Параметры.ИсточникДанных) Тогда
КлючНастроек = Строка(Параметры.ИсточникДанных.УникальныйИдентификатор) + "-" + Параметры.ПараметрыИсточника.ИдентификаторКоманды;
Иначе
ИменаМакетов = Параметры.ИменаМакетов;
Если ТипЗнч(ИменаМакетов) = Тип("Массив") Тогда
ИменаМакетов = СтрСоединить(ИменаМакетов, ",");
КонецЕсли;
КлючНастроек = Параметры.ИмяМенеджераПечати + "-" + ИменаМакетов;
КонецЕсли;
СохраненныеНастройкиПечатныхФорм = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПечатныхФорм", КлючНастроек, Новый Массив);
Olp_СброкитьНастройкиЕслиЕстьНулевоеКоличествоКопий(СохраненныеНастройкиПечатныхФорм, КлючНастроек); // Вызов процедуры для сброса
КонецЕсли;
КонецПроцедуры
Этот подход позволяет автоматически исправлять некорректные настройки, связанные с количеством копий, предотвращая таким образом ошибку сохранения.
Для внешних печатных форм, помимо УправлениеПечатью.ЗадатьОбластьПечатиДокумента, нам может потребоваться использовать и другие вспомогательные процедуры, такие как ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати (или аналогичные, в зависимости от конфигурации). Эти процедуры помогают корректно инициализировать и передать все необходимые параметры в подсистему печати, особенно когда речь идет о сложных сценариях печати с несколькими объектами или дополнительными параметрами вывода.
Мы должны убедиться, что все требуемые модули и процедуры, отвечающие за печать в вашей конфигурации, вызываются корректно и с правильными параметрами.
Ошибка «Не определен список получаемых файлов» в 1С может иметь множество причин, от поврежденных пользовательских настроек до специфических нюансов программного кода печатных форм. Мы рассмотрели комплексный подход к её решению, начиная с административных действий по сбросу настроек пользователя и заканчивая программными доработками для разработчиков.
Всегда начинаем с самых простых шагов — проверки и очистки пользовательских настроек и кэша. Если эти методы не помогают, мы переходим к анализу и отладке программного кода печатной формы, особенно обращая внимание на использование процедур УправлениеПечатью.ЗадатьОбластьПечатиДокумента, работу с параметром ОбъектыПечати и возможное применение расширений для обхода особенностей платформы. Систематический подход позволит нам эффективно диагностировать и устранить эту ошибку, обеспечивая стабильную работу системы печати в 1С.