Вопрос программерам по ТиС
07.03.2006
10:56
#1
"//*******************************************
Процедура Выполнить()
Если Каркасы = 1 Тогда
Отчет = "Материальный отчет по учету каркасов, "
Иначе
Отчет = "Отчет по готовой продукции, "
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Если Каркасы = 1 Тогда
Продукция = Перечисление.ВидыМПЗ.Полуфабрикаты;
Иначе
Продукция = Перечисление.ВидыМПЗ.Продукция;
КонецЕсли;
Если ТолькоШт = 1 Тогда
Таб.ИсходнаяТаблица("Таблица1");
Иначе
Таб.ИсходнаяТаблица("Таблица");
КонецЕсли;
Спр=СоздатьОбъект("Справочник.Номенклатура");
Запрос1 = СоздатьОбъект("Запрос");
Текст1 =
"//{{Запрос(Сформировать)
|Период с ДатаН По ДатаК;
|
|Склад = Регистр.МестаХранения.МестоХранения;
|ВидМПЗ = Регистр.МестаХранения.ВидМПЗ;
|МПЗ = Регистр.МестаХранения.МПЗ;
|Количество = Регистр.МестаХранения.Количество;
|КоличествоШт = Регистр.МестаХранения.КоличествоШт;
|
|Условие (ВидМПЗ = Продукция);
|Условие (Склад в МестоХранения);
|Условие (МПЗ в Прод);
|
|Группировка МПЗ;
|Группировка Количество;
|Группировка КоличествоШт;
|
|Функция НачОстКол = НачОст(Количество);
|Функция ПриходКол = Приход(Количество);
|Функция РасходКол = Расход(Количество);
|Функция КонОстКол = КонОст(Количество);
|Функция НачОстКолШт = НачОст(КоличествоШт);
|Функция ПриходКолШт = Приход(КоличествоШт);
|Функция РасходКолШт = Расход(КоличествоШт);
|Функция КонОстКолШт = КонОст(КоличествоШт);
|
|"; //}}Запрос1
Если (Брак = 0) и (Годная = 1) Тогда
Текст1 = Текст1 + "Условие (СокрЛП(МПЗ.Родитель.Родитель.Код) <> """"1292"""");";
ИначеЕсли (Брак = 1) и (Годная = 0) Тогда
Текст1 = Текст1 + "Условие (СокрЛП(МПЗ.Родитель.Родитель.Код) = """"1292"""");";
КонецЕсли;
Если Запрос1.Выполнить(Текст1)=0 Тогда
Возврат;
КонецЕсли;
Таб1 = СоздатьОбъект("ТаблицаЗначений");
Запрос1.Выгрузить(Таб1,0,0);
Таб1.Свернуть("МПЗ","НачОстКол,ПриходКол,РасходКол,КонОстКол,НачОстКолШт,ПриходКолШт,РасходКолШт,КонОстКолШт");
Таб2 = СоздатьОбъект("ТаблицаЗначений");
Таб2.НоваяКолонка("Группа","Справочник");
Таб2.НоваяКолонка("МПЗ","Справочник");
Таб2.НоваяКолонка("НачОстКол","Число",15,3);
Таб2.НоваяКолонка("ПриходКол","Число",15,3);
Таб2.НоваяКолонка("РасходКол","Число",15,3);
Таб2.НоваяКолонка("КонОстКол","Число",15,3);
Таб2.НоваяКолонка("НачОстКолШт","Число",15);
Таб2.НоваяКолонка("ПриходКолШт","Число",15);
Таб2.НоваяКолонка("РасходКолШт","Число",15);
Таб2.НоваяКолонка("КонОстКолШт","Число",15);
Таб1.ВыбратьСтроки();
Пока Таб1.ПолучитьСтроку()=1 Цикл
Таб2.НоваяСтрока();
МПЗ = Таб1.МПЗ;
Таб2.МПЗ = МПЗ;
Таб2.Группа = МПЗ.Родитель;
Таб2.НачОстКолШт = Таб1.НачОстКолШт;
Таб2.ПриходКолШт = Таб1.ПриходКолШт;
Таб2.РасходКолШт = Таб1.РасходКолШт;
Таб2.КонОстКолШт = Таб1.КонОстКолШт;
Если МестоХранения.Код = "00053" Тогда
Таб2.НачОстКол = Таб1.НачОстКолШт * МПЗ.Объем2;
Таб2.ПриходКол = Таб1.ПриходКолШт * МПЗ.Объем2;
Таб2.РасходКол = Таб1.РасходКолШт * МПЗ.Объем2;
Таб2.КонОстКол = Таб1.КонОстКолШт * МПЗ.Объем2;
Иначе
Таб2.НачОстКол = Таб1.НачОстКол;
Таб2.ПриходКол = Таб1.ПриходКол;
Таб2.РасходКол = Таб1.РасходКол;
Таб2.КонОстКол = Таб1.КонОстКол;
КонецЕсли;
КонецЦикла;
Таб2.Сортировать("Группа,МПЗ");
Таб3 = СоздатьОбъект("ТаблицаЗначений");
Таб3.Загрузить(Таб2);
Таб3.Свернуть("Группа","НачОстКол,ПриходКол,РасходКол,КонОстКол,НачОстКолШт,ПриходКолШт,РасходКолШт,КонОстКолШт");
Таб.ВывестиСекцию("Шапка");
Таб.ПовторятьПриПечатиСтроки(4, Таб.ВысотаСекции("Шапка"));
Гр = """";
Таб2.ВыбратьСтроки();
Пока Таб2.ПолучитьСтроку() = 1 Цикл
Группа = Таб2.Группа;
Если Гр <> Группа Тогда
Таб3.ВыбратьСтроки();
Пока Таб3.ПолучитьСтроку()=1 Цикл
Если Группа = Таб3.Группа Тогда
ГруппаНачОстКол = Таб3.НачОстКол;
ГруппаПриходКол = Таб3.ПриходКол;
ГруппаРасходКол = Таб3.РасходКол;
ГруппаКонОстКол = Таб3.КонОстКол;
ГруппаНачОстКолШт = Таб3.НачОстКолШт;
ГруппаПриходКолШт = Таб3.ПриходКолШт;
ГруппаРасходКолШт = Таб3.РасходКолШт;
ГруппаКонОстКолШт = Таб3.КонОстКолШт;
Таб.ВывестиСекцию("Группа");
КонецЕсли;
КонецЦикла;
КонецЕсли;
МПЗ = Таб2.МПЗ;
Спр.НайтиПоНаименованию(МПЗ.Наименование,0);
Если МестоХранения.Код = "00053" Тогда
Коэфф = Спр.Объем2;
Иначе
ЕдИзм = Спр.ОсновнаяЕдиницаИзмерения;
Коэфф = ЕдИзм.Коэффициент;
КонецЕсли;
НачОстКол = Таб2.НачОстКол;
ПриходКол = Таб2.ПриходКол;
РасходКол = Таб2.РасходКол;
КонОстКол = Таб2.КонОстКол;
НачОстКолШт = Таб2.НачОстКолШт;
ПриходКолШт = Таб2.ПриходКолШт;
РасходКолШт = Таб2.РасходКолШт;
КонОстКолШт = Таб2.КонОстКолШт;
Таб.ВывестиСекцию("Строка");
Гр = Группа;
КонецЦикла;
ИтогоНачОстКол = Таб2.Итог(3);
ИтогоПриходКол = Таб2.Итог(4);
ИтогоРасходКол = Таб2.Итог(5);
ИтогоКонОстКол = Таб2.Итог(6);
ИтогоНачОстКолШт = Таб2.Итог(7);
ИтогоПриходКолШт = Таб2.Итог(8);
ИтогоРасходКолШт = Таб2.Итог(9);
ИтогоКонОстКолШт = Таб2.Итог(10);
Таб.ВывестиСекцию("Итого");
Таб.Показать(,,);
КонецПроцедуры
Процедура ПриОткрытии()
ДатаН = НачМесяца(ТекущаяДата());
ДатаК = КонМесяца(ТекущаяДата());
Годная = 1;
Брак = 1;
КонецПроцедуры
Прошу прощение за столь объемный код, но вопрос жизни и смерти!!! Помогите советом, сам догадываюсь что не хвататает 3-4 правильных строчек, для решения моей задачи
Этот отчет выводит спосок номенклатуры с группами. Нужно чтобы при выведении этого спсиска не включалась группа с названием "Фигурное мощение" ее код 21245 и входящие в эту группу элементы и естественно итоги правильно считались. Очень жду вашей помощи, господа профи.
"
Процедура Выполнить()
Если Каркасы = 1 Тогда
Отчет = "Материальный отчет по учету каркасов, "
Иначе
Отчет = "Отчет по готовой продукции, "
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Если Каркасы = 1 Тогда
Продукция = Перечисление.ВидыМПЗ.Полуфабрикаты;
Иначе
Продукция = Перечисление.ВидыМПЗ.Продукция;
КонецЕсли;
Если ТолькоШт = 1 Тогда
Таб.ИсходнаяТаблица("Таблица1");
Иначе
Таб.ИсходнаяТаблица("Таблица");
КонецЕсли;
Спр=СоздатьОбъект("Справочник.Номенклатура");
Запрос1 = СоздатьОбъект("Запрос");
Текст1 =
"//{{Запрос(Сформировать)
|Период с ДатаН По ДатаК;
|
|Склад = Регистр.МестаХранения.МестоХранения;
|ВидМПЗ = Регистр.МестаХранения.ВидМПЗ;
|МПЗ = Регистр.МестаХранения.МПЗ;
|Количество = Регистр.МестаХранения.Количество;
|КоличествоШт = Регистр.МестаХранения.КоличествоШт;
|
|Условие (ВидМПЗ = Продукция);
|Условие (Склад в МестоХранения);
|Условие (МПЗ в Прод);
|
|Группировка МПЗ;
|Группировка Количество;
|Группировка КоличествоШт;
|
|Функция НачОстКол = НачОст(Количество);
|Функция ПриходКол = Приход(Количество);
|Функция РасходКол = Расход(Количество);
|Функция КонОстКол = КонОст(Количество);
|Функция НачОстКолШт = НачОст(КоличествоШт);
|Функция ПриходКолШт = Приход(КоличествоШт);
|Функция РасходКолШт = Расход(КоличествоШт);
|Функция КонОстКолШт = КонОст(КоличествоШт);
|
|"; //}}Запрос1
Если (Брак = 0) и (Годная = 1) Тогда
Текст1 = Текст1 + "Условие (СокрЛП(МПЗ.Родитель.Родитель.Код) <> """"1292"""");";
ИначеЕсли (Брак = 1) и (Годная = 0) Тогда
Текст1 = Текст1 + "Условие (СокрЛП(МПЗ.Родитель.Родитель.Код) = """"1292"""");";
КонецЕсли;
Если Запрос1.Выполнить(Текст1)=0 Тогда
Возврат;
КонецЕсли;
Таб1 = СоздатьОбъект("ТаблицаЗначений");
Запрос1.Выгрузить(Таб1,0,0);
Таб1.Свернуть("МПЗ","НачОстКол,ПриходКол,РасходКол,КонОстКол,НачОстКолШт,ПриходКолШт,РасходКолШт,КонОстКолШт");
Таб2 = СоздатьОбъект("ТаблицаЗначений");
Таб2.НоваяКолонка("Группа","Справочник");
Таб2.НоваяКолонка("МПЗ","Справочник");
Таб2.НоваяКолонка("НачОстКол","Число",15,3);
Таб2.НоваяКолонка("ПриходКол","Число",15,3);
Таб2.НоваяКолонка("РасходКол","Число",15,3);
Таб2.НоваяКолонка("КонОстКол","Число",15,3);
Таб2.НоваяКолонка("НачОстКолШт","Число",15);
Таб2.НоваяКолонка("ПриходКолШт","Число",15);
Таб2.НоваяКолонка("РасходКолШт","Число",15);
Таб2.НоваяКолонка("КонОстКолШт","Число",15);
Таб1.ВыбратьСтроки();
Пока Таб1.ПолучитьСтроку()=1 Цикл
Таб2.НоваяСтрока();
МПЗ = Таб1.МПЗ;
Таб2.МПЗ = МПЗ;
Таб2.Группа = МПЗ.Родитель;
Таб2.НачОстКолШт = Таб1.НачОстКолШт;
Таб2.ПриходКолШт = Таб1.ПриходКолШт;
Таб2.РасходКолШт = Таб1.РасходКолШт;
Таб2.КонОстКолШт = Таб1.КонОстКолШт;
Если МестоХранения.Код = "00053" Тогда
Таб2.НачОстКол = Таб1.НачОстКолШт * МПЗ.Объем2;
Таб2.ПриходКол = Таб1.ПриходКолШт * МПЗ.Объем2;
Таб2.РасходКол = Таб1.РасходКолШт * МПЗ.Объем2;
Таб2.КонОстКол = Таб1.КонОстКолШт * МПЗ.Объем2;
Иначе
Таб2.НачОстКол = Таб1.НачОстКол;
Таб2.ПриходКол = Таб1.ПриходКол;
Таб2.РасходКол = Таб1.РасходКол;
Таб2.КонОстКол = Таб1.КонОстКол;
КонецЕсли;
КонецЦикла;
Таб2.Сортировать("Группа,МПЗ");
Таб3 = СоздатьОбъект("ТаблицаЗначений");
Таб3.Загрузить(Таб2);
Таб3.Свернуть("Группа","НачОстКол,ПриходКол,РасходКол,КонОстКол,НачОстКолШт,ПриходКолШт,РасходКолШт,КонОстКолШт");
Таб.ВывестиСекцию("Шапка");
Таб.ПовторятьПриПечатиСтроки(4, Таб.ВысотаСекции("Шапка"));
Гр = """";
Таб2.ВыбратьСтроки();
Пока Таб2.ПолучитьСтроку() = 1 Цикл
Группа = Таб2.Группа;
Если Гр <> Группа Тогда
Таб3.ВыбратьСтроки();
Пока Таб3.ПолучитьСтроку()=1 Цикл
Если Группа = Таб3.Группа Тогда
ГруппаНачОстКол = Таб3.НачОстКол;
ГруппаПриходКол = Таб3.ПриходКол;
ГруппаРасходКол = Таб3.РасходКол;
ГруппаКонОстКол = Таб3.КонОстКол;
ГруппаНачОстКолШт = Таб3.НачОстКолШт;
ГруппаПриходКолШт = Таб3.ПриходКолШт;
ГруппаРасходКолШт = Таб3.РасходКолШт;
ГруппаКонОстКолШт = Таб3.КонОстКолШт;
Таб.ВывестиСекцию("Группа");
КонецЕсли;
КонецЦикла;
КонецЕсли;
МПЗ = Таб2.МПЗ;
Спр.НайтиПоНаименованию(МПЗ.Наименование,0);
Если МестоХранения.Код = "00053" Тогда
Коэфф = Спр.Объем2;
Иначе
ЕдИзм = Спр.ОсновнаяЕдиницаИзмерения;
Коэфф = ЕдИзм.Коэффициент;
КонецЕсли;
НачОстКол = Таб2.НачОстКол;
ПриходКол = Таб2.ПриходКол;
РасходКол = Таб2.РасходКол;
КонОстКол = Таб2.КонОстКол;
НачОстКолШт = Таб2.НачОстКолШт;
ПриходКолШт = Таб2.ПриходКолШт;
РасходКолШт = Таб2.РасходКолШт;
КонОстКолШт = Таб2.КонОстКолШт;
Таб.ВывестиСекцию("Строка");
Гр = Группа;
КонецЦикла;
ИтогоНачОстКол = Таб2.Итог(3);
ИтогоПриходКол = Таб2.Итог(4);
ИтогоРасходКол = Таб2.Итог(5);
ИтогоКонОстКол = Таб2.Итог(6);
ИтогоНачОстКолШт = Таб2.Итог(7);
ИтогоПриходКолШт = Таб2.Итог(8);
ИтогоРасходКолШт = Таб2.Итог(9);
ИтогоКонОстКолШт = Таб2.Итог(10);
Таб.ВывестиСекцию("Итого");
Таб.Показать(,,);
КонецПроцедуры
Процедура ПриОткрытии()
ДатаН = НачМесяца(ТекущаяДата());
ДатаК = КонМесяца(ТекущаяДата());
Годная = 1;
Брак = 1;
КонецПроцедуры
Прошу прощение за столь объемный код, но вопрос жизни и смерти!!! Помогите советом, сам догадываюсь что не хвататает 3-4 правильных строчек, для решения моей задачи
Этот отчет выводит спосок номенклатуры с группами. Нужно чтобы при выведении этого спсиска не включалась группа с названием "Фигурное мощение" ее код 21245 и входящие в эту группу элементы и естественно итоги правильно считались. Очень жду вашей помощи, господа профи.
"
07.03.2006
11:38
#2
"Может быть так:
// После строчки
Спр=СоздатьОбъект("Справочник.Номенклатура");
// добавить
Если Спр.НайтиПоКоду(21245)<>0 Тогда
ИсклГруппа = Спр.ТекущийЭлемент();
КонецЕсли;
Потом в текст запроса вставляем
&&........
|Условие (ВидМПЗ = Продукция);
|Условие (Склад в МестоХранения);
|Условие (МПЗ в Прод);
|Условие (НЕ (МПЗ в ИсклГруппа))
|
Жирненьким помечено что вставили...
Тогда в запрос не будут попадать элементы принадлежащие группе ИсклГруппа
если я правильно понял текст модуля...
Попробуй...
"
// После строчки
Спр=СоздатьОбъект("Справочник.Номенклатура");
// добавить
Если Спр.НайтиПоКоду(21245)<>0 Тогда
ИсклГруппа = Спр.ТекущийЭлемент();
КонецЕсли;
Потом в текст запроса вставляем
&&........
|Условие (ВидМПЗ = Продукция);
|Условие (Склад в МестоХранения);
|Условие (МПЗ в Прод);
|Условие (НЕ (МПЗ в ИсклГруппа))
|
Жирненьким помечено что вставили...
Тогда в запрос не будут попадать элементы принадлежащие группе ИсклГруппа
если я правильно понял текст модуля...
Попробуй...
"
Читают тему
(гостей: 1)