Здравствуйте подскажите как заполнить на основании программно, при этом что бы заполнились серийные номера из документа источника в заполняемый документ.
Я не очень разбираюсь в программировании 1с но хочется сделать такое.
Вот что я сейчас сделал, у меня заполняется нужный документ, но в нем не заполняются серийные номера. Конфигурация Управления торговли для Казахстана 2.2 помогите доделать код для получения нужного результата.
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НомерЗаказ", "%0125791950-0001-1%");
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказПокупателя.Ссылка
|ИЗ
| Документ.ЗаказПокупателя КАК ЗаказПокупателя
|ГДЕ
| ЗаказПокупателя.Комментарий ПОДОБНО &НомерЗаказ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписиНомерЗаказа = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписиНомерЗаказа.Следующий() Цикл
Сообщить("Номер документа Заказа: " + ВыборкаДетальныеЗаписиНомерЗаказа.Ссылка);
КонецЦикла;
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", ВыборкаДетальныеЗаписиНомерЗаказа.Ссылка);
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя
| ПО РеализацияТоваровУслуг.ДокументОснование = ЗаказПокупателя.Ссылка
| И РеализацияТоваровУслуг.Сделка = ЗаказПокупателя.Ссылка
|ГДЕ
| ЗаказПокупателя.Ссылка = &Ссылка";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписиНомерРеализации = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписиНомерРеализации.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
Сообщить("Номер документа Реализации: " + ВыборкаДетальныеЗаписиНомерРеализации.Ссылка);
КонецЦикла;
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", ВыборкаДетальныеЗаписиНомерРеализации.Ссылка);
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслугСерийныеНомера.НомерСтроки,
| РеализацияТоваровУслугСерийныеНомера.СерийныйНомер,
| РеализацияТоваровУслугСерийныеНомера.СерийныйНомер.Владелец.Наименование
|ИЗ
| Документ.РеализацияТоваровУслуг.СерийныеНомера КАК РеализацияТоваровУслугСерийныеНомера
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| ПО РеализацияТоваровУслугСерийныеНомера.Ссылка = РеализацияТоваровУслуг.Ссылка
|ГДЕ
| РеализацияТоваровУслуг.Ссылка = &Ссылка";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписиСерийныеНомера = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписиСерийныеНомера.Следующий() Цикл
Сообщить("Серийные Номера: " + ВыборкаДетальныеЗаписиСерийныеНомера.СерийныйНомер);
КонецЦикла;
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
НовыйДокумент = Документы.ВозвратТоваровОтПокупателя.СоздатьДокумент();
НовыйДокумент.Заполнить(ВыборкаДетальныеЗаписиНомерРеализации.Ссылка);
ФормаДок = НовыйДокумент.ПолучитьФорму();
ФормаДок.ПараметрОснование = ВыборкаДетальныеЗаписиНомерРеализации.Ссылка;
ФормаДок.Открыть();
Т.е. считать, что Выборки работают только в пределах циклов Пока.
Новый документ тоже весь не заполнится автоматом как вам бы хотелось, я думаю, а нужно поля и таб.части его заполнять по очереди.
Сер.номера вы только выведете на экран, если запросы правильные.
Сейчас документ заполняется но без серийных номеров
И номенклатура все позиции заполняются в ВозвратТоваровОтПокупателя по документу источнику? У вас эта конфигурация с обыкновенными формами, неуправляемыми? Серийных номеров много?
Можно, наверно, перед 3-им запросом создать ТаблицуЗначений с колонками НомерСтроки и СерийныйНомер,
в нее в цикле 3-его запроса Пока записать номера строк и сер.номера, чтоб они не только выводились на экран, но и где-то сохранены были. (Идея та же, что с переменными).
А потом, после оператора заполнения документа его сохранить(если он нормально заполняется у вас), потом добавить в его табличную часть Серийные номера номера строк и сер.номера из ТаблицыЗначений. Потом снова сохранить документ.
Потом уже можно открывать его в форме для просмотра. Примерно так я бы пробовал.
Можно, наверно, перед 3-им запросом создать ТаблицуЗначений с колонками НомерСтроки и СерийныйНомер,
в нее в цикле 3-его запроса Пока записать номера строк и сер.номера, чтоб они не только выводились на экран, но и где-то сохранены были. (Идея та же, что с переменными).
не могли бы вы показать пример как это все что вы описали сделать? с учетом того что бывает один товарная позиция но продажа его 5 шт значит 5 серийников. а если два товара то у второго тоже количество серийников тоже зависит от того сколько продано.
/// Как создать таблицу значений в 1с 8.3, 8.2
// с таблицей значений можно работать только на сервере
ТабСер = Новый ТаблицаЗначений;
/// Как добавить колонки в таблицу значений в 1с 8.3, 8.2
ТабСер.Колонки.Добавить("Владелец");
ТабСер.Колонки.Добавить("НомерСтр");
ТабСер.Колонки.Добавить("СерНом");
Показать
Внутри цикла Пока 3-его запроса
(если там серийные номера вам сообщаются нормально)
Получившуюся таблицу ТабСер можно вывести на экран для проверки заполнения, как выводится погуглить.
Потом после НовыйДокумент.Заполнить( видимо надо НовыйДокумент.Сохранить();
и смотреть в вашем конфигураторе как в документе устроена его табличная часть про серийные номера с привязкой к владельцу серномера, как ее колонки называются, чтоб туда из ТабСер эти строчки добавлять(если надо, типы значений переделывать),
типа, например,
Для Каждого Стр Из ТабСер Цикл
НоваяСтрока.ИмяТабЧасти.Добавить();
НоваяСтрока.СерийныйНомер=Стр.СерНом
НоваяСтрока.ВладелцСерийногоНомера=Стр.Наименование;
КонецЦикла;
НовыйДокумент.Сохранить();
или по-другому в зависимости от вашей конфигурвции. (Может в регистре сведений еще эти серномера хранятся и туда надо заносить)
Потом смотреть, что получается в документе (на тестовой базе) и поправлять