Загрузка картинки в 1С 8.3

07.04.23

Разработка - Работа с интерфейсом

В этой статье я расскажу, как программно работать на управляемой форме с картинкой в 1С 8.3: загружать их на форму, хранить в базе и выводить картинку при открытии формы.

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

Первым делом у справочника Номенклатура создадим реквизит  Картинка с типом ХранилищеЗначений.

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

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

Создадим управляемую форму элемента справочника, у этой формы создадим реквизит СсылкаНаКартинку с типом Строка.

 

 

Поместим этот реквизит на форму в виде поля, а вид у данного поля установим «Поле картинки».

 

 

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

 

 

Создадим клиентский обработчик для события Нажатие этого поля.

 

 

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

&НаКлиенте
Процедура СсылкаНаКартинкуНажатие(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь; 
	Режим = РежимДиалогаВыбораФайла.Открытие; 
	ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим); 
	ДиалогОткрытия.ПолноеИмяФайла = ""; 
	Фильтр = "Файл Jpg (*.jpg)|*.jpg"; 
	ДиалогОткрытия.Фильтр = Фильтр; 
	ДиалогОткрытия.МножественныйВыбор = Ложь; 
	ДиалогОткрытия.Заголовок = "Выберете файл для загрузки"; 
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеЗагрузкиФайла",ЭтаФорма); 
	ДиалогОткрытия.Показать(ОписаниеОповещения);	
КонецПроцедуры

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

&НаКлиенте 
Процедура ПослеЗагрузкиФайла(ВыбранныйФайл,ДопПараметр) Экспорт 
	Если ВыбранныйФайл = Неопределено Тогда 
		Возврат; 
	КонецЕсли; 
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПомещенияФайла", ЭтаФорма); 
	НачатьПомещениеФайла(ОписаниеОповещения,, ВыбранныйФайл[0], Ложь, УникальныйИдентификатор); 
КонецПроцедуры

Следующим шагом, необходимо в процедуре ПослеПомещенияФайла, которая указана в описании оповещения процедуры ПослеЗагрузкиФайла, присвоить реквизиту формы «СсылкаНаКартинку» адрес временного хранилища.

&НаКлиенте 
Процедура ПослеПомещенияФайла(Результат, Адрес, ВыбранноеИмяФайла,ДопПараметры) Экспорт 
	Если Не Результат Тогда 
		Возврат; 
	КонецЕсли; 
	СсылкаНаКартинку = Адрес; 
	Модифицированность = Истина; 
КонецПроцедуры

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

Для того, чтобы картинка хранилась в базе, нам необходимо сохранить картинку в реквизит объекта, делать мы это будем в событии формы ПередЗаписьюНаСервере. Создадим это событие.

 

 

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

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

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

Для этого, создадим обработчик для события ПриСозданииНаСервере формы.

 

 

И в этом обработчике будем получать навигационную ссылку на картинку.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Объект.Ссылка,"Картинка");
КонецПроцедуры

Всё!  Задача выполнена. Теперь мы можем загружать картинку на форму с помощью диалога открытия файлов, сохранять картинку в базу, и выводить картинку на форму при открытии, если она имеется в базе.

 

 

Вступайте в нашу телеграмм-группу Инфостарт

фото картинка загрузка картинки загрузка фото загрузка изображения

См. также

Работа с интерфейсом Анализ учета Мониторинг 1С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Библиотека стандартных подсистем 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!

28800 руб.

27.03.2025    56399    31    25    

45

Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)

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

36000 руб.

28.08.2025    2701    1    2    

4

Работа с интерфейсом Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия Платные (руб)

Расширение «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

6000 руб.

14.01.2016    58239    20    25    

46

Работа с интерфейсом Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами (виджетами) в 1С.

5160 руб.

29.06.2020    22865    32    6    

51

Работа с интерфейсом Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

5040 руб.

06.10.2020    12852    8    8    

14

Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    43395    mrXoxot    44    

138

Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    24834    smielka    38    

111
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. efin 07.04.23 17:36 Сейчас в теме
Очень часто нужно кадрирование (crop) - подскажите, как на УФ сделать?
4. vlch 11.04.23 16:46 Сейчас в теме
(1) А зачем хранить избыточные данные? Лучше загружать уже обрезанные.

Ну всякие выверты с картинкой можно сделать в поле HTML командами разметки, JS и CSS. Способов много. Ссылку на картинку можно формировать прям по навигационной ссылке.

По этой теме много статей.
2. user1559729 07.04.23 18:03 Сейчас в теме
(0) Хотя уже немало подобных публикаций, но плюсую за простоту и доступность изложения. Продолжай.
3. CheBurator 3232 08.04.23 20:43 Сейчас в теме
Как-то выморочено. И нифига не проще чем на 7.7
5. Pah_Pah 11.04.23 18:19 Сейчас в теме
СП: НачатьПомещениеФайла - Не рекомендуется использовать, начиная с версии 8.3.15.

Самый большой вопрос, на экзамене на Спеца такое прокатывает?
OlympiaSoft; +1 Ответить
6. cheshirshik 77 12.04.23 08:23 Сейчас в теме
Отказался от отображения картинки подобным способом по причине искажения пропорций. Картинка то растягивается, то слишком большая. Использую в 1с html, как писали выше. Таких проблем там можно легко избежать.
7. vlch 12.04.23 11:05 Сейчас в теме
(6) Если задать свойство РазмерКартинки в Автоматический размер, то нарушения пропорций не будет. Маленькие картинки увеличиваться не будут, а большие уменьшаются без потери пропорций. В целом очень удобный режим.

Но иногда не обойтись без поля HTML это точно.
cheshirshik; +1 Ответить
19. user1854482 22 25.11.23 16:44 Сейчас в теме
Можно добавить еще команду на удаление картинки .Для добавления команды удаления картинки в вашу программу, создайте новую команду под названием "ОчиститьКартинку". Добавьте соответствующий элемент интерфейса на форму, а затем привяжите событие клиента к данной команде, следуя указаниям ниже:

&НаКлиенте
Процедура ОчиститКартинку(Команда)
	   СсылкаНаКартинку="" ;
	   Модифицированность=Истина;
КонецПроцедуры


Не забываем добавить код ПередЗаписьюНаСервере :
Если ПустаяСтрока(СсылкаНаКартинку) Тогда 
		ТекущийОбъект.Картинка=Неопределено;
		КонецЕсли;


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

&НаКлиенте
Процедура ОчиститКартинку(Команда)
	   СсылкаНаКартинку="" ;
	   Модифицированность=Истина;
КонецПроцедуры

Показать
24. user2023499 14.12.23 07:47 Сейчас в теме
не работало пока не поменял

ЭтоАдресВременногоХранилища(СсылкаНаКартинку) 


на

ЭтоАдресВременногоХранилища(Объект.СсылкаНаКартинку)


и в других местах тоже

За статью спасибо. полезно.
25. user2029640 19.12.23 11:39 Сейчас в теме
Не понимаю, в чем ошибка. Код верный, ошибок в синтаксе нет, а картинка все равно не вставляется после того, как я выбрала ее из папки(( В чем может быть проблема??
26. OlympiaSoft 13.02.24 21:51 Сейчас в теме
Как то так и всё работает !!!
&НаКлиенте
Процедура ЗагрузитьКартинку(Команда)
	Фильтр = "Все картинки (*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf)|*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf|" 
	+ "Формат bmp (*.bmp;*.dib;*.rle)|*.bmp;*.dib;*.rle|"
	+ "Формат JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|"
	+ "Формат TIFF (*.tif)|*.tif|"
	+ "Формат GIF (*.gif)|*.gif|"
	+ "Формат PNG (*.png)|*.png|"
	+ "Формат icon (*.ico)|*.ico|"
	+ "Формат метафайл (*.wmf;*.emf)|*.wmf;*.emf|";
	
	Диалог = новый ПараметрыДиалогаПомещенияФайлов("Выберите файл", Ложь, Фильтр);
	ОписаниеОповещения = новый ОписаниеОповещения("ПослеЗакрытияДиалогаВыбораПодписи", ЭтаФорма);
	
	НачатьПомещениеФайлаНаСервер(ОписаниеОповещения,,,, Диалог, УникальныйИдентификатор); // c 8.3.15
	// Асинх.метод НачатьПомещениеФайлаНаСервер() возвращает результат и доп.параметры.
	// Результат - переменная (с типом ОписаниеФайла)
	// Доп.параметры - в примере пустыеКонецПроцедуры
КонецПроцедуры	
&НаКлиенте
Процедура ПослеЗакрытияДиалогаВыбораПодписи (ОписаниеФайла, ДопПараметры) Экспорт
	
	Если ОписаниеФайла.ПомещениеФайлаОтменено ТОгда
		Возврат;
	КОнецЕсли;
	
	АдресВХранилище = ОписаниеФайла.Адрес; // АдресХранилища - реквизит формы
	
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	Если ЭтоАдресВременногоХранилища(АдресВХранилище)  Тогда 
		ФайлКартинки = ПолучитьИзВременногоХранилища(АдресВХранилище); 
		ТекущийОбъект.Картинка = Новый ХранилищеЗначения(ФайлКартинки); 
		УдалитьИзВременногоХранилища(АдресВХранилище); 
		АдресВХранилище = ПолучитьНавигационнуюСсылку(Объект.Ссылка,"Изображение"); 
	КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	АдресВХранилище = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Изображение");   
	Элементы.АдресКартинки.РазмерКартинки = РазмерКартинки.АвтоРазмер;
КонецПроцедуры
Показать
Прикрепленные файлы:
user1878860; Eleepod; +2 Ответить
27. пользователь 19.11.24 14:40
Сообщение было скрыто модератором.
...
28. Darllowin 27.11.24 10:12 Сейчас в теме
Спасибо, статья помогла
29. пользователь 16.06.25 21:57
Сообщение было скрыто модератором.
...
30. пользователь 16.06.25 21:59
Сообщение было скрыто модератором.
...
31. пользователь 16.06.25 22:16
Сообщение было скрыто модератором.
...
32. YA_1110624847 16.10.25 15:41 Сейчас в теме
&НаКлиенте
Процедура Импорт(Команда)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.ПолноеИмяФайла = "";
Диалог.Фильтр = "Файлы Excel (*.xlsx)|*.xlsx";
Диалог.МножественныйВыбор = Ложь;
Диалог.Показать(Новый ОписаниеОповещения("ЗавершениеВыбораФайла", ЭтаФорма));
КонецПроцедуры


&НаКлиенте
Процедура ЗавершениеВыбораФайла(ВыбранныеФайлы, ДопПараметры) Экспорт
Если ВыбранныеФайлы <> Неопределено И ВыбранныеФайлы.Количество() > 0 Тогда
ИмяФайла = ВыбранныеФайлы[0];
ОпОповЗавершенияЗагрузки = Новый ОписаниеОповещения("ЗавершениеЗагрузкаФайлаНаСервере", ЭтаФорма);
НачатьПомещениеФайлаНаСервер(ОпОповЗавершенияЗагрузки,,, , ИмяФайла, ЭтаФорма.УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры


&НаКлиенте
Процедура ЗавершениеЗагрузкаФайлаНаСервере(ОписаниеФайла, ДопПараметры) Экспорт
Если ОписаниеФайла <> Неопределено Тогда
Результат = ОбработкаФайлаНаСервере(ОписаниеФайла.Адрес);
// Результат — Истина при успешном завершении, ИЛИ строка с текстом ошибки
Если Результат = Истина Тогда
Попытка
Если ЭтаФорма.Элементы.Найти("Список") <> Неопределено Тогда
ЭтаФорма.Элементы.Список.Обновить();
Иначе
ЭтаФорма.Обновить();
КонецЕсли;

Сообщить("Импорт завершен, данные обновлены!");
Исключение
Сообщить("Ошибка при обновлении формы: " + ОписаниеОшибки());
КонецПопытки;
Иначе
// Если сервер вернул текст ошибки — показать его
Если ТипЗнч(Результат) = Тип("Строка") И Результат <> "" Тогда
Сообщить("Ошибка импорта (с сервера): " + Результат);
Иначе
Сообщить("Импорт завершился с ошибкой на сервере.");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ОбработкаФайлаНаСервере(АдресФайла) Экспорт
Если НЕ ЭтоАдресВременногоХранилища(АдресФайла) Тогда
Возврат "Неверный адрес временного хранилища";
КонецЕсли;

Попытка
Двоичные = ПолучитьИзВременногоХранилища(АдресФайла);
ИмяВремФайла = ПолучитьИмяВременногоФайла("xlsx");
Двоичные.Записать(ИмяВремФайла);

ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяВремФайла);

нСтроки = 2;
Пока Истина Цикл
Фамилия = ТабДок.ПолучитьОбласть("R" + нСтроки + "C1:R" + нСтроки + "C1").ТекущаяОбласть.Текст;
Имя = ТабДок.ПолучитьОбласть("R" + нСтроки + "C2:R" + нСтроки + "C2").ТекущаяОбласть.Текст;
Отчество = ТабДок.ПолучитьОбласть("R" + нСтроки + "C3:R" + нСтроки + "C3").ТекущаяОбласть.Текст;
Логин = ТабДок.ПолучитьОбласть("R" + нСтроки + "C4:R" + нСтроки + "C4").ТекущаяОбласть.Текст;
Пароль = ТабДок.ПолучитьОбласть("R" + нСтроки + "C5:R" + нСтроки + "C5").ТекущаяОбласть.Текст;
Роль = ТабДок.ПолучитьОбласть("R" + нСтроки + "C6:R" + нСтроки + "C6").ТекущаяОбласть.Текст;
Если ПустаяСтрока(Фамилия) И ПустаяСтрока(Имя) И ПустаяСтрока(Отчество) И ПустаяСтрока(Логин) И ПустаяСтрока(Пароль) И ПустаяСтрока(Роль) Тогда
Прервать;
КонецЕсли;

Кл = Справочники.Клиенты.СоздатьЭлемент();
Кл.Наименование = Фамилия;
Кл.Имя = Имя;
Кл.Отчество = Отчество;
Кл.Логин = Логин;
Кл.Пароль = Пароль;
Кл.Роль = Роль;
Кл.Записать();

нСтроки = нСтроки + 1;
КонецЦикла;

Исключение
// Возвращаем текст ошибки клиенту
Возврат "Ошибка на сервере: " + ОписаниеОшибки();
КонецПопытки;

// Успех
Возврат Истина;
КонецФункции
33. YA_1110624847 16.10.25 15:42 Сейчас в теме
&НаКлиенте
Процедура СсылкаНаКартинкуНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Показать(Новый ОписаниеОповещения("ПослеЗагрузкиФайла", ЭтаФорма));
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗагрузкиФайла(Файлы, ДопПараметр) Экспорт
Если Файлы = Неопределено Тогда Возврат; КонецЕсли;
НачатьПомещениеФайла(Новый ОписаниеОповещения("ПослеПомещенияФайла", ЭтаФорма), , Файлы[0], Ложь, УникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура ПослеПомещенияФайла(Результат, Адрес, ИмяФайла, ДопПараметры) Экспорт
Если Не Результат Тогда Возврат; КонецЕсли;
СсылкаНаКартинку = Адрес;
Модифицированность = Истина;
КонецПроцедуры

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Картинка");
КонецПроцедуры
34. YA_1110624847 16.10.25 18:58 Сейчас в теме
о
Прикрепленные файлы:
35. YA_1110624847 16.10.25 19:00 Сейчас в теме
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

// регистр ОстаткиТоваровНаСкладах Расход
Движения.ОстаткиТоваровНаСкладах.Записывать = Истина;
Для Каждого ТекСтрокаСписокТоваров Из СписокТоваров Цикл
Движение = Движения.ОстаткиТоваровНаСкладах.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Товар = ТекСтрокаСписокТоваров.Товар;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаСписокТоваров.Количество;
КонецЦикла;
Движения.Записать();
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиТоваровНаСкладахОстатки.Товар КАК Товар,
| ОстаткиТоваровНаСкладахОстатки.Склад КАК Склад,
| ОстаткиТоваровНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиТоваровНаСкладах.Остатки КАК ОстаткиТоваровНаСкладахОстатки
|ГДЕ
| ОстаткиТоваровНаСкладахОстатки.КоличествоОстаток < 0";

РезультатЗапроса = Запрос.Выполнить();

Если НЕ РезультатЗапроса.Пустой() Тогда
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Отказ = Истина;

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("Не хватает " + (ВыборкаДетальныеЗаписи.КоличествоОстаток * -1) + " ед. товара " + ВыборкаДетальныеЗаписи.Товар + " Склад " + ВыборкаДетальныеЗаписи.Склад);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Для отправки сообщения требуется регистрация/авторизация