Создание фото в одной базе и получение печатной формы с картинками (фото) в другой базе посредством Web-сервиса

14.11.25

Учетные задачи - Печатные формы

Постановка задачи: Есть база WMS (на УФ), в которой при отгрузках работники склада фотографируют важные отгрузки (посредством входа в базу WMS с телефона под управлением ОС Андроид через Мобильного клиента  1С) и эти фото хранятся в базе с привязкой к конкретному документу (используется периодический регистр сведений «РегистрФоток» с измерением «Документ» - тип значение «Документ.БМСкладскоеЗадание» и ресурсом «Данные» - тип значение ХранилищеЗначения). Фото делаются для «спорных случаев», когда клиент говорит «вы мне это не отгружали» и ему отсылаются фото конкретной отгрузки в качестве доказательства, что «отгружали».

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Создание фото в одной базе и получение печатной формы с картинками (фото) в другой базе по средствам Web-сервиса.:
.epf 4,90Kb
0 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Кто обсуждает ситуацию с клиентом – конечно же, менеджер, но менеджеру заходить в WMS и оттуда получать печатную форму с  фото (лениво/нет времени /нет учетки в WMS/прочее) – тут подчеркнуть нужное… Решение: менеджер у учетной базе (в данном случае это УПП) находит конкретный документ отгрузки и нажимает там кнопку «Печать фото отгрузки» и появляется печатная форма с фото отгрузки.

 

Работа механизма проверялась на платформе 8.3.27.1606.

Решение делится на два этапа:

1 Создание фото в базе WMS.

2 Получение менеджером печатной формы с картинками (фото) в базе УПП.

 

Первый этап (Создание фото в базе WMS) технически организован так:

Есть документ БМСкладскоеЗадание (СЗ). На одной из закладок которого есть кнопки для работы с фото.

 

 

Основная кнопка тут вот эта  по нажатию на нее вызывается процедура которая собственно обеспечивает фотографирование и сохранение фотографии в базе:

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

 

Вспомогательные процедуры: 

&НаСервере
Функция ЕстьЛиОбъектПроверкаНасервере()
	ДокументОбъект = РеквизитФормыВЗначение("Объект");
	возврат НЕ ДокументОбъект.ЭтоНовый(); 
КонецФункции

&НаКлиенте
Функция ПолучитьДанныеФотоСнимка()
	Данные = Неопределено;
	#Если МобильныйКлиент Тогда
		Если СредстваМультимедиа.ПоддерживаетсяФотоснимок() Тогда

			
			Если КачествоФото<10 Тогда
				пКачество = 10;
			ИначеЕсли КачествоФото>100  Тогда
				пКачество = 100;
			иначе
				пКачество = КачествоФото;
			КонецЕсли;
				Данные = СредстваМультимедиа.СделатьФотоснимок(ТипКамеры, , пКачество); 		
			Возврат Данные; 
		Иначе 
			Сообщить("Данное устройство не поддерживает фотоснимок!") 
		КонецЕсли; 
	#КонецЕсли
	
	Возврат Данные;
	
КонецФункции

&НаСервере
Процедура СоздатьСтрокуНаСерванте(Данные)
	НовРег = РегистрыСведений.РегистрФоток.СоздатьМенеджерЗаписи(); 
	НовРег.Документ = Объект.Ссылка; 
	НовРег.Данные = Новый ХранилищеЗначения(Данные,Новый СжатиеДанных(9));
	НовРег.Период = ТекущаяДата();
	НовРег.Записать(Ложь);
КонецПроцедуры


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

   Остальные кнопки и поля:

  и  - обеспечивают «листание» фоток (думаю можно организовать «листание» без кнопок этих колхозных, но у меня так сделано….) их код:

&НаКлиенте
Процедура СдвинутьФотоВлево(Команда)
	КлючЗаписи = ВернутьГлючь(Истина); 
	Если НЕ КлючЗаписи =Неопределено Тогда
		СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(КлючЗаписи, "Данные");
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура СдвинутьФотоВПраво(Команда)
	КлючЗаписи = ВернутьГлючь(Ложь);	
	Если НЕ КлючЗаписи =Неопределено Тогда
		СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(КлючЗаписи, "Данные");
	КонецЕсли;
КонецПроцедуры

 - удаление текущего фото:

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

 

 тут выставляется «качество фото» перед тем как делать фото (значения от 1 до 100) но при скажем «10» – совсем плохое качество а при «100» – фото очень много весят, экспериментально остановились на «30» но даем пользователю менять качество самому при необходимости.

 

Второй этап (Получение менеджером печатной формы с картинками (фото) в базе УПП) технически организован так:

В базе WMS опубликован Web-сервис «VigruzkaV_UPP» со свойством Sinhr, которое имеет следующие параметры:

 

 

Функция Sinhr имеет следующий код (суть: получили УИДы документов «ДокументДляХраненияВида» по которым ищем документы «БМСкладскоеЗадание» в WMS (к «БМСкладскоеЗадание»  фото привязаны)  после чего ищем фото в регистре сведений «РегистрФоток», выводим фото в табличный документ и отправляем табличный документ в УПП):

Функция Sinhr(Tab)
	ТЗВход=Tab.Получить();
	Если ТипЗнч(ТЗВход)=Тип("ТаблицаЗначений") и ТЗВход.Количество()>0 Тогда  
			
	Если ТЗВход[0].ТипЗапросаДанных="ФотоОтчет" Тогда 
		ИДДокумента=ТЗВход[0].ИДДокумента;
		ИДДокументаЗаявкаНаТранспорт=ТЗВход[0].ИДДокументаЗаявкаНаТранспорт;
		СсылкаДок=Документы.ДокументДляХраненияВида.ПолучитьСсылку(Новый УникальныйИдентификатор(ИДДокумента));
		Если ЗначениеЗаполнено(ИДДокументаЗаявкаНаТранспорт) Тогда
			СсылкаДокЗаявкаНаТранспорт=Документы.ДокументДляХраненияВида.ПолучитьСсылку(Новый УникальныйИдентификатор(ИДДокументаЗаявкаНаТранспорт));
		иначе
			СсылкаДокЗаявкаНаТранспорт=Документы.ДокументДляХраненияВида.ПолучитьСсылку(Новый УникальныйИдентификатор(ИДДокумента));
		КонецЕсли;
		з=Новый Запрос;
		Торт=  
		"ВЫБРАТЬ
		|	БМСкладскоеЗадание.Ссылка КАК Ссылка
		|ПОМЕСТИТЬ Т1
		|ИЗ
		|	Документ.БМСкладскоеЗадание КАК БМСкладскоеЗадание
		|ГДЕ
		|	(БМСкладскоеЗадание.ДокументОснование = &ДокументОснование
		|			ИЛИ БМСкладскоеЗадание.ДокументОснование = &ДокументОснованиеЗаявкаНаТранспорт)
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	БМСкладскоеЗаданиеДоки.Ссылка
		|ИЗ
		|	Документ.БМСкладскоеЗадание.Доки КАК БМСкладскоеЗаданиеДоки
		|ГДЕ
		|	БМСкладскоеЗаданиеДоки.Докумка = &ДокументОснование
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	РегистрФоток.Период КАК Период,
		|	РегистрФоток.Документ КАК Ссылка
		|ИЗ
		|	РегистрСведений.РегистрФоток КАК РегистрФоток
		|ГДЕ
		|	РегистрФоток.Документ В
		|			(ВЫБРАТЬ
		|				Т1.Ссылка КАК Ссылка
		|			ИЗ
		|				Т1 КАК Т1)
		|
		|УПОРЯДОЧИТЬ ПО
		|	Период";  
		
		з.УстановитьПараметр("ДокументОснование",СсылкаДок);    
		з.УстановитьПараметр("ДокументОснованиеЗаявкаНаТранспорт",СсылкаДокЗаявкаНаТранспорт);
		
		з.Текст=Торт;

		рез1=з.Выполнить().Выбрать();
		
		Табл=Новый ТабличныйДокумент;
		Мак=ПолучитьОбщийМакет("МакетМагазин");
		Ш=мак.ПолучитьОбласть("Шапка");
		Ш.Параметры.Объект=СсылкаДок.ВидДокумента+" №"+СсылкаДок.Номер+" от "+Формат(СсылкаДок.Дата,"ДФ=dd.MM.yyyy");
		Табл.Вывести(Ш);
		
		ОбластьКартинки = мак.ПолучитьОбласть("Изображение");
		Пока Рез1.Следующий() Цикл
			НашДок=рез1.Ссылка;
			Если не Рез1.Период=Null Тогда
				ОтборчеГ = Новый Структура;
				ОтборчеГ.Вставить("Документ",НашДок);
				ДвоичныеДанные=РегистрыСведений.РегистрФоток.ВернутьЗначениРегистра(Рез1.Период,ОтборчеГ);
				
				Рисунок = Табл.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
				Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально; 
				Индекс=Табл.Рисунки.Индекс(Рисунок);
				Табл.Рисунки[Индекс].Картинка = Новый Картинка(ДвоичныеДанные);  
				ОбластьКартинки=Табл.Область("R"+СтрЗаменить(СтрЗаменить(Строка(Табл.ВысотаТаблицы+2),Символ(160),""),".","")+"C1"
				+":R"+СтрЗаменить(СтрЗаменить(Строка(Табл.ВысотаТаблицы+28),Символ(160),""),".","")+"C3");
				
				Табл.Рисунки[Индекс].Расположить(ОбластьКартинки);
			КонецЕсли;
		КонецЦикла;
		ХЗ= Новый ХранилищеЗначения(Табл, Новый СжатиеДанных(9));  
		Возврат ХЗ;
	КонецЕсли;
КонецЕсли;
КонецФункции  

                                                           

Тут есть еще процедура «ВернутьЗначениРегистра», она имеет следующий код:

&НаСервере
Функция ВернутьЗначениРегистра(Период,Отбор) Экспорт
	Возврат РегистрыСведений.РегистрФоток.ПолучитьПоследнее(Период,Отбор).Данные.Получить();	
КонецФункции

 

Макет печатной формы-простейший, выглядит так (прилагаю файл с макетом, хотя не думаю, что имеет хоть какой-то смысл его скачивать за деньги!!!):

 

 

На стороне УПП (по кнопке «Печать фото отгрузки») вызывается процедура «БМДействияФормыФото()» которая имеет следующий код:

Процедура БМДействияФормыФото()
	Если ЭтоНовый()Тогда
		сообщить("Документ не записан.");
	иначе
		Попытка                                 
			ТЗОтправляем=Новый ТаблицаЗначений();
			ТЗОтправляем.Колонки.Добавить("ТипЗапросаДанных",Новый ОписаниеТипов("Строка"));
			ТЗОтправляем.Колонки.Добавить("ИДДокумента",Новый ОписаниеТипов("Строка"));
			ТЗОтправляем.Колонки.Добавить("ИДДокументаЗаявкаНаТранспорт",Новый ОписаниеТипов("Строка"));
			НьюСтрока=ТЗОтправляем.Добавить();
			НьюСтрока.ТипЗапросаДанных="ФотоОтчет";
			НьюСтрока.ИДДокумента=Строка(Ссылка.УникальныйИдентификатор());
			ЗаявкаТранспорт=Новый Запрос;
			ЗаявкаТранспорт.Текст=
			"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1
			|	БМЗаявкаНаТранспортРейсы.Ссылка
			|ИЗ
			|	Документ.БМЗаявкаНаТранспорт.Рейсы КАК БМЗаявкаНаТранспортРейсы
			|ГДЕ
			|	БМЗаявкаНаТранспортРейсы.ДокументОснование = &ДокументОснование";
			ЗаявкаТранспорт.УстановитьПараметр("ДокументОснование",Ссылка);
			щщ=ЗаявкаТранспорт.Выполнить().Выбрать();
			Если щщ.Следующий() тогда
				НьюСтрока.ИДДокументаЗаявкаНаТранспорт=Строка(щщ.Ссылка.УникальныйИдентификатор());
			иначе
				НьюСтрока.ИДДокументаЗаявкаНаТранспорт="";
			КонецЕсли; 
			ПутьКСервису="http://ХХХ. ХХХ. ХХХ. ХХХ /WMS_2025";
			ТЗОтправляем = Новый ХранилищеЗначения(ТЗОтправляем, Новый СжатиеДанных(9));
			ВСОпределение = Новый WSОпределения(ПутьКСервису+"/ws/VigruzkaV_UPP.1cws?wsdl"," ХХХ "," ХХХ "); //,,30
			ВСервис = ВСОпределение.Сервисы.Получить("http://www.1c.ru/SSL/VigruzkaV_UPP","VigruzkaV_UPP");
			ВТочкаВхода = ВСервис.ТочкиПодключения.Получить("VigruzkaV_UPPSoap");
			ВОперация = ВТочкаВхода.Интерфейс.Операции.Получить("Sinhr");
			ДанныеXDTO = ВСОпределение.ФабрикаXDTO.Создать(ВОперация.Параметры.Получить("TZVhod").Тип, ТЗОтправляем);
			ВСПрокси = Новый WSПрокси(ВСОпределение, "http://www.1c.ru/SSL/VigruzkaV_UPP","VigruzkaV_UPP","VigruzkaV_UPPSoap") ;
			ВСПрокси.Пользователь=" ХХХ ";
			ВСПрокси.Пароль=" ХХХ ";
			Ответ = ВСПрокси.Sinhr(ДанныеXDTO); 
			ТабДок=Ответ.Получить();
			ТабДок.Показать();
		Исключение 
			Сообщить(ОписаниеОшибки()); 
		КонецПопытки;
	КонецЕсли;
КонецПроцедуры

Результат в УПП вот такой:

 

 

В принципе это все.

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

Фото Web-сервис

См. также

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Библиотека стандартных подсистем Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    29204    77    30    

104

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM / LOGICSTARS. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM / LOGICSTAR разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    22002    32    24    

25

Печатные формы Учет рабочего времени Учет ОС и НМА Бухгалтер 1С v8.3 Бухгалтерский учет Оперативный учет Управляемые формы 1С:ERP Управление предприятием 2 1C:ERP Транспорт, автопарки, такси Оптовая торговля, дистрибуция, логистика Россия Бухгалтерский учет Управленческий учет Платные (руб)

Программа для автоматизации учета путевых листов в 1С - расширение, добавляющее в конфигурацию "ERP", документ Путевой лист и печатные формы установленных образцов для легковых и грузовых авто, расчет и списание нормативного количества топлива, отчет "Реестр путевых листов" с отбором по автомобилю и по водителю (через настройки) Позволит контролировать расход топлива, потому что сразу будет виден сверхнормативный расход.

25200 руб.

23.07.2025    1954    6    0    

6

Печатные формы Взаиморасчеты Оптовая торговля Производство готовой продукции (работ, услуг) Акт сверки Бухгалтер Пользователь Оперативный учет Управляемые формы 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

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

14400 руб.

13.03.2018    66588    242    80    

122

SALE! 15%

WEB-интеграция Программист Бизнес-аналитик 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

17280 14688 руб.

20.12.2024    4209    21    3    

21
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user-z99999 76 14.11.25 16:13 Сейчас в теме
когда клиент говорит «вы мне это не отгружали» и ему отсылаются фото конкретной отгрузки в качестве доказательства, что «отгружали»

а сразу клиент подпись при получении не может поставить? водитель у кладовщика подписывает (приемка).

фото - это юридически непонятно что...(нужно доказывать где, кто, и что сфотографировал)
2. ОператорПК 14.11.25 16:51 Сейчас в теме
(1) Товар "специфический" как и договора по нему.... фактически происходит так что товар отгружен и принят у клиента скажем условно 01.01.2025 но юридически товар наш до некого момента "Х" (который может наступить например только 01.02.2025) когда клиент товар начинает распаковывать/разбирать вот тут то и выясняется что якобы чего то не хватает. В целом слышал, что с маркетплейсами примерно такая же тема начинает набирать обороты (только там еще хуже - там фото не канает там нужно видео).
Для отправки сообщения требуется регистрация/авторизация