Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 окт 2021, 13:22

В оказаниях услуг обьеденить номенклатуру

Автор Региндроид, 25 мая 2021, 12:59

0 Пользователей и 1 гость просматривают эту тему.

Региндроид

Здравствуйте, как говориться глупых вопросов не бывает. Только начала обучение и не хочется сдаваться на ранних этапах, а спросить не у кого. Вопрос:  В оказаниях услуг , добавила 1 товар, после еще один такой же товар. В печать выходит 2 одинаковые номенклатуры и их количество. Логично, что оно так и должно быть. Но какой командой изменить бы , чтоб в отчете (печать) номенклатура объединялась

ls600

Тут возникает вопрос, какой смысл добавлять две одинаковые номенклатуры в таб часть, если можно добавить одну и в поле количество указать 2 шт.

Региндроид

Цитата: ls600 от 25 мая 2021, 14:00
Тут возникает вопрос, какой смысл добавлять две одинаковые номенклатуры в таб часть, если можно добавить одну и в поле количество указать 2 шт.
Т. Е. оператор добавил товар, но покупателю не хватило товара и покупатель тут же просит добавить ещё. А в печать уходит номенклатуры 2 одинаковые с разным количеством. Вот такое задание дали (

LexaK

Региндроид, с заданием все понятно,
выложите сюда весь код процедуры которая выполняет вашу печать
(просто из конфигуратора скопируйте и сюда вставьте, только диез(#) на верху нажмите, это для вставки кода программы)
ответ Понравился? (в смысле пригодился?)

Региндроид

Цитата: LexaK от 25 мая 2021, 14:37
Региндроид, с заданием все понятно,
выложите сюда весь код процедуры которая выполняет вашу печать
(просто из конфигуратора скопируйте и сюда вставьте, только диез(#) на верху нажмите, это для вставки кода программы)

#
Процедура ОбработкаПроведения(Отказ, Режим)
   Движения.ОстаткиМатериалов.Записывать = Истина;
   //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

   // регистр ОстаткиМатериалов Расход
   Движения.ОстаткиМатериалов.Записывать = Истина;
   //Движения.СтоимостьМатериалов.Записывать = Истина;
   //Движения.Продажи.Записывать = Истина;

   
   Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл
      Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда
      
      Движение = Движения.ОстаткиМатериалов.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
      Движение.Период = Дата;
      Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
      Движение.Склад = Склад;
      Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
      
      //регистр СтоимостьМатериалов Расход
      Движение = Движения.СтоимостьМатериалов.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
      Движение.Период = Дата;
      Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
      Движение.Стоимость=ТекСтрокаПереченьНоменклатуры.Количество*ТекСтрокаПереченьНоменклатуры.Стоимость;
      
      //регистр СтоимостьМатериалов Расход
      //Движение = Движения.СтоимостьМатериалов.Добавить();
      //Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
      //Движение.Период = Дата;
      //Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
      //Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Количество*ТекСтрокаПереченьНоменклатуры.Стоимость;
   КонецЕсли;
   //Регистр Продажи
     //Движение = Движения.Продажи.Добавить();
     //Движение.Период = Дата;
     //Движение.Номенклатура = ТекСтрокаПереченьНоменклатуры.Номенклатура;
     //Движение.Клиент = Клиент;
     //Движение.Мастер = Мастер;
     //Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
     //Движение.Выручка = ТекСтрокаПереченьНоменклатуры.Сумма;
     //Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Стоимость*ТекСтрокаПереченьНоменклатуры.Количество;
      
   КонецЦикла;

   //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

Региндроид

Цитата: Региндроид от 26 мая 2021, 09:19
Цитата: LexaK от 25 мая 2021, 14:37
Региндроид, с заданием все понятно,
выложите сюда весь код процедуры которая выполняет вашу печать
(просто из конфигуратора скопируйте и сюда вставьте, только диез(#) на верху нажмите, это для вставки кода программы)

#
Процедура ОбработкаПроведения(Отказ, Режим)
   Движения.ОстаткиМатериалов.Записывать = Истина;
   //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

   // регистр ОстаткиМатериалов Расход
   Движения.ОстаткиМатериалов.Записывать = Истина;
   //Движения.СтоимостьМатериалов.Записывать = Истина;
   //Движения.Продажи.Записывать = Истина;

   
   Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл
      Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда
      
      Движение = Движения.ОстаткиМатериалов.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
      Движение.Период = Дата;
      Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
      Движение.Склад = Склад;
      Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
      
      //регистр СтоимостьМатериалов Расход
      Движение = Движения.СтоимостьМатериалов.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
      Движение.Период = Дата;
      Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
      Движение.Стоимость=ТекСтрокаПереченьНоменклатуры.Количество*ТекСтрокаПереченьНоменклатуры.Стоимость;
      
      //регистр СтоимостьМатериалов Расход
      //Движение = Движения.СтоимостьМатериалов.Добавить();
      //Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
      //Движение.Период = Дата;
      //Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
      //Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Количество*ТекСтрокаПереченьНоменклатуры.Стоимость;
   КонецЕсли;
   //Регистр Продажи
     //Движение = Движения.Продажи.Добавить();
     //Движение.Период = Дата;
     //Движение.Номенклатура = ТекСтрокаПереченьНоменклатуры.Номенклатура;
     //Движение.Клиент = Клиент;
     //Движение.Мастер = Мастер;
     //Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
     //Движение.Выручка = ТекСтрокаПереченьНоменклатуры.Сумма;
     //Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Стоимость*ТекСтрокаПереченьНоменклатуры.Количество;
      
   КонецЦикла;

   //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
#
//форма документа
&НаКлиенте
Процедура ПереченьНоменклатурыКоличествоПриИзменении(Элемент)
   // Вставить содержимое обработчика.
    СтрокаТабличнойЧасти=Элементы.ПереченьНоменклатуры.ТекущиеДанные;
    РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры

&НаКлиенте
Процедура ПереченьНоменклатурыЦенаПриИзменении(Элемент)
   // Вставить содержимое обработчика.
    СтрокаТабличнойЧасти=Элементы.ПереченьНоменклатуры.ТекущиеДанные;
    РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры

&НаКлиенте
Процедура ПереченьНоменклатурыНоменклатураПриИзменении(Элемент)
   // Вставить содержимое обработчика.   
   //Получить текущую строкуу табличной части
   СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;
   
   //Установим цену
   СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура);
   
   //Пересчитать сумму строки
   РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры

LexaK

дааа, вроде простой вопрос был
Цитироватьвыложите сюда весь код процедуры которая выполняет вашу печать
а вы прислали абы что, кроме этого.

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

тзТовары = ЭтотОбъект.Товары.Выгрузить(); 
тзТовары.Свернуть("Товары,Цена,СтавкаНДС","Количество,Сумма,СуммаНДС");
//"Товары,Цена,СтавкаНДС" - поля измерений, это пример, у вас еще может быть "Упаковка", "Характеристика" и др.
//"Количество,Сумма,СуммаНДС" - суммируемые поля

Для каждого лкСтр Из тзТовары Цикл
//вывод на печать
...   
КонецЦикла;

если для получения данных используется запрос (чего мы так и не знаем) нужно подправить текст запроса что бы получилось примерно следующее
лкЗапрос.Текст = "
    |Выбрать
   |   Док.Товар,
   |   Док.Цена,
   |   Док.СтавкаНДС,
   |   Сумма(Док.Количество) как Количество,
   |   Сумма(Док.Сумма) как Сумма,
   |   Сумма(Док.СуммаНДС) как СуммаНДС
   |из
   |   Докумен.Реализация.Товары Док
   |где
   |   Док.Ссылка = &Ссылка
   |Сгруппировать по
   |   Док.Товар,
   |   Док.Цена,
   |   Док.СтавкаНДС
   |";
ответ Понравился? (в смысле пригодился?)

Региндроид

Цитата: LexaK от 26 мая 2021, 10:29
дааа, вроде простой вопрос был
Цитироватьвыложите сюда весь код процедуры которая выполняет вашу печать
а вы прислали абы что, кроме этого.

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

тзТовары = ЭтотОбъект.Товары.Выгрузить(); 
тзТовары.Свернуть("Товары,Цена,СтавкаНДС","Количество,Сумма,СуммаНДС");
//"Товары,Цена,СтавкаНДС" - поля измерений, это пример, у вас еще может быть "Упаковка", "Характеристика" и др.
//"Количество,Сумма,СуммаНДС" - суммируемые поля

Для каждого лкСтр Из тзТовары Цикл
//вывод на печать
...   
КонецЦикла;

если для получения данных используется запрос (чего мы так и не знаем) нужно подправить текст запроса что бы получилось примерно следующее
лкЗапрос.Текст = "
    |Выбрать
   |   Док.Товар,
   |   Док.Цена,
   |   Док.СтавкаНДС,
   |   Сумма(Док.Количество) как Количество,
   |   Сумма(Док.Сумма) как Сумма,
   |   Сумма(Док.СуммаНДС) как СуммаНДС
   |из
   |   Докумен.Реализация.Товары Док
   |где
   |   Док.Ссылка = &Ссылка
   |Сгруппировать по
   |   Док.Товар,
   |   Док.Цена,
   |   Док.СтавкаНДС
   |";
#
Процедура Печать(ТабДок, Ссылка) Экспорт
   //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
   Макет = Документы.ОказаниеУслуги.ПолучитьМакет("Печать");
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |   ОказаниеУслуги.Дата,
   |   ОказаниеУслуги.Клиент,
   |   ОказаниеУслуги.Мастер,
   |   ОказаниеУслуги.Номер,
   |   ОказаниеУслуги.Склад,
   |   ОказаниеУслуги.ПереченьНоменклатуры.(
   |      НомерСтроки,
   |      Номенклатура,
   |      Количество,
   |      Цена,
   |      Сумма
   |   )
   |ИЗ
   |   Документ.ОказаниеУслуги КАК ОказаниеУслуги
   |ГДЕ
   |   ОказаниеУслуги.Ссылка В (&Ссылка)
   |Сгруппировать по
   |     ОказаниеУслуги.ПереченьНоменклатуры
   |";
   Запрос.Параметры.Вставить("Ссылка", Ссылка);
   Выборка = Запрос.Выполнить().Выбрать();

   ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   Шапка = Макет.ПолучитьОбласть("Шапка");
   ОбластьПереченьНоменклатурыШапка = Макет.ПолучитьОбласть("ПереченьНоменклатурыШапка");
   ОбластьПереченьНоменклатуры = Макет.ПолучитьОбласть("ПереченьНоменклатуры");
   ОбластьИтог = Макет.ПолучитьОбласть("Всего");
   ТабДок.Очистить();

   ВставлятьРазделительСтраниц = Ложь;
   Пока Выборка.Следующий() Цикл
      Если ВставлятьРазделительСтраниц Тогда
         ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
      КонецЕсли;

      ТабДок.Вывести(ОбластьЗаголовок);

      Шапка.Параметры.Заполнить(Выборка);
      ТабДок.Вывести(Шапка, Выборка.Уровень());

      ТабДок.Вывести(ОбластьПереченьНоменклатурыШапка);
      ВыборкаПереченьНоменклатуры = Выборка.ПереченьНоменклатуры.Выбрать();
      СуммаИтог = 0;
      Пока ВыборкаПереченьНоменклатуры.Следующий() Цикл
         ОбластьПереченьНоменклатуры.Параметры.Заполнить(ВыборкаПереченьНоменклатуры);
         ТабДок.Вывести(ОбластьПереченьНоменклатуры, ВыборкаПереченьНоменклатуры.Уровень());
         СуммаИтог = СуммаИтог + ВыборкаПереченьНоменклатуры.Сумма;
      КонецЦикла;
      
      ОбластьИтог.Параметры.ВсегоПоДокументу = СуммаИтог;
      ТабДок.Вывести(ОбластьИтог);

      ВставлятьРазделительСтраниц = Истина;
   КонецЦикла;
   //}}
КонецПроцедуры
не получается в печатной форме сгруппировать ...

LexaK

попробуйте этот код (могут быть ошибки, так как проверить не на чем)


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

   ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   Шапка = Макет.ПолучитьОбласть("Шапка");
   ОбластьПереченьНоменклатурыШапка = Макет.ПолучитьОбласть("ПереченьНоменклатурыШапка");
   ОбластьПереченьНоменклатуры = Макет.ПолучитьОбласть("ПереченьНоменклатуры");
   ОбластьИтог = Макет.ПолучитьОбласть("Всего");
   ТабДок.Очистить();

   ВставлятьРазделительСтраниц = Ложь;
   Пока Выборка.Следующий() Цикл
      Если ВставлятьРазделительСтраниц Тогда
         ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
      КонецЕсли;

      ТабДок.Вывести(ОбластьЗаголовок);

      Шапка.Параметры.Заполнить(Выборка);
      ТабДок.Вывести(Шапка, Выборка.Уровень());

      ТабДок.Вывести(ОбластьПереченьНоменклатурыШапка);
 
  //ВыборкаПереченьНоменклатуры = Выборка.ПереченьНоменклатуры.Выбрать();
  //СуммаИтог = 0;
  //Пока ВыборкаПереченьНоменклатуры.Следующий() Цикл
  //   ОбластьПереченьНоменклатуры.Параметры.Заполнить(ВыборкаПереченьНоменклатуры);
  //   ТабДок.Вывести(ОбластьПереченьНоменклатуры, ВыборкаПереченьНоменклатуры.Уровень());
  //   СуммаИтог = СуммаИтог + ВыборкаПереченьНоменклатуры.Сумма;
  //КонецЦикла;
 
  //заменено на вывод через ТЗ
  тзПереченьНоменклатуры = Выборка.ПереченьНоменклатуры.Выгрузить();
  тзПереченьНоменклатуры.Свернуть("Номенклатура,Цена","Количество,Сумма");
      СуммаИтог = 0;
  Для каждого ВыборкаПереченьНоменклатуры Из тзПереченьНоменклатуры Цикл
         ОбластьПереченьНоменклатуры.Параметры.Заполнить(ВыборкаПереченьНоменклатуры);
         ТабДок.Вывести(ОбластьПереченьНоменклатуры, ВыборкаПереченьНоменклатуры.Уровень());
         СуммаИтог = СуммаИтог + ВыборкаПереченьНоменклатуры.Сумма;
  КонецЦикла;
 
      ОбластьИтог.Параметры.ВсегоПоДокументу = СуммаИтог;
      ТабДок.Вывести(ОбластьИтог);

      ВставлятьРазделительСтраниц = Истина;
   КонецЦикла;
   //}}
КонецПроцедуры
ответ Понравился? (в смысле пригодился?)

Геннадий ОбьГЭС

Цитата: Региндроид от 25 мая 2021, 12:59
Только начала обучение
А обучение - чему?
Конфигурированию или программированию?
Зачем Вам программировать то, что делается штатно - встроеными в типовые конфигурации средствами без снятия с поддержки (и применения расширений)

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск