|   |   | 
| 
 | Массовая запись | ☑ | ||
|---|---|---|---|---|
| 0
    
        Хрустальчик naïve 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
    
        Хрустальчик naïve 05.07.25✎ 12:27 | 
        (2) Факт, а что лучше посоветуете?     | |||
| 4
    
        Волшебник 05.07.25✎ 12:28 | 
        (3) Посоветую перестать морочить нам голову     | |||
| 5
    
        Мультук гуру 05.07.25✎ 13:09 | 
        (0) 
 >>Сейчас делаю подобным образом, но запись падает. Сильно падает? С какого этажа? Раздается дзинь или бух ? ИЛИ Всё же появляется какое-то сообщение об ошибке ? | |||
| 6
    
        Хрустальчик naïve 05.07.25✎ 13:11 | 
        Пишет, что память кончается     | |||
| 7
    
        Хрустальчик naïve 05.07.25✎ 13:11 | 
        В другой базе соединение с сервером потерялось     | |||
| 8
    
        Волшебник 05.07.25✎ 13:25 | 
        У Вас в первом запросе ссылки на документ, а сам запрос к табличной части. Зацените, сколько раз крутится верхний цикл     | |||
| 9
    
        Kongo2019 05.07.25✎ 21:32 | 
        (0) Запрос в цикле, за это здесь обычно бьют.     | |||
| 10
    
        timurhv 05.07.25✎ 22:23 | 
        (9) Ну а что делать, не выбирать же 200 миллионов записей 1 раз запросом) Так памяти не хватит     | |||
| 11
    
        Kongo2019 05.07.25✎ 22:32 | 
        (10) А сейчас типа хватает? Судя по (6) , нифига.     | |||
| 12
    
        timurhv 06.07.25✎ 13:01 | 
        (11) там они и не записываются
 Ошибка 1 (тут только документ): НаборЗаписей = РегистрыСведений.ЮТ_ЦеныНоменклатурыПоставщиковСПоставщиком.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистр.Установить(ВыборкаДетальныеЗаписи2.Ссылка); НоваяЗапись = НаборЗаписей.Добавить(); Ошибка 2 (какая-то ненужная проверка): Если не ЗначениеЗаполнено(ВыборкаДетальныеЗаписи2.Ссылка) Тогда Возврат; КонецЕсли; Ошибка 3 (вынести в переменную в начале кода): НоваяЗапись.ВидЦены = Справочники.ВидыЦенПоставщиков.НайтиПоНаименованию("Закупочная"); Ошибка 4 (нет проверки деления на 0): НоваяЗапись.Цена = ВыборкаДетальныеЗаписи2.Сумма/ВыборкаДетальныеЗаписи2.Количество; Ошибка 5 и 6 (тут должны выбираться документы, а не записи ТЧ + нет проверки на проведение документа): Запрос.Текст = "ВЫБРАТЬ | ЗаказПоставщикуТовары.Ссылка КАК Ссылка |ИЗ | Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары |ГДЕ | ЗаказПоставщикуТовары.Ссылка.Дата > &Дата"; Запрос.УстановитьПараметр("Дата", '20201203235113'); Если имеем 1млн документов с 200млн строк в ТЧ документов, то будет выполняться: 1. 200млн раз запрос к ТЧ документов (вместо 1 млн раз); 2. 200млн*200млн раз запись в регистр сведений, притом запишется хрен пойми что, а не то что нужно 3. Если не заполнен вид цен, то будет выполняться его поиск также 200млн*200млн раз по наименованию; По-идее дб 1 млн вызовов СоздатьНаборЗаписей, но с автора достаточно будет и 200млн, большего не ждем. | |||
| 13
    
        Прохожий 06.07.25✎ 15:38 | 
        не понятно какая периодичность. Если день, то можно по каждому дню один набор делать и записывать если не устанавливать отбор...     | |||
| 14
    
        Прохожий 06.07.25✎ 17:33 | 
        тогда миллион не нужен, пусть надо обработать документы за за пару тройку лет. Тогда тыща наборов записей. Кто меньше?
 "Я сыграю правильную мелодию с ... нотами" | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |