Вывод на основании с заполнением серийных номеров

1. Laky 15.01.23 15:09 Сейчас в теме
Здравствуйте подскажите как заполнить на основании программно, при этом что бы заполнились серийные номера из документа источника в заполняемый документ.

Я не очень разбираюсь в программировании 1с но хочется сделать такое.

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

 Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НомерЗаказ", "%0125791950-0001-1%");
Запрос.Текст = 
	"ВЫБРАТЬ
	|	ЗаказПокупателя.Ссылка
	|ИЗ
	|	Документ.ЗаказПокупателя КАК ЗаказПокупателя
	|ГДЕ
	|	ЗаказПокупателя.Комментарий ПОДОБНО &НомерЗаказ";

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

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

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

	

	
	
	Запрос = Новый Запрос; 
	Запрос.УстановитьПараметр("Ссылка", ВыборкаДетальныеЗаписиНомерЗаказа.Ссылка);
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	РеализацияТоваровУслуг.Ссылка
		|ИЗ
		|	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
		|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя
		|		ПО РеализацияТоваровУслуг.ДокументОснование = ЗаказПокупателя.Ссылка
		|			И РеализацияТоваровУслуг.Сделка = ЗаказПокупателя.Ссылка
		|ГДЕ
		|	ЗаказПокупателя.Ссылка = &Ссылка";
	
	
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписиНомерРеализации = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписиНомерРеализации.Следующий() Цикл
		// Вставить обработку выборки ВыборкаДетальныеЗаписи 
		Сообщить("Номер документа Реализации: " + ВыборкаДетальныеЗаписиНомерРеализации.Ссылка);
	КонецЦикла;
	
		

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





	
	

	
	
	
	
	
	
	
	
	
	НовыйДокумент = Документы.ВозвратТоваровОтПокупателя.СоздатьДокумент();
	НовыйДокумент.Заполнить(ВыборкаДетальныеЗаписиНомерРеализации.Ссылка);
	ФормаДок = НовыйДокумент.ПолучитьФорму();
	ФормаДок.ПараметрОснование = ВыборкаДетальныеЗаписиНомерРеализации.Ссылка;
	ФормаДок.Открыть();
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. pavel06 2 16.01.23 18:02 Сейчас в теме
Вам очевидно нужно передавать параметры в запросы далее через переменные,
т.е., например писать в1-ом запросе

Пока ВыборкаДетальныеЗаписиНомерЗаказа.Следующий() Цикл  
    Сообщить("Номер документа Заказа: " + ВыборкаДетальныеЗаписиНомерЗаказа.Ссылка);
 НомДокЗак=ВыборкаДетальныеЗаписиНомерЗаказа.Ссылка;
КонецЦикла;


Во 2-ом:
Запрос.УстановитьПараметр("Ссылка", НомДокЗак);


И

Пока ВыборкаДетальныеЗаписиНомерРеализации.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи 
        Сообщить("Номер документа Реализации: " + ВыборкаДетальныеЗаписиНомерРеализации.Ссылка);
     НомДокРеал=ВыборкаДетальныеЗаписиНомерРеализации.Ссылка;
    КонецЦикла;


В 3-ем:
Запрос.УстановитьПараметр("Ссылка", НомДокРеал);


И при создании документа соответственно

НовыйДокумент = Документы.ВозвратТоваровОтПокупателя.СоздатьДокумент();
    НовыйДокумент.Заполнить(НомДокРеал);
    ФормаДок = НовыйДокумент.ПолучитьФорму();
    ФормаДок.ПараметрОснование = НомДокРеал;
    ФормаДок.Открыть();


Т.е. считать, что Выборки работают только в пределах циклов Пока.

Новый документ тоже весь не заполнится автоматом как вам бы хотелось, я думаю, а нужно поля и таб.части его заполнять по очереди.
Сер.номера вы только выведете на экран, если запросы правильные.
3. Laky 16.01.23 18:42 Сейчас в теме
так код и так работает в том виде что я предоставил, единственное я не знаю как заполнить серийные номера в документ,

Сейчас документ заполняется но без серийных номеров.
Не могли бы вы помочь с кодом заполнения серийных номеров
4. pavel06 2 16.01.23 20:03 Сейчас в теме
(3)
Сейчас документ заполняется но без серийных номеров


И номенклатура все позиции заполняются в ВозвратТоваровОтПокупателя по документу источнику? У вас эта конфигурация с обыкновенными формами, неуправляемыми? Серийных номеров много?

Можно, наверно, перед 3-им запросом создать ТаблицуЗначений с колонками НомерСтроки и СерийныйНомер,
в нее в цикле 3-его запроса Пока записать номера строк и сер.номера, чтоб они не только выводились на экран, но и где-то сохранены были. (Идея та же, что с переменными).

А потом, после оператора заполнения документа его сохранить(если он нормально заполняется у вас), потом добавить в его табличную часть Серийные номера номера строк и сер.номера из ТаблицыЗначений. Потом снова сохранить документ.
Потом уже можно открывать его в форме для просмотра. Примерно так я бы пробовал.
5. Laky 17.01.23 18:34 Сейчас в теме
(4)
И номенклатура все позиции заполняются в ВозвратТоваровОтПокупателя по документу источнику?


Да
(4)
У вас эта конфигурация с обыкновенными формами, неуправляемыми?


да

(4)
Серийных номеров много?

все зависит от документа реализации бывает много бывает 1

(4)
Можно, наверно, перед 3-им запросом создать ТаблицуЗначений с колонками НомерСтроки и СерийныйНомер,
в нее в цикле 3-его запроса Пока записать номера строк и сер.номера, чтоб они не только выводились на экран, но и где-то сохранены были. (Идея та же, что с переменными).


не могли бы вы показать пример как это все что вы описали сделать? с учетом того что бывает один товарная позиция но продажа его 5 шт значит 5 серийников. а если два товара то у второго тоже количество серийников тоже зависит от того сколько продано.
6. pavel06 2 19.01.23 13:04 Сейчас в теме
(5)
не могли бы вы показать пример как это все что вы описали сделать?


Я вообще-то не программист 1С, а только время от времени, что-то такое делаю.
Поэтому открываю https://helpme1s.ru/tablica-znachenij-v-yazyke-1s-8-v-primerax
и копирую перед 3-им запросом:

/// Как создать таблицу значений в 1с 8.3, 8.2
 
    // с таблицей значений можно работать только на сервере 
    ТабСер = Новый ТаблицаЗначений;    
 
    /// Как добавить колонки в таблицу значений в 1с 8.3, 8.2
 
    ТабСер.Колонки.Добавить("Владелец");
    ТабСер.Колонки.Добавить("НомерСтр");
    ТабСер.Колонки.Добавить("СерНом");
    
Показать


Внутри цикла Пока 3-его запроса
(если там серийные номера вам сообщаются нормально)

Сообщить("Серийные Номера: " + ВыборкаДетальныеЗаписиСерийныеНомера.СерийныйНомер);
Стр = ТабСер.Добавить();
     Стр.Владелец = ВыборкаДетальныеЗаписиСерийныеНомера.Наименование;
    Стр.НомерСтр = ВыборкаДетальныеЗаписиСерийныеНомера.НомерСтроки;
    Стр.СерНом = ВыборкаДетальныеЗаписиСерийныеНомера.СерийныйНомер;


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

Потом после НовыйДокумент.Заполнить( видимо надо НовыйДокумент.Сохранить();
и смотреть в вашем конфигураторе как в документе устроена его табличная часть про серийные номера с привязкой к владельцу серномера, как ее колонки называются, чтоб туда из ТабСер эти строчки добавлять(если надо, типы значений переделывать),
типа, например,
Для Каждого Стр Из ТабСер Цикл
НоваяСтрока.ИмяТабЧасти.Добавить(); 
НоваяСтрока.СерийныйНомер=Стр.СерНом
НоваяСтрока.ВладелцСерийногоНомера=Стр.Наименование;
КонецЦикла;
НовыйДокумент.Сохранить();


или по-другому в зависимости от вашей конфигурвции. (Может в регистре сведений еще эти серномера хранятся и туда надо заносить)

Потом смотреть, что получается в документе (на тестовой базе) и поправлять
Оставьте свое сообщение

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