8.х Программно проставить записи в проводках

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

  1. TopicStarter Overlay
    notaSS
    Offline

    notaSS Опытный в 1С

    Регистрация:
    22 ноя 2014
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте. Подскажите,может кто сталкивался?!
    Нужно программно проставить номенклатуру в регистре бухгалтерии. БГУ ред1.0. Документ-требование на списание продуктов.Сразу скажу, что перепровести документ мы не можем,т.к при перепроведении суммы поменяются в документе. Делаем внешнюю обработку, которая проставляет номенклатуру. Делает таким образом-сравнивает по номеру строки в табличной части документа и проставляет в регистр. Вопрос .В документе номенклатура может повторяться и например первая позиция
    1- апельсины
    2 -апельсины
    3-яблоки
    4-груши
    И обработка проставляет след образом
    1- апельсины
    2-яблоки
    3-груши
    то есть повторяющуюся позицию пропускает, на ее место ставит следующую.
    Код:
     Запрос = Новый Запрос;
       Запрос.Текст =
       "ВЫБРАТЬ
       |    УППБУ_ТребованиеПродуктыПитания.Номенклатура,
       |    УППБУ_ТребованиеПродуктыПитания.Ссылка.МестоХранения,
       |    УППБУ_ТребованиеПродуктыПитания.КОСГУСчетДебета,
       |    УППБУ_ТребованиеПродуктыПитания.КОСГУСчетКредита,
       |    УППБУ_ТребованиеПродуктыПитания.Ссылка.Ссылка,
       |    УППБУ_ТребованиеПродуктыПитания.НомерСтроки
       |ИЗ
       |    Документ.УППБУ_Требование.ПродуктыПитания КАК УППБУ_ТребованиеПродуктыПитания
       |ГДЕ
       |    УППБУ_ТребованиеПродуктыПитания.Ссылка.Ссылка = &Ссылка";
       //  
       //Запрос.УстановитьПараметр("Дата", Датанач);
       //Запрос.УстановитьПараметр("Дата", ДатаКон);
       Запрос.УстановитьПараметр("Ссылка", Реквизит1);
       РезультатЗапроса = Запрос.Выполнить();
      
       ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл  
            ДвиженияДокумента = РегистрыБухгалтерии.ЕПСБУ.СоздатьНаборЗаписей();
            ДвиженияДокумента.Отбор.Регистратор.Установить(ВыборкаДетальныеЗаписи.ссылка);
            ДвиженияДокумента.Прочитать();
          
            Для каждого проводка из ДвиженияДокумента Цикл
                Если Не ЗначениеЗаполнено(Проводка.СубконтоКт.Номенклатура) и проводка.НомерСтроки = ВыборкаДетальныеЗаписи.НомерСтроки  Тогда
               
                        Проводка.СубконтоКт.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
                        Проводка.СубконтоКт.ЦМО = ВыборкаДетальныеЗаписи.МестоХранения;
                        Проводка.СубконтоКт.КОСГУ = ВыборкаДетальныеЗаписи.КОСГУСчетКредита;
                        Проводка.СубконтоДт.КОСГУ = ВыборкаДетальныеЗаписи.КОСГУСчетДебета;
                    КонецЕсли;
            КонецЦикла;
            ДвиженияДокумента.Записать();
        
        КонецЦикла;
    
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Выгрузите ТЧ документа в ТЗ так, чтобы была только колонка "Номенклатура". Сверните ее.
    Выгрузите Движения в ТЗ и используйте НайтиСтроки().
    После всего загрузите ТЗ в Движения.
  3. ppkmlite
    Offline

    ppkmlite Опытный в 1С

    Регистрация:
    28 окт 2014
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Выгрузите ТЧ документа в ТЗ так, чтобы была только колонка "Номенклатура".--- выгружаю табличную часть,
    Код:
    Пока ВыборкаДетальныеЗаписи.Следующий() цикл
            рез = ВыборкаДетальныеЗаписи.ПродуктыПитания.выгрузить();
            ИзменитьДвиженияДокумента(ВыборкаДетальныеЗаписи);
        КонецЦикла;    
    не могу выгрузить отдельно колонку номенклатура?!
  4. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Прошу пардону - выгружать ТЧ документа в ТЗ нет необходимости.
    В запросе необходимо убрать номер строки и сделать группировку.

    Вынесите чтение НабораЗаписей за пределы цикла по выборке.
  5. ppkmlite
    Offline

    ppkmlite Опытный в 1С

    Регистрация:
    28 окт 2014
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Код:
    "ВЫБРАТЬ
        |    УППБУ_ТребованиеПродуктыПитания.Номенклатура,
        |    УППБУ_ТребованиеПродуктыПитания.Ссылка.МестоХранения,
        |    УППБУ_ТребованиеПродуктыПитания.КОСГУСчетДебета,
        |    УППБУ_ТребованиеПродуктыПитания.КОСГУСчетКредита,
        |    УППБУ_ТребованиеПродуктыПитания.Ссылка.Ссылка,
        |    УППБУ_ТребованиеПродуктыПитания.Количество,
        |    УППБУ_ТребованиеПродуктыПитания.Сумма
        |ИЗ
        |    Документ.УППБУ_Требование.ПродуктыПитания КАК УППБУ_ТребованиеПродуктыПитания
        |ГДЕ
        |    УППБУ_ТребованиеПродуктыПитания.Ссылка = &Ссылка
        |
        |СГРУППИРОВАТЬ ПО
        |    УППБУ_ТребованиеПродуктыПитания.Номенклатура,
        |    УППБУ_ТребованиеПродуктыПитания.КОСГУСчетДебета,
        |    УППБУ_ТребованиеПродуктыПитания.Ссылка.МестоХранения,
        |    УППБУ_ТребованиеПродуктыПитания.КОСГУСчетКредита,
        |    УППБУ_ТребованиеПродуктыПитания.Ссылка.Ссылка,
        |    УППБУ_ТребованиеПродуктыПитания.Количество,
        |    УППБУ_ТребованиеПродуктыПитания.Сумма";
       
    
    сделала группировку, теперь одна и та же номенклатура простаилась всем записям?:(:(
  6. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Что-то вы неправильно делаете.....
    В вашем случае, даже запроса можно не делать.

    Насколько я понял задачу из кода, код обработки должен выглядеть как-то так:

    Код:
    ТЧ = Реквизит1.ПродуктыПитания;
    ТЗ = ТЧ.Выгрузить(, "Номенклатура");
    ТЗ.Свернуть("Номенклатура", "Сумма");
    
    ДвиженияДокумента = РегистрыБухгалтерии.ЕПСБУ.СоздатьНаборЗаписей();
    ДвиженияДокумента.Отбор.Регистратор.Установить(Реквизит1);
    ДвиженияДокумента.Прочитать();
    
    НаборТЗ = ДвиженияДокумента.Выгрузить();
    
    Для Каждого Стр Из ТЗ Цикл
    Отбор = Новый Структура("Сумма", Стр.Сумма);
    
    МассивСтрок = НаборТЗ.НайтиСтроки(Отбор);
    Для Каждого ТекСтр Из МассивСтрок Цикл
    ТекСтр.СубкнтоКт1, Стр.Номенклатура;
    ТекСтр.ВидСубконтоКт1 = ПланыВидовХарактеристик.СубконтоХозрасчетные.Номенклатура;
    ТекСтр.СубконтоКт2 = Реквизит1.МестоХранения;
    ТекСтр.ВидСубконтоКт2 = ПланыВидовХарактеристик.СубконтоХозрасчетные.ЦМО;
    ТекСтр.СубконтоКт3 = Стр.КОСГУСчетКредита;
    ТекСтр.ВидСубконтоКт3 = ПланыВидовХарактеристик.СубконтоХозрасчетные.КОСГУ;
    ТекСтр.СубконтоДт1 = Стр.КОСГУСчетДебета;
    ТекСтр.ВидСубконтоДт1 = ПланыВидовХарактеристик.СубконтоХозрасчетные.КОСГУ;
    КонецЦикла;
    КонецЦикла;
    
    ДвиженияДокумента.Загрузить(Набор_ТЗ);
    
    ДвиженияДокумента.Записать();
    

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