Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подскажите а реально ли создать такую Печатную форму
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Profi_1C77
Вообщем пишу обработку, в которой одна из команд идет создание печатной формы маршрутного листа :
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |    РеализацияТоваровУслугТовары.Ссылка.Контрагент,
        |    РеализацияТоваровУслугТовары.Ссылка.АвтоПеревозки КАК АвтоПеревозки,
        |    РеализацияТоваровУслугТовары.Ссылка.Водитель КАК Водитель,
        |    РеализацияТоваровУслугТовары.Номенклатура,
        |    РеализацияТоваровУслугТовары.Сумма,
        |    СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество,
        |    СУММА(РеализацияТоваровУслугТовары.ЕдиницаИзмерения.Вес * РеализацияТоваровУслугТовары.Количество) КАК ОбщийВес
        |ПОМЕСТИТЬ ВТ_Продажи
        |ИЗ
        |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
        |ГДЕ
        |    РеализацияТоваровУслугТовары.Ссылка.Проведен
        |    И РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата, ДЕНЬ)
        |
        |СГРУППИРОВАТЬ ПО
        |    РеализацияТоваровУслугТовары.Ссылка.Контрагент,
        |    РеализацияТоваровУслугТовары.Ссылка.АвтоПеревозки,
        |    РеализацияТоваровУслугТовары.Ссылка.Водитель,
        |    РеализацияТоваровУслугТовары.Номенклатура,
        |    РеализацияТоваровУслугТовары.Сумма
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |    ВозвратТоваровОтПокупателяТовары.Ссылка.Контрагент,
        |    ВозвратТоваровОтПокупателяТовары.Ссылка.АвтоПеревозки,
        |    ВозвратТоваровОтПокупателяТовары.Ссылка.Водитель,
        |    ВозвратТоваровОтПокупателяТовары.Номенклатура,
        |    -ВозвратТоваровОтПокупателяТовары.Сумма,
        |    -ВозвратТоваровОтПокупателяТовары.Количество,
        |    -(ВозвратТоваровОтПокупателяТовары.ЕдиницаИзмерения.Вес * ВозвратТоваровОтПокупателяТовары.Количество)
        |ИЗ
        |    Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
        |ГДЕ
        |    ВозвратТоваровОтПокупателяТовары.Ссылка.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата, ДЕНЬ)
        |    И ВозвратТоваровОтПокупателяТовары.Ссылка.Проведен
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |    КонтактнаяИнформация.Объект КАК КонтрагентДоставки,
        |    КонтактнаяИнформация.Тип,
        |    КонтактнаяИнформация.Вид,
        |    КонтактнаяИнформация.ЗначениеПоУмолчанию,
        |    КонтактнаяИнформация.Доставка,
        |    КонтактнаяИнформация.РайонДоставки,
        |    КонтактнаяИнформация.Вид.Наименование,
        |    КонтактнаяИнформация.Представление
        |ПОМЕСТИТЬ ВТ_Доставка
        |ИЗ
        |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        |ГДЕ
        |    КонтактнаяИнформация.Вид.Ссылка = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.АдресДоставкиКонтрагента)
        |    И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
        |    И КонтактнаяИнформация.Доставка
        |    И КонтактнаяИнформация.Объект В
        |            (ВЫБРАТЬ
        |                ВТ_Продажи.Контрагент
        |            ИЗ
        |                ВТ_Продажи КАК ВТ_Продажи)
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВТ_Продажи.АвтоПеревозки,
        |    ВТ_Продажи.Водитель,
        |    ВТ_Продажи.Контрагент,
        |    ВТ_Доставка.РайонДоставки,
        |    ВТ_Доставка.Представление КАК АдресДоставки,
        |    ВТ_Продажи.Номенклатура,
        |    ВТ_Продажи.Количество,
        |    ВТ_Продажи.Сумма,
        |    ВТ_Продажи.ОбщийВес
        |ПОМЕСТИТЬ ВТ_Данные
        |ИЗ
        |    ВТ_Продажи КАК ВТ_Продажи
        |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Доставка КАК ВТ_Доставка
        |        ПО ВТ_Продажи.Контрагент = ВТ_Доставка.КонтрагентДоставки
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВТ_Данные.Контрагент КАК Контрагент,
        |    ВТ_Данные.Номенклатура КАК Номенклатура,
        |    СУММА(ВТ_Данные.Количество) КАК Количество,
        |    СУММА(ВТ_Данные.Сумма) КАК Сумма,
        |    СУММА(ВТ_Данные.ОбщийВес) КАК ОбщийВес,
        |    ВТ_Данные.АвтоПеревозки
        |ИЗ
        |    ВТ_Данные КАК ВТ_Данные
        |
        |СГРУППИРОВАТЬ ПО
        |    ВТ_Данные.Контрагент,
        |    ВТ_Данные.Номенклатура,
        |    ВТ_Данные.АвтоПеревозки
        |ИТОГИ
        |    СУММА(Количество),
        |    СУММА(Сумма),
        |    СУММА(ОбщийВес)
        |ПО
        |    Номенклатура,
        |    Контрагент";
    
    Запрос.УстановитьПараметр("Дата", Дата);
    
    РезультатЗапроса = Запрос.Выполнить();

По логике - собирает Расходные - Возвраты группирует их за Дату;
В итоге хотят видеть
необходимо зарегистрироваться для просмотра ссылки

Можно ли такое сделать не используя Построитель ( не шарю его ) или СКД ( там клепать свой макет наверное надо будет ) ?
andytg
Profi_1C77 @ Сегодня, 13:27 необходимо зарегистрироваться для просмотра ссылки ,

непонятен смысл вопроса, а что мешает?

Profi_1C77
andytg @ Сегодня, 14:20 необходимо зарегистрироваться для просмотра ссылки ,
Не могу построить Строки - Колонки через "Вывод в табличный документ" Бред выходит
andytg
Profi_1C77 @ Сегодня, 14:35 необходимо зарегистрироваться для просмотра ссылки ,
как вариант -- выгружайте результат запроса в ТЗ, считайте колонки и выводите на печать уже ТЗ как хотите...
Profi_1C77
andytg @ Сегодня, 14:55 необходимо зарегистрироваться для просмотра ссылки ,
эта мысль мне приходила ...спс.
Может есть еще варианты?
sava1
Profi_1C77 @ Сегодня, 15:43 необходимо зарегистрироваться для просмотра ссылки ,

а какие еще могут быть - обход выборки по группировкам - Номенклатура / Контрагент - и вывод в табдок
Profi_1C77
sava1 @ Сегодня, 15:47 необходимо зарегистрироваться для просмотра ссылки ,
в скд я б сделал на ура. ... ( кроме подвала)
ок, как правильно поправить запрос ?
кроме того у меня в заголовке таблица идет Авто1 - Водитель 1 - > Бланк;
и тд,
Авто2 -Водиель2 - > Бланк;
sava1
Profi_1C77 @ Сегодня, 15:54 необходимо зарегистрироваться для просмотра ссылки ,

  |ИТОГИ
        |    СУММА(Количество),
        |    СУММА(Сумма),
        |    СУММА(ОбщийВес)
        |ПО
        |    Номенклатура,
        |    Контрагент";


здесь уже все есть
alex1c
Ви виложіть код тоді можна підправити, вивести можна те що вам потрібно.
Profi_1C77
необходимо зарегистрироваться для просмотра ссылки
TohaMonster
Макет нужно переделать, чтобы он был похож на таблицу, которую Вы хотите получить в итоге (Номенклатура в строках, Контрагент - в столбцах)
В цикле с Контрагентом вместо ТабДок.Вывести(ОбластьКонтрагент, ВыборкаКонтрагент.Уровень()) нужно что-то вроде ТабДок.Присоединить(ОбластьКонтрагентНоменклатура), где ОбластьКонтрагентНоменклатура = Макет.ПолучитьОбласть("Номенклатура|Контрагент");

И еще. Желательно сделать ВТВсеКонтрагенты и соединить ее с итоговой таблицей, заполнив нулями недостающие данные шахматки. Ну и при формировании Шапки и Подвала тоже придется обходить ВТВсеКонтрагенты.

В общем, с СКД было бы намного проще
Profi_1C77
Просьба кто похожее делал в СКД с своим макетом ( произвольный / индивидуальный) поделитесь примером;
для понимания
alex1c
Profi_1C77 @ Сегодня, 15:17 необходимо зарегистрироваться для просмотра ссылки ,
    Пока ВыборкаНоменклатура.Следующий() Цикл
        ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура);
        ТабДок.Вывести(ОбластьНоменклатура, ВыборкаНоменклатура.Уровень());
        
        ВыборкаКонтрагент = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент", "ВСЕ");
        Пока ВыборкаКонтрагент.Следующий() Цикл
            ОбластьКонтрагент.Параметры.Заполнить(ВыборкаКонтрагент);
            ТабДок.Присоединить(ОбластьКонтрагент);
        КонецЦикла;
        //ВыборкаКонтрагент = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,);
        //
        //Пока ВыборкаКонтрагент.Следующий() Цикл
        //    ОбластьКонтрагент.Параметры.Заполнить(ВыборкаКонтрагент);
        //    ТабДок.Вывести(ОбластьКонтрагент, ВыборкаКонтрагент.Уровень());
        //КонецЦикла;
    КонецЦикла;

В макеті потрібно додати вертикальну секцію і її тут приєднувати
sava1
Цитата(TohaMonster @ 29.09.25, 16:51) необходимо зарегистрироваться для просмотра ссылки
И еще. Желательно сделать ВТВсеКонтрагенты и соединить ее с итоговой таблицей, заполнив нулями недостающие данные шахматки. Ну и при формировании Шапки и Подвала тоже придется обходить ВТВсеКонтрагенты.


откуда такой бред? ИИ подсказал?
Profi_1C77
alex1c @ Сегодня, 21:03 необходимо зарегистрироваться для просмотра ссылки ,
макет не верный - это генерированный от "левого"; он в корне не верен.
andytg
Profi_1C77, походу вопрос -- это у вас бухгалтерия?

если нет, то зачем вы в запросе перебираете документы, когда есть проводки в регистрах?
sava1
andytg @ Сегодня, 0:00 необходимо зарегистрироваться для просмотра ссылки ,

|    РеализацияТоваровУслугТовары.Ссылка.Контрагент,
        |    РеализацияТоваровУслугТовары.Ссылка.АвтоПеревозки КАК АвтоПеревозки,
        |    РеализацияТоваровУслугТовары.Ссылка.Водитель КАК Водитель,
        |    РеализацияТоваровУслугТовары.Номенклатура,
        |    РеализацияТоваровУслугТовары.Сумма,
        |    СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество,
        |    СУММА(РеализацияТоваровУслугТовары.ЕдиницаИзмерения.Вес * РеализацияТоваровУслугТовары.Количество) КАК ОбщийВес


Вы реально думаете, что это все есть в проводках?
Profi_1C77
andytg @ Сегодня, 0:00 необходимо зарегистрироваться для просмотра ссылки ,
УТП , зачем мне регистр если у меня выборка по Шапке-Товары;
к тому же
РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата, ДЕНЬ)

лучше пример такого в СКД дайте похожий для обучения
sava1
Цитата(Profi_1C77 @ 30.09.25, 12:45) необходимо зарегистрироваться для просмотра ссылки
лучше пример такого в СКД дайте похожий для обучения


проще без СКд.
если очень хоцца - необходимо зарегистрироваться для просмотра ссылки
andytg
Цитата(sava1 @ 30.09.25, 11:42) необходимо зарегистрироваться для просмотра ссылки
Вы реально думаете, что это все есть в проводках?

нет конечно же, но у проводки есть регистратор, ну а дальше доступно все то же самое

помню такое, что в 1с очень негативно относятся к переборке непосредственно документов, у которых есть движения регистров -- только если у документов проводок нет, тогда допустимо обращение непосредственно к документам
TohaMonster
Цитата(sava1 @ 29.09.25, 21:04) необходимо зарегистрироваться для просмотра ссылки
откуда такой бред? ИИ подсказал?

А никак повежливее нельзя? Я, вроде, не оскорблял Вас. Если Вы чего-то не понимаете, это не значит, что этого нет

Поясню свой пост. Возможно, написал не очень понятно. Про ВТВсеКонтрагенты

Пусть имеем такую картину продаж: Контрагент1 покупал только Товар1. Контрагент2 покупал только Товар2
ВЫБРАТЬ
    "Товар1" КАК Номенклатура,
    "Контрагент1" КАК Контрагент,
    50 КАК Кво
ПОМЕСТИТЬ ВТПродажи

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Товар2",
    "Контрагент2",
    25
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТПродажи.Номенклатура КАК Номенклатура,
    ВТПродажи.Контрагент КАК Контрагент,
    ВТПродажи.Кво КАК Кво
ИЗ
    ВТПродажи КАК ВТПродажи
ИТОГИ
    СУММА(Кво)
ПО
    Номенклатура,
    Контрагент


Что мы получим в результате выполнения запроса?

№ Номенклатура Контрагент Кво
1 Товар1 NULL 50
2 Товар1 Контрагент1 50
3 Товар1 Контрагент1 50
4 Товар2 NULL 25
5 Товар2 Контрагент2 25
6 Товар2 Контрагент2 25

Если мы не знаем, сколько у нас всего столбцов (Контрагентов), то нам будет трудно построить шапку таблицы на основании такого запроса. И поместить количество именно в нужный столбец. Подчеркну, это без использовании СКД. Для СКД все проще, но, конечно, никаких итогов там в запросе не нужно
sava1
TohaMonster @ Сегодня, 17:06 необходимо зарегистрироваться для просмотра ссылки ,

А че сразу в истерику?
Это не оскорбление, а констатация факта.

по поводу
Цитата
" Если Вы чего-то не понимаете, это не значит, что этого нет"


зачем лепить плоскую таблицу, когда у человека уже все есть?
выше (до Вас) алекс привел пример, где есть такая конструкция

ВыборкаКонтрагент = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент", "ВСЕ");


по итогу могу только подтвердить - Если Вы чего-то не понимаете, это не значит, что этого нет

Цитата(andytg @ 30.09.25, 15:18) необходимо зарегистрироваться для просмотра ссылки
дальше доступно все то же самое


А какой смысл делать выборку из ОЧЕНЬ тяжелой таблицы Хозрасчетный, если можно спокойно выбрать данные из таблицы документов.
Profi_1C77
andytg @ Сегодня, 15:18 необходимо зарегистрироваться для просмотра ссылки ,
Выборка идет за 1 день;
Запрос идет к табличной части - она отдельно хранится ,
шапки документов - тоже отдельная таблица;
Выборка по регистру ( оборотному) - тяжелее будет
TohaMonster
sava1 @ Сегодня, 18:37 необходимо зарегистрироваться для просмотра ссылки ,

Хм... Признаю пробел в образовании. Третий параметр в РезЗапроса.Выбрать() как-то прошел мимо меня, никогда не доводилось использовать, буду знать
andytg
sava1 @ Сегодня, 18:37 необходимо зарегистрироваться для просмотра ссылки ,
я имел в виду не Хозрасчетный, а (это ж УТП -- с ней не работал, только планировали её в своё время, но не сложилось -- в некотором роде она сильно похожа на 7.7 комплексную, которая у нас была до этого -- решили второй раз на те же грабли не наступать smile.gif) там же должны быть какие-то регистры типа "Продажи" или "Запасы" -- я это имел в виду

но, ладно, согласен
Vofka
Цитата(andytg @ 30.09.25, 15:18) необходимо зарегистрироваться для просмотра ссылки
помню такое, что в 1с очень негативно относятся к переборке непосредственно документов, у которых есть движения регистров

Это если вы сдаете экзамен. В реальной жизни перебирать документы это обычное дело.
sava1
andytg @ Вчера, 23:09 необходимо зарегистрироваться для просмотра ссылки ,

Выборка из регистра оправдана, если можно получить ВСЕ необходимые данные.
Если получать Регистратор - это только приведет к лишним запросам к БД, потому ,что потом все равно надо делать выборку из таблиц Документа.
Смысл ???
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.