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

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-его запроса
(если там серийные номера вам сообщаются нормально)

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



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

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



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

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

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