СКД. Отчеты с картинками
Опять баян
Тема с добавлением картинок в отчеты на СКД появляется периодически на просторах сообщества и вне его. Самыми популярными задачами являются добавление логотипа компании в шапку отчета и отображение картинок товаров.
Почти всегда эти требования появляются для прайс-листов, но бывают и исключения.
Сегодня рассмотрим решения обоих кейсов, а также новые возможности платформы для вывода картинок.
Кейс №1: Логотип в шапке отчета
Начнем с простой задачи - вывод логотипа в шапку отчета на СКД.
Хочу логотип
И так, у нас есть простой внешний отчет "Прайс-лист", в котором для номенклатуры выводятся цены в разрезе их типов. Отчет создан для типовой конфигурации "Управление торговлей" версии 11. На следующем скриншоте представлен вывод для стандартных настроек отчета.

Наша задача заключается в добавлении в шапку табличного документа отчета логотипа компании. Для этого нам необходимо программно сформировать отчет и вставить изображение логотипа. Теперь подробнее.
Подготовка
Для начала нам необходимо подготовить изображение для логотипа. Во внешний отчет добавим макет табличного документа "Логотип", в который вставим объект "Картинка" с необходимым изображением.

Не забудьте создать область табличного документа для ячеек, где находится изображение логотипа. В текущем примере область названа "Логотип". Также нужно создать область "СвернутьЛоготип", которая будет использоваться для сворачивания/разворачивания логотипа в сформированном отчете.
Теперь нам необходимо вмешаться в процесс компоновки отчета программным образом. Для этого в модуле объекта отчета в процедуре-обработчике "ПриКомпоновкеРезультата" напишем алгоритм формирования отчета. На первом этапе сформируем отчет таким, какой он был без логотипа. Алгоритм процедуры будет следующим:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Алгоритм программного исполнения отчета не имеет ничего особенного, все стандартно. Перейдем непосредственно к решению поставленной задачи. Выводить логотип из дополнительного макета будем перед выполнением процессора вывода компоновки, но после очистки табличного документа. Итоговый программный код вывода логотипа в шапке отчета приведен на следующем листинге:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ДокументРезультат.Очистить();
// +++ Выводим логотип в шапку отчета
// Получаем дополнительный макет с описанием вывода логотипа
МакетЛоготип = ПолучитьМакет("ЛоготипКомпании");
// Получаем область верхнего уровня для сворачивания логотипа
ОбластьСвернуть = МакетЛоготип.ПолучитьОбласть("СвернутьЛоготип");
// Получаем область логотипа
Область = МакетЛоготип.ПолучитьОбласть("Логотип");
ДокументРезультат.НачатьАвтогруппировкуСтрок(); //Начало группировки строк
ДокументРезультат.Вывести(ОбластьСвернуть, 1); // Вывод строки группировки на 1 уровне
ДокументРезультат.Вывести(Область, 2); // Вывод логотипа на втором уровне группировки
ДокументРезультат.ЗакончитьАвтогруппировкуСтрок();//Завершение группировки строк
// --- Выводим логотип в шапку отчета
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
На этом процесс модификации отчета закончен. Посмотрим результат работы в режиме предприятия.
В режиме предприятия
Запустим созданный отчет в режиме предприятия. Мы увидим следующую картину:
Как мы видим, в шапке табличного документа появился логотип, изображение которого мы добавили в дополнительный макет отчета. Благодаря группировке строк имеется возможность свернуть логотип.
Разумеется, предложенный способ не самый универсальный, так как при изменении логотипа компании будет необходимо изменять макет отчета в режиме конфигуратора. Более правильно было бы получить изображение из информационной базы, например из элемента справочника "Организации". К тому же в текущей реализации отчета пользователь не сможет отключить вывод логотипа, только свернуть его. Все эти недостатки решаются, но не в рамках данной статьи. Таким образом, мы получили отчет "Прайс-лист" с выводом логотипа компании.
Кейс №2: Вывод изображений номенклатуры
Теперь задача посложнее - нужно выводить изображения номенклатуры. Рассмотрим вариант решения по шагам.
Предисловие
Приходилось ли Вам решать задачу по выводу изображений в отчете, построенном на системе компоновки данных (СКД)? Если да, то наверняка возникали сложности с добавлением рисунка в результирующий табличный документ и стабильной работой отчета при изменении настроек вывода. В любом случае статья Вам будет полезна на будущее, потому что подобная задача может встретиться каждому разработчику.

Сегодня в статье рассмотрим возникающие проблемы при решении подобной задачи, а также реализацию универсального способа отображения картинок в отчете на СКД, работающего стабильно при любых изменениях варианта отчета пользователем.
В чем проблема?
Проблема с выводом картинок в отчете на СКД заключается в том, что механизм не поддерживает данную возможность сам по себе. Не смотря на то, что в конструкторе системы компоновки мы можем создавать собственные макеты, использовать их для вывода изображений не получится. При добавлении в макет объекта "Рисунок", в дальнейшем это изменение игнорируется компоновщиком.
Например, добавим в поле макета рисунок, как показано на следующем изображении:

В теории, СКД должна вывести в данной ячейке добавленный рисунок, но этого не происходит:

Как мы видим, создание собственного макета не является решением данной задачи. Использование собственного макета имеет весьма ограниченные возможности в сравнении с отчетами НЕ на СКД.
На просторах глобальной сети находил несколько вариантов решения по выводу изображений в подобных отчетах. В основном все они основывались на обработке табличного документа после вывода отчета, когда программным образом искалась колонка в табличном документе и обходилась в цикле для добавления в соответствующие ячейки рисунков. Однако после изменения настроек варианта отчета в пользовательском режиме подобные отчеты работали нестабильно. Представьте, что структура отчета вида "Список" была изменена на "Таблица". Тогда алгоритм сразу переставал работать, так как ориентироваться на колонку с изображениями уже было нельзя.
Рассмотрим универсальное решение данной задачи, работающее при любых настройках отчета и выполняемой достаточно оптимальным образом.
Универсальное решение
Так какое же решение использовать, чтобы сохранить все возможности СКД по настройке отчета и скорость его работы была на оптимальном уровне? Такое решение есть, давайте рассмотрим его подробно.
Начнем с того, что нам придется изменить макет СКД в конструкторе, но не для добавления туда картинки, а для изменения вывода ячейки, в которой будет отображаться картинка. Пример такого отчета будет делать для типовой конфигурации "Управление торговлей" версии 11. В соответствии с текущими настройками конфигурации, файлы картинок, как и все прикрепленные файлы, хранятся в регистре сведений "ДвоичныеДанныеФайлов" в ресурсе "ХранимыйФайл" (тип "ХранилищеЗначений"), при этом связь элемента справочника "Номенклатура" и значения в регистре сведений осуществляется через справочник "НоменклатураПрисоединенныеФайлы", в элементах которого хранится информация о загруженных файлах. В самой номенклатуре в реквизите "ФайлКартинки" выбирается основное изображение из справочника "НоменклатураПрисоединенныеФайлы".

Запрос отчета на СКД выбирает в запросе номенклатуру и ссылку на файл основного изображения. Если мы выведем отчет на такой стадии, то он будет выглядеть следующим образом:

Из рисунка выше мы видим, что в отчете ссылка на присоединенный файл (элемент справочника "НоменклатураПрисоединенныеФайлы") отображается в виде представления (реквизит "Наименование"). Чтобы вмешаться в процесс формирования отчета и отобразить изображение в табличном документе, нам необходимо изменить алгоритм компоновки отчета.
Для начала в обработчике "ПриКомпоновкеРезультата" модуля объекта отчета отключим стандартную обработку и сформируем отчет полностью программным образом.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; // отключаем стандартный вывод отчета - будем выводить программно
Настройки = КомпоновщикНастроек.ПолучитьНастройки();// Получаем настройки отчета
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; // Создаем данные расшифровки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; // Создаем компоновщик макета
// Инициализируем макет компоновки используя схему компоновки данных
// и созданные ранее настройки и данные расшифровки
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
// Скомпонуем результат
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ДокументРезультат.Очистить();
// Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Действия в программном коде подробно описаны в комментариях. Отмечу лишь важные моменты:
- В начале процедуры "ПриКомпоновкеРезультата" проводим инициализацию настроек.
- Далее по обычному алгоритму формируем отчет.
- Обязательно необходимо заполнить данные расшифровки, чтобы мы могли получать ссылки на данные, хранящиеся в ячейках табличного документа.
В результате выполнения отчета с внесенными изменениями, он выполнится точно таким же образом, как если бы мы никаких изменений не вносили.
Теперь самый важный момент: после вывода отчета в табличный документ (метод "Выполнить" процессора вывода) нам необходимо обойти ВСЕ ячейки табличного документа, и если в ячейке содержится поле расшифровки значения с типом "СправочникСсылка.НоменклатураПрисоединенныеФайлы", необходимо добавить в эту ячейку объект "Рисунок" и заполнить его изображением, хранящемся в регистре сведений (схему хранения изображений для справочника "Номенклатура" смотри выше). На следующем скриншоте приведен программный код для выполнения описанных действий:
// ...
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
// Заполняем рисунки для полей, в данных расшифровки которых находятся элементы справочника
// "НоменклатураПрисоединенныеФайлы"
КоличествоКолонокТаблицы = ДокументРезультат.ШиринаТаблицы; // Количество колонок в отчете
КоличествоСтрокТаблицы = ДокументРезультат.ВысотаТаблицы; // Количество строк в отчете
// Обходим все ячейки отчета
Для Кл = 1 По КоличествоКолонокТаблицы Цикл
Для Ст = 1 По КоличествоСтрокТаблицы Цикл
ТекОбласть = ДокументРезультат.Область(Ст, Кл);
// Если имеется расшифровка ячейки, то проверям наличие полей расшифровки
Если ТекОбласть.Расшифровка <> Неопределено Тогда
ПоляРасшифровки = ДанныеРасшифровки.Элементы[ТекОбласть.Расшифровка].ПолучитьПоля();
Если ПоляРасшифровки.Количество() > 0 Тогда
// Если тип значения поля расшифровки соответствует справочнику прикрепленных файлов, то
// выводим связанную картинку
Рисунок = ПолучитьИзображение(ПоляРасшифровки.Получить(0).Значение);
Если Рисунок <> Неопределено Тогда
Рис = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рис.РазмерКартинки = РазмерКартинки.Пропорционально;
Рис.Картинка = Рисунок;
Рис.Расположить(ТекОбласть);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Код имеет подробные комментарии. В общих чертах алгоритм проверяет все ячейки табличного документа на значение расшифровки "СправочникСсылка.НоменклатураПрисоединенныеФайлы". Если ячейка имеет поле расшифровки с соответствующим типом данных, то выполняется функция "ПолучитьИзображение", в качестве параметра которому передается значение расшифровки:
Функция ПолучитьИзображение(ПрисоединенныйФайл)
КартинкаПоумолчанию = Неопределено;
Если ТипЗнч(ПрисоединенныйФайл) = Тип("СправочникСсылка.НоменклатураПрисоединенныеФайлы") Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДвоичныеДанныеФайлов.ДвоичныеДанныеФайла
|ИЗ
| РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
|ГДЕ
| ДвоичныеДанныеФайлов.Файл = &Файл";
Запрос.УстановитьПараметр("Файл", ПрисоединенныйФайл);
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий(); // Получаем двоичные данные катинки
Возврат Новый Картинка(Выборка.ДвоичныеДанныеФайла.Получить(), Истина);
Иначе // Если данные отсутствуют, получаем стандартное изображение из
// дополнительного макета внешнего отчета
Возврат Новый Картинка(ПолучитьМакет("НетКартинки"));
КонецЕсли;
КонецЕсли;
Возврат КартинкаПоумолчанию;
КонецФункции
Может возникнуть логичный вопрос: "Почему не получить двоичные данные для изображений в одном запросе?". Ответ прост. Если мы будем получать изображения из регистра двоичных данных файлов в одном запросе, то очень велика вероятность получить ошибку "Недостаточно памяти", если размер выбираемых изображений будет очень большим.
Конечно, выполнять запрос в цикле тоже не правильно. Есть наиболее оптимальный способ получения изображений в нашем случае, но чтобы не усложнять пример оставим этот, относительно простой, способ получения картинок.
На этом реализация отчета закончена, посмотрим на его работу в режиме предприятия.
Что имеем
Сформируем отчет в виде простого списка номенклатуры. Результат будет следующим:

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

Таким образом, мы сделали отчет, в котором выводятся настройки практически для любой структуры вывода в настройках. Производительность отчета на приемлемом уровне: время выполнения отчета с картинками и без для 500 позиций номенклатуры изменилась незначительно (тест проводился на файловой базе). Подобный отчет будет работать в любом режиме запуска приложения (тонкий, толстый или веб-клиент). Разумеется, есть способы совершенствования предложенного способа вывода картинок в отчеты на СКД, но они выходят за рамки статьи. Думаю, что после экспериментов Вы все сделайте самостоятельно.
Платформенный путь
Хорошие новости! Платформа 1С начиная с версии 8.3.14 (причем режим совместимости тоже должен быть 8.3.14 и выше) позволяет штатными средствами выводить картинки в отчетах на СКД. Вот официальная информация. Использовать новый функционал проще простого! Нужно сделать следующие шаги:
- Убедиться, что у вас режим совместимости 8.3.14 и выше, иначе функционал не будет доступен.
- В запросе получить двоичные данные картинок в отдельном поле.
- Добавить это поле в выбранные поля.
- Добавить условное оформление для этого поля, указав отображение картинки, положение и размер. Последние две настройки по необходимости.
И так, первым делом в запросе добавляем поле с двоичными данными картинки.
ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура,
ДвоичныеДанныеФайлов.ДвоичныеДанныеФайла КАК Картинка
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
ПО Номенклатура.ФайлКартинки = ДвоичныеДанныеФайлов.Файл
Выводим поле в отчет (см. поле "Картинка", это оно самое :)).
А после настраиваем условное оформление.
Кроме настроек картинки можно задать максимальную ширину, чтобы картинки были подходящего размера. С помощью свойства "Размер картинки" не всегда удобно настраивать внешний вид выводимых изображений.
Результат будет примерно такой же, как и в предыдущих примерах.

На этом все.
Конечно, есть и некоторые ограничения. Например, картинку в шапку Вы так не выведите, но для решения большинства задач работает отлично.
Спасибо за внимание
Благодарю за интерес к статье! Это не первая, и, я надеюсь, не последняя статья про вывод изображений в отчетах на СКД на Инфостарте. Ждем появления информации об опыте наших коллег. В будущем подходы к решению подобных задач могут измениться. Будем следить за событиями.
А пока всем удачи, здоровья, успехов! Подписывайтесь на канал, оставляйте комментарии. :)
Другие ссылки
-
Картинка в таблице СКД (управляемое приложение) на примере УТ11, простое решение "в лоб" или легкая модификация стандартного отчета Прайс-Лист
- Изменение в платформе 8.3.14 в части вывода изображений в СКД
- Програмное использование отбора в СКД. Картинки с СКД (1С Предприятие 8.2)
- Продажи и остатки в картинках. УТ 11
Вступайте в нашу телеграмм-группу Инфостарт
СКД изображения картинки вывод прайс УТ УТ11
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 286155 1609 423
СКД Разработчик 1С:Предприятие 8 Бесплатно (free)
Как решить проблему с отборами по полям СКД, когда с одинаковым отбором Отчет показывает одно, а Консоль запросов другое.
16.06.2026 6417 sapervodichka 45
Инструментарий разработчика СКД Разработчик 1С 8.3 Бесплатно (free)
В этой статье представлен ПовелительОтчетов — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.
29.01.2026 9499 458 shapa_pro 31
СКД Разработчик 1С:Предприятие 8 Бесплатно (free)
Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.
29.10.2025 27152 ovetgana 112
СКД Разработчик 1С:Предприятие 8 Бесплатно (free)
Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).
01.07.2025 15863 krasnoshchekovpavel 7
СКД Разработчик Стажер 1С:Предприятие 8 Россия Бесплатно (free)
Несколько способов управления формами выбора параметров и отборов СКД.
10.04.2025 15276 Neti 0
СКД Разработчик 1С:Предприятие 8 Бесплатно (free)
Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.
27.02.2025 19889 ovetgana 50
СКД Разработчик 1С:Предприятие 8 Бесплатно (free)
СКД – инструмент, на базе которого в современных конфигурациях реализованы практически все отчеты. СКД используется в динамических списках, печатных формах и универсальных механизмах. Если построить простейший отчет может каждый разработчик, то с нюансами знакомы далеко не все. Расскажем о неочевидных на первый взгляд приемах, способных значительно повысить качество отчетов.
24.12.2024 17794 Akcium 17
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Компоновщик = новый КомпоновщикМакетаКомпоновкиДанных;
Настройки = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
МакетКомпоновки = Компоновщик.Выполнить(СхемаКомпоновкиДанных,Настройки);
ПроцессорКД = новый ПроцессорКомпоновкиДанных;
ПроцессорКД.Инициализировать(МакетКомпоновки);
ПроцессорВывода = новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.НачатьВывод();
Пока Истина Цикл
ЕлементРКД = ПроцессорКД.Следующий();
Если ЕлементРКД = Неопределено Тогда
Прервать;
КонецЕсли;
Рисунки = Новый Соответствие;
// 1. Собираем рисунки
Если ЕлементРКД.ЗначенияПараметров.Количество()>0 Тогда
Для каждого Параметр Из ЕлементРКД.ЗначенияПараметров Цикл
Если ТипЗнч(Параметр.Значение) = Тип("ХранилищеЗначения") Тогда
КартинкаТД = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
КартинкаТД.Картинка = новый Картинка(Параметр.Значение.Получить());
КартинкаТД.РазмерКартинки = РазмерКартинки.Пропорционально;
Рисунки.Вставить(Параметр.Имя,КартинкаТД);
Параметр.Значение = Параметр.Имя;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПроцессорВывода.ВывестиЭлемент(ЕлементРКД);
// 2. Вывести рисунки в табличный документ
Для каждого Рисунок Из Рисунки Цикл
ШиринаСтроки = ДокументРезультат.ШиринаТаблицы;
Для Колонка = 1 По ШиринаСтроки Цикл
ВысотаТаб = СтрЗаменить(ДокументРезультат.ВысотаТаблицы, Символы.НПП, "");
ОбластьВывода = ДокументРезультат.Область("R" + ВысотаТаб + "C" + Колонка);
Если ОбластьВывода.Текст = Рисунок.Ключ Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Рисунок.Значение.Расположить(ОбластьВывода);
ОбластьВывода.ВысотаСтроки = 100;
КонецЦикла;
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();
КонецПроцедуры ПоказатьЗдорово, не знал. Ну наконец-то сделали )).
Это, конечно, хорошо.. Но как тогда быть вот с этим?
Ну то есть 1сники чот сделали, но как это будет работать - хз )
По поводу смириться и докупить железа - еще не факт, возможно, просто расширить файл подкачки - ведь, если я правильно понимаю - если не хватает памяти реальной - она свопается на диск. Уж такого чтобы вообще "Не хватает памяти" - это либо 32битная система должна быть или же сильно маленький своп-файл..
Функция ВывестиИзображениеВОбластиТД(ДанныеКартинки, ТД, Область)
Изображение = ТД.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Изображение.РазмерКартинки = РазмерКартинки.Пропорционально;
Индекс = ТД.Рисунки.Индекс(Изображение);
//ТД.Рисунки[Индекс].Картинка = Новый Картинка(ДанныеКартинки, Истина);
//////////////////////////////////////////////////////////// ////////////////////
Картинка = Новый Картинка(ДанныеКартинки, Истина);
Размер = ДанныеКартинки.Размер();
МаксимальныйРазмер = 40000;
Если Размер > МаксимальныйРазмер Тогда
ОбрабатываемаяКартинка = Новый ОбрабатываемаяКартинка(Картинка);
Попытка
Если Картинка.ПлотностьПоВертикали() >= 150 Тогда
ОбрабатываемаяКартинка.УстановитьПлотность(72, 72);
КонецЕсли;
Исключение
КонецПопытки;
//ОбрабатываемаяКартинка.Масштабировать(Макс(10,Окр(100*МаксимальныйРазмер/Размер)));
Ширина = Картинка.Ширина();
МаксимальнаяШирина = 320;
Если Ширина > МаксимальнаяШирина Тогда
ОбрабатываемаяКартинка.УстановитьРазмер(МаксимальнаяШирина,Окр(Картинка.Высота()/Ширина*МаксимальнаяШирина));
КонецЕсли;
Картинка = ОбрабатываемаяКартинка.ПолучитьКартинку();
КонецЕсли;
ТД.Рисунки[Индекс].Картинка = Картинка;
//////////////////////////////////////////////////////////// ////////////////////
ТД.Рисунки[Индекс].Расположить(Область);
Возврат ТД.Рисунки[Индекс];
КонецФункции
ПоказатьПишите еще!
Если ТипЗнч(ПрисоединенныйФайл) = Тип("СправочникСсылка.НоменклатураПрисоединенныеФайлы") И Не ПрисоединенныйФайл.Пустая() ТогдаСпасибо за очень удобное решение.
Так же попробовал вариант из ответа 8, спасибо makc2k, тоже заработало с небольшими правками.
По времени оба варианта примерно одинаково отработали.
У нас картинки хранятся в каталогах (томах) на диске, поэтому платформенный вариант видимо не подходит.
Двоичные данные могут храниться не в базе, а в томах.
КартинкаНоменклатуры = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(ПрисоединенныйФайл);
Если ТипЗнч(КартинкаНоменклатуры) = Тип("Картинка") Тогда
Возврат КартинкаНоменклатуры;
ИначеЕсли ТипЗнч(КартинкаНоменклатуры) = Тип("ДвоичныеДанные") Тогда
Возврат Новый Картинка(КартинкаНоменклатуры);
Иначе
Возврат КартинкаПоумолчанию;
КонецЕсли;
ПоказатьПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(ПрисоединенныйФайл)где ПрисоединенныйФайл - ссылка на элемент справочника Присоединенные файлы, в итоге отчет мне вывел текстовое содержимое двоичных данных - что не есть картинка.
Здесь важно понимать, что для вывода картинки поле должно содержать ХранилищеЗначения, которое содержит Картинку.
Если я не прав - дайте пожалуйста пример.
РаботаСФайлами.ДвоичныеДанныеФайла эта функция хранилище вытягивает в двоичные данные.
Написал обработку, которая просто заполнит из основного изображения реквизит. Но по хорошему вам нужно его допустим сконвертировать до 50 пикселей, чтобы значительно уменьшить объем базы.
НоменклатурОбъект = Номенклатура.ПолучитьОбъект();
НоменклатурОбъект.КН_КартинкаДляОтчетов = Новый ХранилищеЗначения(РаботаСФайлами.ДвоичныеДанныеФайла(НоменклатурОбъект.ФайлКартинки));
НоменклатурОбъект.Записать();
И вывел в отчет.
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.НачатьВывод();
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Пока ЭлементРезультата <> Неопределено Цикл
Для Каждого ЭлементПараметра ИЗ ЭлементРезультата.ЗначенияПараметров Цикл
Если ТипЗнч(ЭлементПараметра.Значение) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
ПоляРасшифровки = ДанныеРасшифровки.Элементы[ЭлементПараметра.Значение].ПолучитьПоля();
Для Каждого ПолеРасшифровки Из ПоляРасшифровки Цикл
Если ТипЗнч(ПолеРасшифровки.Значение) = Тип("ХранилищеЗначения") и ПолеРасшифровки.Поле = "ХранимыйФайл" Тогда
ЗначениеКартинки = ПолеРасшифровки.Значение.Получить();
Если ЗначениеКартинки = Неопределено Тогда
Продолжить;
КонецЕсли;
//алгоритм вывода картинки
Рисунок = ДокументРезультат.рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = Новый Картинка(ЗначениеКартинки,Истина);
//3 это номер колонки, Высота таблицы - строка вывода
ОбластьИзображение = ДокументРезультат.область(ДокументРезультат.ВысотаТаблицы,3); //3 это номер колонки вы
Рисунок.Расположить(ОбластьИзображение);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();
ПоказатьПроцессорВывода.Вывести(ПроцессорКомпоновки);
Для НомерСтроки = 1 По ДокументРезультат.ВысотаТаблицы Цикл
Для НомерКолонки = 1 По ДокументРезультат.ШиринаТаблицы Цикл
ТекущаяОбласть = ДокументРезультат.Область(НомерСтроки,НомерКолонки);
Расшифровка = ТекущаяОбласть.расшифровка;
Если ТипЗнч(Расшифровка) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
ПоляРасшифровки = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля();
Для Каждого ПолеРасшифровки Из ПоляРасшифровки Цикл
Если ТипЗнч(ПолеРасшифровки.Значение) = Тип("ХранилищеЗначения") и ПолеРасшифровки.Поле = "ХранимыйФайл" Тогда
ЗначениеКартинки = ПолеРасшифровки.Значение.Получить();
Если ЗначениеКартинки = Неопределено Тогда
Продолжить;
КонецЕсли;
//алгоритм вывода картинки
Рисунок = ДокументРезультат.рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = Новый Картинка(ЗначениеКартинки,Истина);
//цифрой выводить жёстко номер колонки не универсально
ОбластьИзображение = ДокументРезультат.область(НомерСтроки,НомерКолонки);
Рисунок.Расположить(ОбластьИзображение);
//наведениеКрасоты
ОбластьИзображение.ВысотаСтроки = 100;
Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
Рисунок.ЦветЛинии = Новый Цвет(190,202,134);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ПоказатьДвоичныеДанныеФайлов.ДвоичныеДанныеФайла КАК Картинка,
и соединение
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНом
ПО Цены.Номенклатура = СпрНом.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
ПО СпрНом.ФайлКартинки = ДвоичныеДанныеФайлов.Файл:
Вот полный код запроса:
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
Сегменты.Номенклатура КАК Номенклатура,
Сегменты.Характеристика КАК Характеристика,
ИСТИНА КАК ИспользуетсяОтборПоСегментуНоменклатуры
ПОМЕСТИТЬ ОтборПоСегментуНоменклатуры
ИЗ
РегистрСведений.НоменклатураСегмента КАК Сегменты
{ГДЕ
Сегменты.Сегмент.* КАК СегментНоменклатуры,
Сегменты.Номенклатура.* КАК Номенклатура,
Сегменты.Характеристика.* КАК Характеристика}
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
Характеристика,
ИспользуетсяОтборПоСегментуНоменклатуры
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
Ассортимент.Номенклатура КАК Номенклатура,
Ассортимент.ОбъектПланирования КАК ОбъектПланирования,
ИСТИНА КАК ИспользуетсяОтборПоАссортименту
ПОМЕСТИТЬ ОтборПоАссортименту
ИЗ
РегистрСведений.Ассортимент.СрезПоследних(&Период) КАК Ассортимент
{ГДЕ
Ассортимент.Номенклатура.* КАК Номенклатура,
Ассортимент.ОбъектПланирования.* КАК ОбъектПланирования,
Ассортимент.КоллекцияНоменклатуры.* КАК КоллекцияНоменклатуры,
Ассортимент.РазрешеныПродажи КАК РазрешеныПродажи}
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
ОбъектПланирования,
ИспользуетсяОтборПоАссортименту
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
СвободныеОстаткиОстатки.Номенклатура,
СвободныеОстаткиОстатки.Характеристика,
СвободныеОстаткиОстатки.Склад,
СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
СвободныеОстаткиОстатки.ВРезервеСоСкладаОстаток КАК ВРезервеОстаток,
ЕСТЬNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) - ЕСТЬNULL(СвободныеОстаткиОстатки.ВРезервеСоСкладаОстаток, 0) - ЕСТЬNULL(СвободныеОстаткиОстатки.ВРезервеПодЗаказОстаток, 0) КАК Остаток,
ТоварныеОграничения.СтраховоеКоличествоЗапаса КАК СтраховоеКоличествоЗапаса,
ТоварныеОграничения.МинимальноеКоличествоЗапаса КАК МинимальноеКоличествоЗапаса,
ТоварныеОграничения.МаксимальноеКоличествоЗапаса КАК МаксимальноеКоличествоЗапаса,
ТоварныеОграничения.МетодОбеспеченияПотребностей КАК МетодОбеспеченияПотребностей
ПОМЕСТИТЬ СвободныеОстатки
ИЗ
РегистрНакопления.СвободныеОстатки.Остатки(&Период, ) КАК СвободныеОстаткиОстатки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТоварныеОграничения КАК ТоварныеОграничения
ПО &ПодстановкаТоварногоОграничения
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
ВЫБОР
КОГДА ЦеныНоменклатурыСрезПоследних.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
ТОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.ЕдиницаИзмерения
ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Упаковка
КОНЕЦ КАК Упаковка,
ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта,
ЦеныНоменклатурыСрезПоследних.Номенклатура.ЦеноваяГруппа КАК ЦеноваяГруппа,
ВЫБОР
КОГДА ЦеныНоменклатурыСрезПоследних.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
ТОГДА СвободныеОстатки.Остаток
ИНАЧЕ СвободныеОстатки.Остаток / &ТекстЗапросаКоэффициентУпаковки
КОНЕЦ КАК Остаток,
ВЫБОР
КОГДА СвободныеОстатки.Остаток <= 0 ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.НетВНаличии) ИНАЧЕ
ВЫБОР КОГДА СвободныеОстатки.Остаток <= (СвободныеОстатки.МинимальноеКоличествоЗапаса) ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.УточняйтеНаличие) ИНАЧЕ
ВЫБОР
КОГДА СвободныеОстатки.Остаток < (СвободныеОстатки.СтраховоеКоличествоЗапаса + СвободныеОстатки.МинимальноеКоличествоЗапаса) ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.Мало) ИНАЧЕ
ВЫБОР
КОГДА СвободныеОстатки.Остаток < СвободныеОстатки.МаксимальноеКоличествоЗапаса ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.Достаточно) ИНАЧЕ
ВЫБОР КОГДА СвободныеОстатки.Остаток >= СвободныеОстатки.МаксимальноеКоличествоЗапаса
ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.Много) ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.Неизвестно)
КОНЕЦ
КОНЕЦ
КОНЕЦ
КОНЕЦ
КОНЕЦ КАК ОстатокТекстом,
СвободныеОстатки.Склад КАК Склад,
СвободныеОстатки.МетодОбеспеченияПотребностей КАК МетодОбеспеченияПотребностей
ПОМЕСТИТЬ Цены
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ВидЦены В (&ВидыЦен) {((Номенклатура, Характеристика) В
(ВЫБРАТЬ
ОтборПоСегментуНоменклатуры.Номенклатура,
ОтборПоСегментуНоменклатуры.Характеристика
ИЗ
ОтборПоСегментуНоменклатуры
ГДЕ
ОтборПоСегментуНоменклатуры.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры)),
((Номенклатура) В
(ВЫБРАТЬ
ОтборПоАссортименту.Номенклатура
ИЗ
ОтборПоАссортименту
ГДЕ
ОтборПоАссортименту.ИспользуетсяОтборПоАссортименту = &ИспользуетсяОтборПоАссортименту))
}) КАК ЦеныНоменклатурыСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ СвободныеОстатки КАК СвободныеОстатки
ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = СвободныеОстатки.Номенклатура
И ЦеныНоменклатурыСрезПоследних.Характеристика = СвободныеОстатки.Характеристика
{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, {ВидЦены КАК ВидЦеныДиапазон((Номенклатура, Характеристика) В
(ВЫБРАТЬ
ОтборПоСегментуНоменклатуры.Номенклатура,
ОтборПоСегментуНоменклатуры.Характеристика
ИЗ
ОтборПоСегментуНоменклатуры
ГДЕ
ОтборПоСегментуНоменклатуры.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры)),
((Номенклатура) В
(ВЫБРАТЬ
ОтборПоАссортименту.Номенклатура
ИЗ
ОтборПоАссортименту
ГДЕ
ОтборПоАссортименту.ИспользуетсяОтборПоАссортименту = &ИспользуетсяОтборПоАссортименту))
}) КАК ЦеныНоменклатурыОтбор
ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ЦеныНоменклатурыОтбор.Номенклатура
И ЦеныНоменклатурыСрезПоследних.Характеристика = ЦеныНоменклатурыОтбор.Характеристика
}
ГДЕ
ЦеныНоменклатурыСрезПоследних.Цена > 0
{ГДЕ
ЦеныНоменклатурыОтбор.Цена КАК ЦенаОт,
ЦеныНоменклатурыОтбор.Цена КАК ЦенаДо
}
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Цены.Номенклатура,
Цены.Характеристика,
Цены.ВидЦены,
Цены.Цена,
Цены.Упаковка,
Цены.Валюта,
Цены.ЦеноваяГруппа,
Цены.Склад,
ДвоичныеДанныеФайлов.ДвоичныеДанныеФайла КАК Картинка,
ВЫБОР КОГДА Цены.Остаток <0
ТОГДА 0
ИНАЧЕ Цены.Остаток
КОНЕЦ КАК Остаток,
ВЫБОР КОГДА (Цены.МетодОбеспеченияПотребностей = ЗНАЧЕНИЕ (Перечисление.МетодыОбеспеченияПотребностей.ЗаказПодЗаказ))
ИЛИ (Цены.МетодОбеспеченияПотребностей ЕСТЬ NULL И Цены.Остаток > 0)
ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.ПодЗаказ)
ИНАЧЕ Цены.ОстатокТекстом
КОНЕЦ КАК ОстатокТекстом
{ВЫБРАТЬ
Номенклатура.*,
Характеристика.*,
ВидЦены.*,
Цена,
Упаковка.*,
Валюта.*,
ЦеноваяГруппа.*,
Склад.*}
ИЗ
Цены КАК Цены
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНом
ПО Цены.Номенклатура = СпрНом.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
ПО СпрНом.ФайлКартинки = ДвоичныеДанныеФайлов.Файл
{ГДЕ
Цены.Номенклатура.*,
Цены.Характеристика.*,
Цены.ВидЦены.*,
Цены.Цена,
Цены.Упаковка.*,
Цены.Валюта.*,
Цены.Склад.*}
} ПоказатьЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНом
ПО Цены.Номенклатура = СпрНом.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
ПО СпрНом.ФайлКартинки = ДвоичныеДанныеФайлов.Файлна
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
ПО Цены.Номенклатура.ФайлКартинки = ДвоичныеДанныеФайлов.Файлрезультат не изменился
Да, конфа старая, режим совместимости 8.3.8
Проблема в том, что просто через выбранные поля не выводится. Надо делать фото ресурсом. Но какая агрегатная функция? В группировки добавить фото нельзя, оно и логично.... В итоге для таблицы возникает ряд вопросов... Что-то неправильно делаю, или для таблицы это не работает?
Плюс в условном оформлении для "Картинка" есть вариант "выводить по ссылке" - что это значит?
ИсходнаяКартинка = Новый Картинка(РаботаСФайлами.ДвоичныеДанныеФайла(ОбластьКартинка.Расшифровка), Истина);ВЫБРАТЬ
ХранилищеФайлов.ХранилищеДвоичныхДанных.ДвоичныеДанные КАК ДвоичныеДанныеФайла,
НоменклатураПрисоединенныеФайлы.ВладелецФайла КАК ВладелецФайла
ИЗ
Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ХранилищеФайлов КАК ХранилищеФайлов
ПО НоменклатураПрисоединенныеФайлы.Ссылка = ХранилищеФайлов.Файл
ГДЕ
НоменклатураПрисоединенныеФайлы.ВладелецФайла = &ОтборПоНоменклатуре ПоказатьИ + в условном оформлении Выводить картинку = Выводить по значению, Оформляемые поля - ДвоичныеДанныеФайла
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 1125765
Создание 25.09.19 21:00
Обновление 25.09.19 21:00
Просмотры 75554
Загрузки 0
Рейтинг
406
Комментарии 72
Код открыт Да
Рубрики СКД
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)