Запись нескольких документов в одном цикле
Есть задание сделать обработку для записи документов поступлений.
На форме 4 колонки, номер документа, номенклатура, количество и группа
Я должен сделать запись номенклатуры в документы в зависимости от номера документа в табличной части.
Сначала сделал с подсчётом всех различных строк в колонке номер и по их количеству что бы запускался цикл по созданию документов и внутри этого цикла, цикл для перебора строк с табличной части и записи номенклатуры в нужный документ. Но препод сказал что так делать не очень хорошо, что бы серв не перегружать.
Сейчас немного поправил код, но записать несколько док-ов по количеству не получается, подскажите пожалуйста в какую сторону копать?
Код текущей программы:
ps. пока обучаюсь
pps. Что удалять строки из перебираемой таблицы не хорошо, уже так же сказали, чем заменить не знаю
На форме 4 колонки, номер документа, номенклатура, количество и группа
Я должен сделать запись номенклатуры в документы в зависимости от номера документа в табличной части.
Сначала сделал с подсчётом всех различных строк в колонке номер и по их количеству что бы запускался цикл по созданию документов и внутри этого цикла, цикл для перебора строк с табличной части и записи номенклатуры в нужный документ. Но препод сказал что так делать не очень хорошо, что бы серв не перегружать.
Сейчас немного поправил код, но записать несколько док-ов по количеству не получается, подскажите пожалуйста в какую сторону копать?
Код текущей программы:
Таб = Объект.ТабличнаяЧасть.Выгрузить();
Таб.Свернуть("Номенклатура, Номер, Группа","Количество");
Таб.Сортировать("Номер");
СозданиеГрупп();
НовыеТовары();
Для Каждого Строка из Таб цикл
Поступление = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
Поступление.Дата = ТекущаяДата();
Поступление.Комментарий = "Создано автоматической обработкой, требуется заполнить данные";
Если Строка.Номер = Таб[0][0] Тогда
Товар = Поступление.Товары.Добавить();
Товар.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Номенклатура);
Товар.КоличествоУпаковок = Число(Строка.Количество);
Таб.Удалить(0);
КонецЕсли;
Попытка
Поступление.Записать();
Исключение
Сообщить("Ошибка записи");
КонецПопытки;
КонецЦикла;
Показатьps. пока обучаюсь
pps. Что удалять строки из перебираемой таблицы не хорошо, уже так же сказали, чем заменить не знаю
По теме из базы знаний
- Печать кассовых чеков на одну ККМ с нескольких рабочих мест для 1С:УТ11.х, КА2.х, ERP 2.х
- Несколько документов на основании одного
- Запись/Чтение XML, пример обмена по COM соединению
- Интеграция 1С с маркетплейсами из одного окна: Озон, ВБ, Яндекс, Сбер, Али, ЛаМода - для УНФ, УТ, КА, ERP
- Копирование нескольких документов в базах с идентичной конфигурацией через буфер Windows из одной базы в другую (учебный пример)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
попробуйте такой вариант (не проверял, могут быть опечатки)
Таб = Объект.ТабличнаяЧасть.Выгрузить();
Таб.Свернуть("Номенклатура, Номер, Группа","Количество");
Таб.Сортировать("Номер");
СозданиеГрупп();
НовыеТовары();
СписокДоков = Новый Соответствие;
Для Каждого Строка из Таб цикл
лкДокПТУ = СписокДоков.Получить(Строка.Номер);
Если лкДокПТУ = Неопределено Тогда
лкДокПТУ = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
лкДокПТУ.Дата = ТекущаяДата();
лкДокПТУ.Номер = Строка.Номер;
лкДокПТУ.Комментарий = "Создано автоматической обработкой, требуется заполнить данные";
СписокДоков.Вставить(Строка.Номер,лкДокПТУ);
КонецЕсли;
Товар = лкДокПТУ.Товары.Добавить();
Товар.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Номенклатура);
Товар.КоличествоУпаковок = Число(Строка.Количество);
//Таб.Удалить(0);
КонецЦикла;
Для каждого лкСтр Из СписокДоков Цикл
Попытка
лкСтр.Значение.Записать();
Исключение
Сообщить("Ошибка записи");
КонецПопытки;
КонецЦикла;
Показать
(2)Спасибо, даже не думал про запись доков в отдельный список и оттуда запись, ну мне нужно было одним циклом, сделал по другому:
Таб = Объект.ТабличнаяЧасть.Выгрузить();
Таб.Свернуть("Номер, Номенклатура, Группа","Количество");
Таб.Сортировать("Номер");
СозданиеГрупп();
НовыеТовары();
Проверка = Таб[0].Номер;
Поступление = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
Поступление.Дата = ТекущаяДата();
Поступление.Комментарий = "Создано автоматической обработкой, требуется заполнить данные";
Для Каждого Строка из Таб цикл
Если Строка.Номер = Проверка Тогда
Товар = Поступление.Товары.Добавить();
Товар.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Номенклатура);
Товар.КоличествоУпаковок = Число(Строка.Количество);
Проверка = Строка.Номер;
Иначе
Поступление.Записать();
Поступление = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
Поступление.Дата = ТекущаяДата();
Поступление.Комментарий = "Создано автоматической обработкой, требуется заполнить данные";
Товар.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Номенклатура);
Товар.КоличествоУпаковок = Число(Строка.Количество);
Проверка = Строка.Номер;
КонецЕсли;
КонецЦикла;
Поступление.Записать();
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот