Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 фев 2025, 18:52

Отчет сравнения материалов не отображает материалы

Автор Yanawerg, 30 янв 2025, 09:13

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

Yanawerg

В данном отчете сравниваются материалы использованные в 1с с материалами из другой программы.
Сравниваются материалы по наименованию номенклатуры но в 1с есть номенклатуры которые имеют особые наименования.
Например обычно наименование номенклатуры такие: 293215№001
Но есть и новые которые имеют наименование например: МП ОК100-50 но у таких спецификация называется по обычному так сказать (293215№001).

Из-за того что наименование такое поле "Материал1С" получается пустым.

Как вообще сделать так что бы в поле Материал выдавалось по наименованию спецификации а в поле МатериалИТ осталось как есть ?


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    //Программно формируем отчет
    //Отменяем стандартную обработку
    СтандартнаяОбработка = Ложь;
    //Получаем схему
    Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
   
    //...и настройки
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
   
    //Создаем компоновщик макета и получаем макет компоновки
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, ДанныеРасшифровки);

//*************************************************
Запрос = новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               | ЗаказТовары.Ссылка КАК ЗаказПокупателя,
               | ЗаказТовары.Ссылка.ИТКСчет КАК ИТКСчет,
               | ЗаказТовары.Номенклатура,
               | ЗаказТовары.Номенклатура.Наименование КАК НоменклатураНаименование,
               | ВЫРАЗИТЬ(ЗаказТовары.Номенклатура.Артикул КАК СТРОКА(100)) КАК Артикул,
               |ИЗ
               | Документ.ЗаказПокупателя.Товары КАК ЗаказТовары
               | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК Реализация
               | ПО (Реализация.Сделка = ЗаказТовары.Ссылка)
               | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
               | РеализацияТовары.Ссылка КАК Ссылка,
               | СУММА(1) КАК КолвоСтрок
               | ИЗ
               | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТовары
               |
               | СГРУППИРОВАТЬ ПО
               | РеализацияТовары.Ссылка) КАК ЗапросРТ
               | ПО (Реализация.Ссылка = ЗапросРТ.Ссылка)
               |ГДЕ
               | Реализация.Дата МЕЖДУ &ДатаНач И &ДатаКон
               | И ЗаказТовары.Ссылка.Проведен = ИСТИНА
               | И Реализация.Проведен = ИСТИНА
               | И ТИПЗНАЧЕНИЯ(ЗаказТовары.Ссылка.ИТКСчет) = ТИП(Документ.ИТК5_Счет)
               | И Реализация.Сделка ССЫЛКА Документ.ЗаказПокупателя
               | И ЗапросРТ.КолвоСтрок > 0";

Запрос.УстановитьПараметр("ДатаНач",МакетКомпоновки.ЗначенияПараметров.НачДата.Значение);
Запрос.УстановитьПараметр("ДатаКон",МакетКомпоновки.ЗначенияПараметров.КонДата.Значение);
//Запрос.УстановитьПараметр("ТекЗаказ",Документы.ЗаказПокупателя.НайтиПоРеквизиту("НомерЗаявки",38785));

тзДанные = Запрос.Выполнить().Выгрузить();
ВидПродукция = Справочники.ВидыНоменклатуры.НайтиПоКоду("000000003");

Для каждого тзСтрока из тзДанные Цикл
Если тзСтрока.Номенклатура.ВидНоменклатуры = ВидПродукция Тогда
тзСтрока.НоменклатураНаименование = СтрЗаменить(тзСтрока.НоменклатураНаименование," ","");
КонецЕсли
КонецЦикла;

//тзДанные.ВыбратьСтроку();
   
//ВнешниеНаборыДанных = Новый Структура;
//ВнешниеНаборыДанных.Вставить("тзДанные",тзДанные);
//*************************************************

//*************************************************
Запрос = новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
           |    Таблица.ЗаказПокупателя КАК ЗаказПокупателя,
   | Таблица.Номенклатура КАК Номенклатура,
           |    Таблица.НоменклатураНаименование КАК НоменклатураНаименование,
   |    Таблица.Артикул КАК Артикул
           |ПОМЕСТИТЬ ВремТаб
           |ИЗ
           |    &тзДанные КАК Таблица
           |;
   |////////////////////////////////////////////////////////
   |ВЫБРАТЬ
               | тзДанные.ЗаказПокупателя,
   | тзДанные.Номенклатура,
   | ЗапросСпецификация.МатериалИТ,
   | ЗапросСпецификация.Артикул,
   | ЗапросСпецификация.КоличествоОдинаковых КАК КоличествоПлан,
   | ЗапросСпецификация.Себестоимость        КАК СебестоимостьПлан
   |ПОМЕСТИТЬ ВремРезультат
   |ИЗ
   | ВремТаб КАК тзДанные
   |ЛЕВОЕ СОЕДИНЕНИЕ(ВЫБРАТЬ
               | ЗаказПокупателяДок.Ссылка КАК ЗаказПокупателя,
               | ИТК5_Спецификация.Изделие.Наименование КАК Изделие,
               | ИТК5_Спецификация.Материал КАК МатериалИТ,
               | ВЫРАЗИТЬ(ИТК5_Спецификация.Артикул КАК СТРОКА(100)) КАК Артикул,
               | СУММА(ИТК5_Спецификация.Количество) КАК КоличествоОдинаковых,
               | СУММА(ИТК5_Спецификация.СуммаСебестоимость) КАК Себестоимость
               |ИЗ
               | РегистрСведений.ИТК5_Спецификация КАК ИТК5_Спецификация
               | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателяДок
               | ПО (ЗаказПокупателяДок.ИТКСчет = ИТК5_Спецификация.Регистратор)
   | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК Реализация
   |     ПО Реализация.Сделка = ЗаказПокупателяДок.Ссылка
   | ЛЕВОЕ СОЕДИНЕНИЕ
   | (ВЫБРАТЬ
   | РеализацияТовары.Ссылка,
   | СУММА(1) КАК КолвоСтрок
   | ИЗ
   | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТовары
   | СГРУППИРОВАТЬ ПО
   | РеализацияТовары.Ссылка
   | ) ЗапросРТ ПО Реализация.Ссылка = ЗапросРТ.Ссылка
               |ГДЕ
               | ИТК5_Спецификация.ТипМатериала <> &Работа
               | И НЕ(ИТК5_Спецификация.ВИД = &Монтаж
               | И ИТК5_Спецификация.ТипМатериала = &КрепежМонтаж)
               | И Реализация.Дата МЕЖДУ &ДатаНач И &ДатаКон
   | И Реализация.Проведен = Истина
   | И Реализация.Сделка ССЫЛКА Документ.ЗаказПокупателя
   | И ЗапросРТ.КолвоСтрок > 0
               |СГРУППИРОВАТЬ ПО
               | ЗаказПокупателяДок.Ссылка,
               | ИТК5_Спецификация.Изделие.Наименование,
               | ИТК5_Спецификация.Материал,
               | ИТК5_Спецификация.Артикул) КАК ЗапросСпецификация
   |ПО ЗапросСпецификация.ЗаказПокупателя = тзДанные.ЗаказПокупателя И (ЗапросСпецификация.Изделие = тзДанные.НоменклатураНаименование
   |ИЛИ ЗапросСпецификация.Артикул = тзДанные.Артикул)
   |;
   |////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   | тзДанные.ЗаказПокупателя,
   | тзДанные.Номенклатура,
   | тзДанные.МатериалИТ,
   | NULL КАК Материал1С,
   | тзДанные.Артикул,
   | тзДанные.КоличествоПлан,
   | тзДанные.СебестоимостьПлан,
   | 0 КАК КоличествоФакт,
   | 0 КАК СебестоимостьФакт
   |ИЗ
   | ВремРезультат КАК тзДанные
   |
   |ОБЪЕДИНИТЬ ВСЕ
   |
   |ВЫБРАТЬ
   | ОтчетПроизводстваЗаСмену.Заказ КАК ЗаказПокупателя,
   | ЗапросСебестоимость.Продукция КАК Номенклатура,
   | NULL КАК МатериалИТ,
   | ЗапросСебестоимость.Затрата КАК Материал1С,
   | ВЫБОР КОГДА Соответствия.Артикул ЕСТЬ NULL ТОГДА
   | ВЫРАЗИТЬ(ЗапросСебестоимость.Затрата.Артикул КАК СТРОКА(100))
   | ИНАЧЕ
   | ВЫРАЗИТЬ(Соответствия.Артикул КАК СТРОКА(100))
   | КОНЕЦ КАК Артикул,
   | 0 КАК КоличествоПлан,
   | 0 КАК СебестоимостьПлан,
   | ЗапросСебестоимость.Количество КАК КоличествоФакт,
   | ЗапросСебестоимость.Сумма КАК СебестоимостьФакт
   |ИЗ
   | Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСмену
   | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
   | ЗатратыНаВыпускПродукции.Регистратор,
   | ЗатратыНаВыпускПродукции.Продукция,
   | ЗатратыНаВыпускПродукции.Затрата,
   | СУММА(ЗатратыНаВыпускПродукции.Количество),
   | СУММА(ЗатратыНаВыпускПродукции.Сумма)
   | ИЗ
   | РегистрНакопления.ЗатратыНаВыпускПродукцииБухгалтерскийУчет КАК ЗатратыНаВыпускПродукции
   | СГРУППИРОВАТЬ ПО
   | ЗатратыНаВыпускПродукции.Регистратор,
   | ЗатратыНаВыпускПродукции.Продукция,
   | ЗатратыНаВыпускПродукции.Затрата
   | ) ЗапросСебестоимость ПО ЗапросСебестоимость.Продукция = ОтчетПроизводстваЗаСмену.Номенклатура И ЗапросСебестоимость.Регистратор = ОтчетПроизводстваЗаСмену.Ссылка
   | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИТКСоответствия КАК Соответствия
   | ПО Соответствия.Номенклатура = ОтчетПроизводстваЗаСмену.Номенклатура
   | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК Реализация
   |     ПО Реализация.Сделка = ОтчетПроизводстваЗаСмену.Заказ
   | ЛЕВОЕ СОЕДИНЕНИЕ
   | (ВЫБРАТЬ
   | РеализацияТовары.Ссылка,
   | СУММА(1) КАК КолвоСтрок
   | ИЗ
   | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТовары
   | СГРУППИРОВАТЬ ПО
   | РеализацияТовары.Ссылка
   | ) ЗапросРТ ПО Реализация.Ссылка = ЗапросРТ.Ссылка
   |ГДЕ
   | Реализация.Дата МЕЖДУ &ДатаНач И &ДатаКон
   | И Реализация.Проведен = Истина
   | И Реализация.Сделка ССЫЛКА Документ.ЗаказПокупателя
   | И ОтчетПроизводстваЗаСмену.Номенклатура.ВидНоменклатуры = &ВидПродукция
   | И ЗапросРТ.КолвоСтрок > 0
   |";

Запрос.УстановитьПараметр("ДатаНач",МакетКомпоновки.ЗначенияПараметров.НачДата.Значение);
Запрос.УстановитьПараметр("ДатаКон",МакетКомпоновки.ЗначенияПараметров.КонДата.Значение);
Запрос.УстановитьПараметр("тзДанные",тзДанные);
Запрос.УстановитьПараметр("Работа","Работа");
Запрос.УстановитьПараметр("Монтаж","Монтаж");
Запрос.УстановитьПараметр("КрепежМонтаж","Крепеж, монтаж");
//Запрос.УстановитьПараметр("ТекЗаказ",Документы.ЗаказПокупателя.НайтиПоРеквизиту("НомерЗаявки",117935));
Запрос.УстановитьПараметр("ВидПродукция",ВидПродукция);

РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Для каждого СтрТЗ из РезультатЗапроса Цикл
СтрТЗ.Артикул = ВРег(СтрТЗ.Артикул);
КонецЦикла;

//РезультатЗапроса.ВыбратьСтроку();
//ВремАртикулаИТ = РезультатЗапроса.Скопировать();
//ВремАртикулаИТ.Свернуть("Артикул,МатериалИТ","");
//
//ВремАртикула1С = РезультатЗапроса.Скопировать();
//ВремАртикула1С.Свернуть("Артикул,Материал1С","");

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

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

РезультатЗапроса.Свернуть("ЗаказПокупателя, Номенклатура, Артикул","КоличествоПлан,СебестоимостьПлан,КоличествоФакт,СебестоимостьФакт");
//РезультатЗапроса.ВыбратьСтроку();

//*************************************************
Запрос = новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
   | Таблица.ЗаказПокупателя,
   | Таблица.Номенклатура,
   | Таблица.Артикул,
   | Таблица.КоличествоПлан,
   | Таблица.СебестоимостьПлан,
   | Таблица.КоличествоФакт,
   | Таблица.СебестоимостьФакт
   |ПОМЕСТИТЬ ВремТаб
   |ИЗ
   |    &РезультатЗапроса КАК Таблица
   |;
   |////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   | ТаблицаИТ.ЗаказПокупателя,
   | ТаблицаИТ.МатериалИТ,
   | ТаблицаИТ.Артикул
   |ПОМЕСТИТЬ ВремТабИТ
   |ИЗ
   |    &ВремАртикулаИТ КАК ТаблицаИТ
   |ГДЕ
   | НЕ ТаблицаИТ.МатериалИТ ЕСТЬ NULL
   |;
   |////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   | Таблица1С.ЗаказПокупателя,
   | Таблица1С.Материал1С,
   | Таблица1С.Артикул
   |ПОМЕСТИТЬ ВремТаб1С
   |ИЗ
   |    &ВремАртикула1С КАК Таблица1С
   |ГДЕ
   | НЕ Таблица1С.Материал1С ЕСТЬ NULL
   |;
   |////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   | тзДанные.ЗаказПокупателя,
   | тзДанные.Номенклатура,
   | тзДанные.Артикул,
   | тзДанные.КоличествоПлан,
   | тзДанные.СебестоимостьПлан,
   | тзДанные.КоличествоФакт,
   | тзДанные.СебестоимостьФакт,
   | ВремТабИТ.МатериалИТ,
   | ВремТаб1С.Материал1С,
   | (ISNULL(тзДанные.СебестоимостьФакт,0) - ISNULL(тзДанные.СебестоимостьПлан,0)) КАК АбсолютнаяРазница,
   | ВЫБОР КОГДА ISNULL(тзДанные.СебестоимостьФакт,0) <> 0 ТОГДА
   | (ISNULL(тзДанные.СебестоимостьФакт,0) - ISNULL(тзДанные.СебестоимостьПлан,0))/ISNULL(тзДанные.СебестоимостьФакт,0)*100
   | ИНАЧЕ 0 КОНЕЦ КАК ОтносительнаяРазница
   |ИЗ
   | ВремТаб КАК тзДанные
   |ЛЕВОЕ СОЕДИНЕНИЕ
   | ВремТабИТ КАК ВремТабИТ ПО ВремТабИТ.Артикул = тзДанные.Артикул И ВремТабИТ.ЗаказПокупателя = тзДанные.ЗаказПокупателя
   |ЛЕВОЕ СОЕДИНЕНИЕ
   | ВремТаб1С КАК ВремТаб1С ПО ВремТаб1С.Артикул = тзДанные.Артикул И ВремТаб1С.ЗаказПокупателя = тзДанные.ЗаказПокупателя
   |ГДЕ
   | НЕ тзДанные.Артикул ЕСТЬ NULL И НЕ тзДанные.Артикул = """"
   //|УПОРЯДОЧИТЬ ПО
   //| тзДанные.ЗаказПокупателя,
   //| тзДанные.Номенклатура,
   //| тзДанные.Артикул
   |";

Запрос.УстановитьПараметр("РезультатЗапроса",РезультатЗапроса);
Запрос.УстановитьПараметр("ВремАртикулаИТ",ВремАртикулаИТ);
Запрос.УстановитьПараметр("ВремАртикула1С",ВремАртикула1С);

РезультатЗапроса = Запрос.Выполнить().Выгрузить();
//РезультатЗапроса.ВыбратьСтроку();

//*************************************************
   
    ВнешниеНаборыДанных = Новый Структура;
    ВнешниеНаборыДанных.Вставить("тзДанные",РезультатЗапроса);
//*************************************************
   
    //Инициализируем процессор компоновки
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
    //<--------------------------------------------------------------------------------------->//
    //Очищаем документ результата
    ДокументРезультат.Очистить();
   
    //Выводим отчет в документ
    ПроцессорВывода = Новый
    ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры


Теги:

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

Рейтинг@Mail.ru

Поиск