Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=29958)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Поле с итогом по условию в таб. части документа

Автор: rpervak 24.05.16, 17:45

Здравствуйте !
УПП, редакция 1.3 (1.3.39.1)
Помогите, пожалуйста, реализовать следующее:
Есть документ, в котором имеется таб. поле "Заказы".
Нужно добавить колонку в которой будет суммироваться количество товара с нарастающим итогом, пока артикул номенклатуры добавляемых строк одинаковый.
Если в следующей строке другой артикул, то и значение итогового поля сбрасывается на итог по новому артикулу.

Пример:

1. Заказ1 - Арт1 - кол1 - Ит=кол1
2. Заказ2 - Арт1 - кол2 - Ит=кол1+кол2
......................................................
n. Заказn - Арт.1 - колn - Ит=кол1+кол2+...+колn

n+1. Заказ(n+1) - Арт.2 - Кол(n+1) - Ит=Кол(n+1)
n+2. Заказ(n+2) - Арт.2 - Кол(n+2) - Ит=Кол(n+1)+Кол(n+2)

И т.д.
Для упрощения задачи, артикула в разброс добавляться не будут, а строго по порядку.

Пробовал через свойство ПриПолученииДанных() - не получилось.
Как можно сделать обход строк таб. части сравнивая с предыдущей строкой ?

Автор: McTSIMCO 25.05.16, 9:53

А зачем вообще сравнивать?

ВыгружайТЕ таб.поле в таблицузначений, делайТЕ к ней запрос, а вот уже в запросе суммируйТЕ итоги по заказу / артикулу.


 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 1
 

Автор: rpervak 25.05.16, 14:04

ТЗ = Заказы.Выгрузить();
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       |    ЗаявкаНаОтгрузкуЗаказовПокупателейЗаказы.ЗаказПокупателя КАК ЗаказПокупателя,
                       |    ЗаявкаНаОтгрузкуЗаказовПокупателейЗаказы.Номенклатура КАК Номенклатура,
                       |    ЗаявкаНаОтгрузкуЗаказовПокупателейЗаказы.Количество КАК Количество,
                       |    ЗаявкаНаОтгрузкуЗаказовПокупателейЗаказы.КоличествоМ2 КАК КоличествоМ2,
                       |    ЗаявкаНаОтгрузкуЗаказовПокупателейЗаказы.КоличествоПодбор КАК КоличествоПодбор
                       |ПОМЕСТИТЬ ЗаявкаНаОтгрузкуЗаказовПокупателейЗаказы
                       |ИЗ
                       |    &ЗаявкаНаОтгрузкуЗаказовПокупателейЗаказы КАК ЗаявкаНаОтгрузкуЗаказовПокупателейЗаказы";
        Запрос.УстановитьПараметр("ЗаявкаНаОтгрузкуЗаказовПокупателейЗаказы", ТЗ);
        Результат = Запрос.Выполнить();


При выполнении запроса выдает ошибку:

Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос.Выполнить();
по причине:
Не установлен менеджер временных таблиц

Автор: logist 25.05.16, 14:41

Цитата(rpervak @ 25.05.16, 15:04) *
Не установлен менеджер временных таблиц

Вы не знаете что это?

Запрос = Новый Запрос("ВЫБРАТЬ * ПОМЕСТИТЬ ЗаявкаНаОтгрузкуЗаказовПокупателейЗаказы ИЗ &ТЗ КАК Т");
МВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МВТ;
Запрос.УстановитьПараметр("ТЗ", ТЗ);
Запрос.Выполнить();


Результата запроса в вашем случае не будет, т.к. вы поместили его во временную таблицу.

Автор: sava1 25.05.16, 14:59

Танцы с бубном. Задача по своей постановке неправильная - если лепить такие "хотелки"....

Автор: Нонна 25.05.16, 15:40

Посмотрите, может пригодится.

&НаКлиенте
Процедура ЗаполнитьКоличествоАртикулов(Команда)
КолАрт=1;
Сч1=1;
Артикулы=Новый Массив;
КоличествоСтрок = Объект.Товары.Количество();
Мас=Новый Массив;
Объект.Товары[0].КоличествоАртикулов=КолАрт;

Для Сч=1 По  КоличествоСтрок  Цикл
    Мас.Добавить(Объект.Товары[Сч-1].Номенклатура);
КонецЦикла;
Артикулы= ПолучитьАртикул(Мас, КоличествоСтрок);

Для Сч=1 По КоличествоСтрок+1 Цикл
    Для Сч1=Сч1+1 По КоличествоСтрок Цикл
        
        Если Артикулы[Сч1-2]=Артикулы[Сч1-1] Тогда
          КолАрт=КолАрт+1;
          Объект.Товары[Сч1-1].КоличествоАртикулов=КолАрт;
          
      Иначе КолАрт=1;
            Объект.Товары[Сч1-1].КоличествоАртикулов=КолАрт;
            Сч=Сч+1;
            Прервать;
         КонецЕсли;
    КонецЦикла;
КонецЦикла;
КонецПроцедуры

&НаСервере
Функция ПолучитьАртикул(Мас,Количество)
    МасАртикул=Новый Массив;
    Для К=1 По  Количество Цикл
         МасАртикул.Добавить(Мас[К-1].Артикул);    
    КонецЦикла;
Возврат МасАртикул;    
КонецФункции

Автор: logist 25.05.16, 16:01

Цитата(Нонна @ 25.05.16, 16:40) *
Посмотрите, может пригодится.

Разве что только посмотреть, не пригодится он точно, т.к. это код для управляемого приложения, а тема про обычное, поэтому совет для топикстартера - простым копированием этот код работать не будет, если не знаете как его приспособить под обычное приложение - не мучайтесь.

Автор: sava1 25.05.16, 16:58

Сделайте эту хрень в печатной форме, а не в ТЧ документа.
Выгрузили ТЧ, отсортировали, простой цикл с проверкой условия и накоплением итога.

Автор: rpervak 25.05.16, 17:47

В печатной форме сделал, так видите ли надо лишние кнопки нажимать. Соглашусь, что надо было НЕ лепить такие "хотелки"....
Спасибо всем ! Получилось через менеджер временных таблиц.
Тему можно закрывать.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua