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

Редактирование макета внешней обратбоки

Автор ya.dmitri, 04 июл 2014, 10:56

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

ya.dmitri

Всем привет! Знающие люди, помогите. У меня есть внеш обработка и в ней необходимо добавить колонку "Марка раствора / бетонной смеси", в которой необходимо чтобы выводилось условие: например
если номенклатура "цемент " | количество факт 0,77 | марка (0,77*4)=0,308- то марка 150 (если колфакт <=420 тогда 150-ый), только по цементу

Вот картинка (что должно получиться)

----------------------------------------------------------------------------------------------------------------
1с Предприятие 8.2.19.83.
Бухгалтерия предприятия 2.0.58.6

Код модуля формы


Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.УстановитьПериод(ДатаНач, ?(ДатаКон='0001-01-01', ДатаКон, КонецДня(ДатаКон)));
НастройкаПериода.РедактироватьКакИнтервал = Истина;
НастройкаПериода.РедактироватьКакПериод = Истина;
НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
Если НастройкаПериода.Редактировать() Тогда
ДатаНач = НастройкаПериода.ПолучитьДатуНачала();
ДатаКон = НастройкаПериода.ПолучитьДатуОкончания();
КонецЕсли;
КонецПроцедуры

Процедура ДействияФормыСформировать(Кнопка)

Отказ = Ложь;

Если Не ЗначениеЗаполнено(ДатаНач) Или Не ЗначениеЗаполнено(ДатаКон) Тогда
Сообщить("Не указан период!");
Отказ = Истина;
ИначеЕсли ДатаНач > ДатаКон Тогда
Сообщить("Период указан неверно!");
Отказ = Истина;
КонецЕсли;

Если Отказ Тогда
Возврат;
КонецЕсли;

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



Если СпособВывода = 1 Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВложенныйЗапрос.Дата", "&ДатаКон");
ИначеЕсли СпособВывода = 2 Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВложенныйЗапрос.Дата", "НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Дата, ДЕНЬ)");
КонецЕсли;

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

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

Макет = ПолучитьМакет("Макет");
ТабДок = ЭлементыФормы.ТабДок;
ТабДок.Очистить();

Область = Макет.ПолучитьОбласть("Заголовок");
Область.Параметры.ДатаНач = Формат(ДатаНач, "ДФ=dd.MM.yyyy; ДЛФ=D");
Область.Параметры.ДатаКон = Формат(ДатаКон, "ДФ=dd.MM.yyyy; ДЛФ=D");
ТабДок.Вывести(Область);

Если СпособВывода <> 1 Тогда
ТабДок.Вывести(Макет.ПолучитьОбласть("ШапкаТаблицыПериод"));
Иначе
ТабДок.Вывести(Макет.ПолучитьОбласть("ШапкаТаблицы"));
КонецЕсли;

Пока ВыборкаПоДатам.Следующий() Цикл

Выборка = ВыборкаПоДатам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "НоменклатурнаяГруппа");
Пока Выборка.Следующий() Цикл
Если СпособВывода <> 1 Тогда
Область = Макет.ПолучитьОбласть("СтрокаТаблицыПериод");
Иначе
Область = Макет.ПолучитьОбласть("СтрокаТаблицы");
КонецЕсли;
Область.Параметры.Заполнить(Выборка);
Если СпособВывода = 2 Тогда
Область.Параметры.Дата = Формат(Выборка.Дата, "ДФ=dd.MM.yyyy; ДЛФ=D");
КонецЕсли;

ТабДок.Вывести(Область);
КонецЦикла;

КонецЦикла;

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

Если СпособВывода <> 1 Тогда
Область = Макет.ПолучитьОбласть("ПодвалТаблицыПериод");
Иначе
Область = Макет.ПолучитьОбласть("ПодвалТаблицы");
КонецЕсли;
Область.Параметры.Заполнить(ВыборкаПоНоменклатурнымГруппам);
ТабДок.Вывести(Область);

КонецЦикла;

ТабДок.ФиксацияСверху = 4;
ТабДок.ТолькоПросмотр = Истина;

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

Процедура ПриОткрытии()
СпособВывода = 1;
КонецПроцедуры

ya.dmitri

Цитата: ya.dmitri от 04 июл 2014, 10:56
Всем привет! Знающие люди, помогите. У меня есть внеш обработка и в ней необходимо добавить колонку "Марка раствора / бетонной смеси", в которой необходимо чтобы выводилось условие: например
если номенклатура "цемент " | количество факт 0,77 | марка (0,77*4)=0,308- то марка 150 (если колфакт <=420 тогда 150-ый), только по цементу

Вот картинка (что должно получиться)

----------------------------------------------------------------------------------------------------------------
1с Предприятие 8.2.19.83.
Бухгалтерия предприятия 2.0.58.6

Код модуля формы


Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.УстановитьПериод(ДатаНач, ?(ДатаКон='0001-01-01', ДатаКон, КонецДня(ДатаКон)));
НастройкаПериода.РедактироватьКакИнтервал = Истина;
НастройкаПериода.РедактироватьКакПериод = Истина;
НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
Если НастройкаПериода.Редактировать() Тогда
ДатаНач = НастройкаПериода.ПолучитьДатуНачала();
ДатаКон = НастройкаПериода.ПолучитьДатуОкончания();
КонецЕсли;
КонецПроцедуры

Процедура ДействияФормыСформировать(Кнопка)

Отказ = Ложь;

Если Не ЗначениеЗаполнено(ДатаНач) Или Не ЗначениеЗаполнено(ДатаКон) Тогда
Сообщить("Не указан период!");
Отказ = Истина;
ИначеЕсли ДатаНач > ДатаКон Тогда
Сообщить("Период указан неверно!");
Отказ = Истина;
КонецЕсли;

Если Отказ Тогда
Возврат;
КонецЕсли;

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



Если СпособВывода = 1 Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВложенныйЗапрос.Дата", "&ДатаКон");
ИначеЕсли СпособВывода = 2 Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВложенныйЗапрос.Дата", "НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Дата, ДЕНЬ)");
КонецЕсли;

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

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

Макет = ПолучитьМакет("Макет");
ТабДок = ЭлементыФормы.ТабДок;
ТабДок.Очистить();

Область = Макет.ПолучитьОбласть("Заголовок");
Область.Параметры.ДатаНач = Формат(ДатаНач, "ДФ=dd.MM.yyyy; ДЛФ=D");
Область.Параметры.ДатаКон = Формат(ДатаКон, "ДФ=dd.MM.yyyy; ДЛФ=D");
ТабДок.Вывести(Область);

Если СпособВывода <> 1 Тогда
ТабДок.Вывести(Макет.ПолучитьОбласть("ШапкаТаблицыПериод"));
Иначе
ТабДок.Вывести(Макет.ПолучитьОбласть("ШапкаТаблицы"));
КонецЕсли;

Пока ВыборкаПоДатам.Следующий() Цикл

Выборка = ВыборкаПоДатам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "НоменклатурнаяГруппа");
Пока Выборка.Следующий() Цикл
Если СпособВывода <> 1 Тогда
Область = Макет.ПолучитьОбласть("СтрокаТаблицыПериод");
Иначе
Область = Макет.ПолучитьОбласть("СтрокаТаблицы");
КонецЕсли;
Область.Параметры.Заполнить(Выборка);
Если СпособВывода = 2 Тогда
Область.Параметры.Дата = Формат(Выборка.Дата, "ДФ=dd.MM.yyyy; ДЛФ=D");
КонецЕсли;

ТабДок.Вывести(Область);
КонецЦикла;

КонецЦикла;

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

Если СпособВывода <> 1 Тогда
Область = Макет.ПолучитьОбласть("ПодвалТаблицыПериод");
Иначе
Область = Макет.ПолучитьОбласть("ПодвалТаблицы");
КонецЕсли;
Область.Параметры.Заполнить(ВыборкаПоНоменклатурнымГруппам);
ТабДок.Вывести(Область);

КонецЦикла;

ТабДок.ФиксацияСверху = 4;
ТабДок.ТолькоПросмотр = Истина;

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

Процедура ПриОткрытии()
СпособВывода = 1;
КонецПроцедуры

Alex56

Не очень понятно. Вам нужно вывести марку цемента в отдельной таблице?
1. В справочнике номенклатура писать марку
2. Менять запрос
Нужно постоянно трудиться.

ya.dmitri

Мне надо в  колонке "марка" выводить марку цемента. Только в колонке "марка" я должен взять результаты из колонки "расход факт" и через процедуру , которая будет обрабатывать условия и это условие вернется в колонку "марка" с названием. Только условие такое, если расходфакт <= 215 тогда марка 75, если <=320 тогда марка 125 и тд

Теги:

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

Рейтинг@Mail.ru

Поиск