Имя: Пароль:
1C
 
Массовая запись
0 Хрустальчик
 
05.07.25
12:20
Здравствуйте, уже задавал вопрос, но как сделать массовую запись в независимый периодический регистр сведений

Сейчас делаю подобным образом, но запись падает.

Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказПоставщикуТовары.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
        |ГДЕ
        |    ЗаказПоставщикуТовары.Ссылка.Дата > &Дата";
    Запрос.УстановитьПараметр("Дата", '20201203235113');
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        запрос2 = новый запрос;
        запрос2.Текст =
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    ЗаказПоставщикуТовары.Номенклатура КАК Номенклатура,
        |    ЗаказПоставщикуТовары.Упаковка КАК Упаковка,
        |    ЗаказПоставщикуТовары.Ссылка.Валюта КАК Валюта,
        |    ЗаказПоставщикуТовары.ВидЦеныПоставщика КАК ВидЦеныПоставщика,
        |    ЗаказПоставщикуТовары.Сумма КАК Сумма,
        |    ЗаказПоставщикуТовары.Количество КАК Количество,
        |    ЗаказПоставщикуТовары.Цена КАК Цена,
        |    ЗаказПоставщикуТовары.Ссылка.Дата КАК Дата,
        |    ЗаказПоставщикуТовары.Ссылка.Партнер КАК Партнер,
        |    ЗаказПоставщикуТовары.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
        |ГДЕ
        |    ЗаказПоставщикуТовары.Ссылка = &Ссылка";
    Запрос2.УстановитьПараметр("Ссылка", ВыборкаДетальныеЗаписи.Ссылка);
    РезультатЗапроса2 = Запрос2.Выполнить();    
    ВыборкаДетальныеЗаписи2 = РезультатЗапроса2.Выбрать();

    Пока ВыборкаДетальныеЗаписи2.Следующий() Цикл
        Если не ЗначениеЗаполнено(ВыборкаДетальныеЗаписи2.Ссылка) Тогда
        Возврат;
    КонецЕсли;
        
            НаборЗаписей = РегистрыСведений.ЮТ_ЦеныНоменклатурыПоставщиковСПоставщиком.СоздатьНаборЗаписей();
            НаборЗаписей.Отбор.Регистр.Установить(ВыборкаДетальныеЗаписи2.Ссылка);
            НоваяЗапись = НаборЗаписей.Добавить();
            НоваяЗапись.Период = ВыборкаДетальныеЗаписи2.Дата;
            Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи2.ВидЦеныПоставщика) Тогда
            НоваяЗапись.ВидЦены = ВыборкаДетальныеЗаписи2.ВидЦеныПоставщика
            Иначе
            НоваяЗапись.ВидЦены = Справочники.ВидыЦенПоставщиков.НайтиПоНаименованию("Закупочная");
            КонецЕсли;

                    НоваяЗапись.Партнер = ВыборкаДетальныеЗаписи2.Партнер;
                    НоваяЗапись.Номенклатура = ВыборкаДетальныеЗаписи2.Номенклатура;
                    НоваяЗапись.Цена = ВыборкаДетальныеЗаписи2.Сумма/ВыборкаДетальныеЗаписи2.Количество;
                    НоваяЗапись.Упаковка = ВыборкаДетальныеЗаписи2.Упаковка;
                    НоваяЗапись.Валюта = ВыборкаДетальныеЗаписи2.Валюта;
                    НоваяЗапись.Регистр = ВыборкаДетальныеЗаписи2.Ссылка;
            НаборЗаписей.Записать();
2 Волшебник
 
05.07.25
12:25
Мне кажется, это какая-то безумная кодогенерация

НаборЗаписей.Отбор.Регистр.Установить(ВыборкаДетальныеЗаписи2.Ссылка);
3 Хрустальчик
 
05.07.25
12:27
(2) Факт, а что лучше посоветуете?
4 Волшебник
 
05.07.25
12:28
(3) Посоветую перестать морочить нам голову
5 Мультук
 
гуру
05.07.25
13:09
(0)

>>Сейчас делаю подобным образом, но запись падает.

Сильно падает?
С какого этажа?
Раздается дзинь или бух ?

ИЛИ

Всё же появляется какое-то сообщение об ошибке ?
6 Хрустальчик
 
05.07.25
13:11
Пишет, что память кончается
7 Хрустальчик
 
05.07.25
13:11
В другой базе соединение с сервером потерялось
8 Волшебник
 
05.07.25
13:25
У Вас в первом запросе ссылки на документ, а сам запрос к табличной части. Зацените, сколько раз крутится верхний цикл
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший