[РЕШЕНО] Дописать ресурс в регистр накопления

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Peroman, 9 сен 2016.

  1. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    Всем доброго времени суток!
    Платформа: 1С:Предприятие 8.3 (8.3.8.1652)
    Конфигурация: Управление торговлей, редакция 11.2 (11.2.3.168)

    Мне необходимо в РН дописать ресурс "Себестоимость"
    Делаю так:

    Код:
    Запрос = Новый Запрос;
        ВТНоменклатураРасчёта = РезультатЗапросаПартии.Выгрузить(,"Номенклатура,Себестоимость");
        МассивНоменклатура = РезультатЗапросаПартии.Выгрузить(,"Номенклатура").ВыгрузитьКолонку("Номенклатура");
        Запрос.УстановитьПараметр("НачалоПериода", НачалоПериодаРасчёта);
        Запрос.УстановитьПараметр("КонецПериода", КонецПериодаРасчёта);
        Запрос.УстановитьПараметр("МассивНоменклатура", МассивНоменклатура);
        Запрос.Текст =
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    ВыручкаИСебестоимостьПродаж.Регистратор
        |ИЗ
        |    РегистрНакопления.ВыручкаИСебестоимостьПродаж КАК ВыручкаИСебестоимостьПродаж
        |ГДЕ
        |    ВыручкаИСебестоимостьПродаж.Период МЕЖДУ &НачалоПериода И &КонецПериода
        |    И ВыручкаИСебестоимостьПродаж.АналитикаУчетаНоменклатуры.Номенклатура В (&МассивНоменклатура)";
     
        РезультатЗапроса = Запрос.Выполнить();
        Выборка = РезультатЗапроса.Выбрать();
        Пока Выборка.Следующий() Цикл
            НаборЗаписей = РегистрыНакопления.ВыручкаИСебестоимостьПродаж.СоздатьНаборЗаписей();
            НаборЗаписей.Отбор.Регистратор.Значение = Выборка.Регистратор;
            НаборЗаписей.Прочитать();
            НаборЗаписей.Записывать = Истина;
            Для каждого Запись Из НаборЗаписей Цикл
                Запрос =  Новый Запрос;
                Запрос.УстановитьПараметр("ТабНом", ВТНоменклатураРасчёта);
                Запрос.УстановитьПараметр("НоменклатураОтбор", Запись.АналитикаУчетаНоменклатуры.Номенклатура);
                Запрос.Текст =
                "ВЫБРАТЬ
                |    ТабНом.Номенклатура,
                |    ТабНом.Себестоимость
                |ПОМЕСТИТЬ ВтНоменклатура
                |ИЗ
                |    &ТабНом КАК ТабНом
                |;
                |
                |////////////////////////////////////////////////////////////////////////////////
                |ВЫБРАТЬ
                |    ВтНоменклатура.Номенклатура,
                |    ВтНоменклатура.Себестоимость
                |ИЗ
                |    ВтНоменклатура КАК ВтНоменклатура
                |ГДЕ
                |    ВтНоменклатура.Номенклатура = &НоменклатураОтбор";
             
                РезультатЗапроса = Запрос.Выполнить();
             
                Если РезультатЗапроса.Пустой() Тогда
                    Продолжить;         
                КонецЕсли;
                ВыборкаНом = РезультатЗапроса.Выбрать();
                Пока ВыборкаНом.Следующий() Цикл
                    Запись.Регистратор = Выборка.Регистратор;
                    Запись.Себестоимость = ВыборкаНом.Себестоимость;
                КонецЦикла;
            КонецЦикла;
            НаборЗаписей.Записать(Ложь);
        КонецЦикла;
    и 1с зависает наглухо. Где косяк, ну кроме бестолковой головы?)))
    Последнее редактирование модератором: 12 сен 2016
  2. Andris_1c-pro
    Offline

    Andris_1c-pro Новичок в 1С

    Регистрация:
    12 сен 2014
    Сообщения:
    45
    Симпатии:
    8
    Баллы:
    4
    а как зависает?
    может она продолжает работать, судя по окончанию примера там аж три цикла внутри:

    ...
    КонецЦикла;
    КонецЦикла;
    НаборЗаписей.Записать(Ложь);
    КонецЦикла;

    отладкой пробеги, сделай замер производительности на малом количестве данных
  3. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    Переделал на:
    Код:
        Пока Выборка.Следующий() Цикл
            НаборЗаписей = РегистрыНакопления.ВыручкаИСебестоимостьПродаж.СоздатьНаборЗаписей();
            НаборЗаписей.Отбор.Регистратор.Значение = Выборка.Регистратор;
            НаборЗаписей.Прочитать();
            НаборЗаписей.Записывать = Истина;
            ТЗ_ВыручкаСебестоимость = НаборЗаписей.Выгрузить();
          
            Для каждого Строка Из ТЗ_ВыручкаСебестоимость Цикл
                ИскомаяНоменклатура = Строка.АналитикаУчетаНоменклатуры.Номенклатура;
                ИскомаяСтрока = ВТНоменклатураРасчёта.Найти(ИскомаяНоменклатура, "Номенклатура,Себестоимость");
                Если ИскомаяНоменклатура = Неопределено Тогда
                    Продолжить;
                КонецЕсли;
                Попытка
                Строка.Себестоимость = Формат(Число(ИскомаяСтрока.Себестоимость),"ЧЦ=15; ЧДЦ=2");
                Строка.РасчетСебестоимости = Истина;
                Исключение
                Сообщить(ОписаниеОшибки());
                КонецПопытки;
            КонецЦикла;
            НаборЗаписей.Загрузить(ТЗ_ВыручкаСебестоимость);
            НаборЗаписей.Записать(Ложь);
        КонецЦикла;
    

Поделиться этой страницей