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

Обьеденить номенклатуру в воводе и проставить реквизит

Автор kot488, 17 сен 2017, 17:39

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

kot488

Есть документы, нужно на основании их создать групповой документ, который сгрупирует сначала по области, потом по городу и в конце по Адресу. По грипировки создается документ на какую улицу какой материал заказан.

&НаКлиенте
Процедура Поехали(Команда)
   ПоехалиНаСервере();
КонецПроцедуры

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

КонецПроцедуры


Запрос работает и формируется, но если на один адрес два разных упаковочных материала, то создаются разные заявки. Подскажите пожалуйстак, как можно сгрупировать что если на один адрес нужно 2 и больше упаковочных материалов, то что бы создавался один документ. Пока в консоле не смог реализовать.
И еще вопрос, как можно отобраным документам установить реквизит в документах Упаковка.Обработан = Ложь. Что бы при следующем запуске групировки, эти документы не брались во внимаение

oleg-x

Результат = Запрос.Выполнить().Выгрузить();
АдресаДоставки = Результат.Скопировать();
АдресаДоставки.Свернуть("ЗаказчикОбласть,ЗаказчикГород,ЗаказчикУлица"); //группируем таблицу только по адресам
Для каждого стр из АдресаДоставки Цикл //создаем документы по таблице адресов, сколько адресов столько и документов.
        НовыйДокумент = Документы.ГруппаУпаковка.СоздатьДокумент();
        НовыйДокумент.Область = Справочники.Области.НайтиПоНаименованию(стр.ЗаказчикОбласть);
        НовыйДокумент.Город = Справочники.Города.НайтиПоНаименованию(стр.ЗаказчикГород);
        НовыйДокумент.Улица = Справочники.Улица.НайтиПоНаименованию(стр.ЗаказчикУлица);
        НовыйДокумент.Дата = ТекущаяДата();
    Для Каждого ЭлементРезультата из Результат Цикл
        Если (стр.ЗаказчикОбласть = ЭлементРезультата.ЗаказчикОбласть)
                И (стр.ЗаказчикОбласть = ЭлементРезультата.ЗаказчикОбласть)
                 И (стр.ЗаказчикОбласть = ЭлементРезультата.ЗаказчикОбласть) Тогда  //если адрес совпал с основной таблицей, то добавляем в документ упаковку.
                     
            НоваяСтрока = НовыйДокумент.УпаковочныйМатериал.Добавить();
            НоваяСтрока.УпаковочныйМатериал = Справочники.УпаковочныйМатериал.НайтиПоНаименованию(ЭлементРезультата.УпаковочныйМатериал);
            НоваяСтрока.Количество = ЭлементРезультата.Количество;
        КонецЕсли;
    КонецЦикла;
    НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
КонецЦикла;
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

kot488

Цитата: oleg-x от 17 сен 2017, 19:23

Не совсем, номенклатуру почти групирует. На первый адрес что на скрине должен ехать только один скотч, а оно все отправило



А на этот адрес должно ехать два скотча и два полиэтилена


oleg-x

Если (стр.ЗаказчикОбласть = ЭлементРезультата.ЗаказчикОбласть)
                И (стр.ЗаказчикОбласть = ЭлементРезультата.ЗаказчикОбласть)
                 И (стр.ЗаказчикОбласть = ЭлементРезультата.ЗаказчикОбласть) Тогда  //если адрес совпал с основной таблицей, то добавляем в документ упаковку.

Потому что тупо скопирован код, который я написали, даже не посмотрел. Вот в этом условие надо прописать, город, улица. Забыл просто изменить названия реквизитов.
P.S. Копипаст - это зло.
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Теги:

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

Рейтинг@Mail.ru

Поиск