Программное создание и проведение документа 1С

1. imofftoo 07.04.24 19:19 Сейчас в теме
Возможно ли программное заполнение документа, если реквизиты документы имеют тип ссылка на справочника. Бот получает команду, содержащую реквизиты и на основе их создает, записывает и проводит документ. Возможно ли реализовать такой функционал, если да, то как? Код ниже работает для справочников, но не для документа.

ПРИМЕР КОМАНДЫ: ПОСТУПЛЕНИЕ БОТ ПОЛОЧНЫЙ РЕКВИЗИТ Б21 РЕКВИЗИТ ИВАНОВ ИВАН ИВАНОВИЧ РЕКВИЗИТ НОУТБУК РЕКВИЗИТ 20000 РЕКВИЗИТ 50 РЕКВИЗИТ ШТУК

Процедура ОбработкаСообщенияСистемыВзаимодействия(Сообщение, ДополнительныеПараметры)   
   Ответ = СистемаВзаимодействия.СоздатьСообщение(Сообщение.Обсуждение); 
   ТекстСообщения = Сообщение.Текст; 
   
   //Режимы работы бота и разделители текста для потоковой записи
   Режим1 = "НОМЕНКЛАТУРА";    
   Режим2 = "ЯЧЕЙКИ";
   Режим3 = "СТЕЛЛАЖИ";    
   Режим4 = "ПОСТУПЛЕНИЕ";
   Ответ.Текст = ТекстСообщения;
   Ответ.Записать();

   ВыборРежима = СтрРазделить(СтрЗаменить(ТекстСообщения, "БОТ", Символы.ПС), Символы.ПС, Истина);   
   НоваяЗапись = СтрРазделить(СтрЗаменить(ВыборРежима[1], "ЗАПИСЬ", Символы.ПС), Символы.ПС, Истина);
   Режим =  СокрП(ВыборРежима[0]);
   
   
   //Добавление номенклатуры ------------ требуется реализовать единицы измерения      
   Если Режим = Режим1 Тогда  
	    
	   	Счетчик = 0;
	   	Пока	Счетчик < НоваяЗапись.Количество() Цикл 
	   		Буфер = НоваяЗапись[Счетчик];
			ЗаписьРеквизита = СтрРазделить(СтрЗаменить(Буфер, "РЕКВИЗИТ", Символы.ПС), Символы.ПС, Истина);    
			НовыйЭлемент = Справочники.Товары.СоздатьЭлемент();   
			НовыйЭлемент.Наименование = ЗаписьРеквизита[0];    
			НовыйЭлемент.ЕдиницаИзмерения = ЗаписьРеквизита[1];
   			НовыйЭлемент.Записать();  
			Счетчик = Счетчик + 1;
		КонецЦикла;  
		Ответ.Текст = "Данные по номенклатуре успешно внесены";
		Ответ.Записать(); 
	КонецЕсли; 
	
	//Добавление ячеек
	Если Режим = Режим2 Тогда  
	    
	   	Счетчик = 0;
	   	Пока	Счетчик < НоваяЗапись.Количество() Цикл 
	   		Буфер = НоваяЗапись[Счетчик];
			ЗаписьРеквизита = СтрРазделить(СтрЗаменить(Буфер, "РЕКВИЗИТ", Символы.ПС), Символы.ПС, Истина);    
			НовыйЭлемент = Справочники.Ячейки.СоздатьЭлемент();   
			НовыйЭлемент.Наименование = ЗаписьРеквизита[0];    
			НовыйЭлемент.МаксимальнаяНагрузка = ЗаписьРеквизита[1];    
			НовыйЭлемент.ДатаУстановки = ТекущаяДата();
   			НовыйЭлемент.Записать();  
			Счетчик = Счетчик + 1;
		КонецЦикла;  
		Ответ.Текст = "Данные по ячейкам успешно внесены";
		Ответ.Записать(); 
	
	КонецЕсли; 
	
	//Добавление стеллажей
	Если Режим = Режим3 Тогда  
	    
	   	Счетчик = 0;
	   	Пока	Счетчик < НоваяЗапись.Количество() Цикл 
	   		Буфер = НоваяЗапись[Счетчик];
			ЗаписьРеквизита = СтрРазделить(СтрЗаменить(Буфер, "РЕКВИЗИТ", Символы.ПС), Символы.ПС, Истина);    
			НовыйЭлемент = Справочники.Стеллажи.СоздатьЭлемент();   
			НовыйЭлемент.Наименование = ЗаписьРеквизита[0];    
			НовыйЭлемент.МаксимальнаяНагрузка = ЗаписьРеквизита[1];    
			НовыйЭлемент.ДатаУстановки = ТекущаяДата();
   			НовыйЭлемент.Записать();  
			Счетчик = Счетчик + 1;
		КонецЦикла;  
		Ответ.Текст = "Данные по стеллажам успешно внесены";
		Ответ.Записать(); 
	КонецЕсли;  	
//ДОБАВЛЕНИЕ ДОКУМЕНТА НЕ РАБОТАЕТ
	Если Режим = Режим4 Тогда  
	    
	   	Счетчик = 0;
	   	Пока	Счетчик < НоваяЗапись.Количество() Цикл 
	   		Буфер = НоваяЗапись[Счетчик];
			ЗаписьРеквизита = СтрРазделить(СтрЗаменить(Буфер, "РЕКВИЗИТ", Символы.ПС), Символы.ПС, Истина);    
			НовыйЭлемент = Документы.Поступление.СоздатьЭлемент();   
			НовыйЭлемент.Стеллаж = ЗаписьРеквизита[0];    
			НовыйЭлемент.Ячейка = ЗаписьРеквизита[1];    
			НовыйЭлемент.Поставщик = ЗаписьРеквизита[2];    
			НовыйЭлемент.Товар = ЗаписьРеквизита[3];  
			НовыйЭлемент.Цена = ЗаписьРеквизита[4];    
			НовыйЭлемент.Количество = ЗаписьРеквизита[5];  
			НовыйЭлемент.ЕдиницаИзмерения = ЗаписьРеквизита[6];    
   			НовыйЭлемент.Записать();  
			Счетчик = Счетчик + 1;
		КонецЦикла;  
		Ответ.Текст = "Регистрация документа успешна";
		Ответ.Записать(); 
	КонецЕсли;  
	Если Режим <> Режим1 и Режим <> Режим2 и Режим <> Режим3 Тогда
		 Ответ.Текст = "НЕ РАБОТАЕТ" + ТекстСообщения;
   		 Ответ.Записать();
	 КонецЕсли;
	 
КонецПроцедуры
Показать
По теме из базы знаний
Найденные решения
2. starjevschik 07.04.24 21:23 Сейчас в теме
Точно так же, как справочник. Только надо сверяться с хелпом, чтобы не писать такого
 Документы.Поступление.СоздатьЭлемент();

и еще надо понимать, что если реквизит это ссылка, то надо ее сначала найти, а присваивать вместо ссылки строку - плохая идея.
imofftoo; user1619761; user1880116; +3 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. lefthander 08.04.24 10:28 Сейчас в теме
(1)
Возможно ли реализовать такой функционал,
Естественно возможно.
Как? Создаете документ, заполняете реквизиты и табличную часть, затем записываете и проводите. Ничего сложного.
2. starjevschik 07.04.24 21:23 Сейчас в теме
Точно так же, как справочник. Только надо сверяться с хелпом, чтобы не писать такого
 Документы.Поступление.СоздатьЭлемент();

и еще надо понимать, что если реквизит это ссылка, то надо ее сначала найти, а присваивать вместо ссылки строку - плохая идея.
imofftoo; user1619761; user1880116; +3 Ответить
3. Westonline82 08.04.24 09:42 Сейчас в теме
(2)
Точно так же, как справочник

разве не так нужно?
Документы.Поступление.СоздатьДокумент();
5. user1619761 08.04.24 10:41 Сейчас в теме
(3)
разве не так нужно?
так там же указано
(2)
Только надо сверяться с хелпом, чтобы не писать такого
Документы.Поступление.СоздатьЭлемент();
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот