Автор: inna.innainna84 25.08.16, 8:50
Прошу помощи с отчетом. Сортирует данные в общем , не выбирает движение товара по выбранной фирме.
Код//astonvilla@rambler.ru
//Костецкий В.А. aka astonvilla
//
// ===============================
// ОПИСАНИЕ МОДУЛЬНЫХ ПЕРЕМЕННЫХ
// ===============================
// используются для стандартного механизма кнопок "Обновить" и "Настройка"
Перем Таб;
// переменные предназначены для запроса по периодам
Перем Запрос;
Перем Язык, УкрГруппировки;
Перем ОтчетСформирован;
Перем ПечОстаток,ПечСтоимость,ИтПечСтоимость;
Перем Ит, ТекЗакладка;
Перем СписокПодбора,СправочникПодбора;
Перем СписокТоваров; // список товаров, удовлетворяющих фильтру по ТМЦ
Перем ЕстьГруппыТМЦ, СпСчетов;
// ===============================
// ПРОЦЕДУРЫ И ФУНКЦИИ, ВЫЗЫВАЕМЫЕ ИЗ ФОРМУЛ ЭЛЕМЕНТОВ ДИАЛОГА
// ===============================
Функция МножественныйФильтрЗадан(СпЗнач_)
Если СпЗнач_.РазмерСписка()>0 Тогда
Возврат 1;
КонецЕсли;
Возврат 0;
КонецФункции // МножественныйФильтрЗадан
Процедура РаботаСоСписком(Режим,Список,ТипСправочника)
Перем ТекПоз;
Перем ТекЭлемент;
Перем Фрм;
ТекПоз = Список.ТекущаяСтрока();
Если ТекПоз>0 Тогда
ТекЭлемент=Список.ПолучитьЗначение(ТекПоз);
КонецЕсли;
Если Режим="Добавить" Тогда // добавляем в список один элемент
СписокПодбора = Список;
СправочникПодбора = ВРег(ТипСправочника);
// открываем окно подбора
ОткрытьПодбор("Справочник."+ТипСправочника,,Фрм,0,ТекЭлемент);
Фрм.ВыборГруппы(1);
ИначеЕсли Режим="ДобавитьНесколько" Тогда // добавляем в список несколько элементов
СписокПодбора = Список;
СправочникПодбора = ВРег(ТипСправочника);
// открываем окно подбора
ОткрытьПодбор("Справочник."+ТипСправочника,,Фрм,1,ТекЭлемент);
Фрм.ВыборГруппы(1);
ИначеЕсли Режим="УдалитьВсе" Тогда // удаляем все элементы из списка
Список.УдалитьВсе();
Если ВРег(ТипСправочника) = "НОМЕКЛАТУРА" Тогда
ЕстьГруппыТМЦ = 0;
КонецЕсли;
ИначеЕсли Режим="Удалить" Тогда // удаляем из списка один элемент
Если ТекПоз>0 Тогда
Если ВРег(ТипСправочника) = "НОМЕКЛАТУРА" Тогда
ЕстьГруппыТМЦ = ЕстьГруппыТМЦ-ТекЭлемент.ЭтоГруппа();
КонецЕсли;
Список.УдалитьЗначение(ТекПоз);
КонецЕсли;
КонецЕсли;
КонецПроцедуры // работа со списком
//******************************************************************************
Процедура ОбработкаПодбора(Значение) // Предопределенная процедура
Если ПустоеЗначение(СправочникПодбора)=1 Тогда
Возврат;
КонецЕсли;
Если (Найти(СправочникПодбора,",")>0)И(Найти(СправочникПодбора,ВРег(Значение.Вид()))>0)ИЛИ
(ВРег(Значение.Вид())=СправочникПодбора) Тогда
Если (СписокПодбора.НайтиЗначение(Значение)=0) Тогда
Если ВРег(СправочникПодбора) = "НОМЕКЛАТУРА" Тогда
ЕстьГруппыТМЦ = ЕстьГруппыТМЦ+Значение.ЭтоГруппа();
КонецЕсли;
СписокПодбора.ДобавитьЗначение(Значение);
СписокПодбора.ТекущаяСтрока(СписокПодбора.РазмерСписка());
КонецЕсли;
КонецЕсли;
КонецПроцедуры // ОбработкаПодбора
//******************************************************************************
// Процедура изменяет состояние отметок вывода таблицы группировок отчета
Процедура глПометкаТаблицыГруппировок(Группировки,Флаг)
Для индГруп = 1 По Группировки.РазмерСписка() Цикл
Если Флаг = -1 Тогда
Группировки.Пометка(индГруп, 1 - Группировки.Пометка(индГруп));
Иначе
Группировки.Пометка(индГруп, Флаг);
КонецЕсли;
КонецЦикла;
КонецПроцедуры // глПометкаТаблицыГруппировок()
//******************************************************************************
Процедура глОживить(ДобСтрок) Экспорт
глЧислоСтрок = глЧислоСтрок + ДобСтрок;
Состояние("В отчет выведено "+глЧислоСтрок+" строк.");
КонецПроцедуры
// ===============================
Процедура ОстаткиТоваров()
Загол="";
ПечФорма = "Таблица";
глУстПропись(Гривня);
Таб.ИсходнаяТаблица(ПечФорма);
//============================================================
///Итоги по счету учета товара
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Если МножественныйФильтрЗадан(СписокТоваров) = 0 Тогда
Ит.ИспользоватьСубконто(ВидыСубконто.ТМЦ,, 1,1);
Загол=""+"По всем ТМЦ";
Иначе
Если ЕстьГруппыТМЦ > 1 Тогда
Ит.ИспользоватьСубконто(ВидыСубконто.ТМЦ,СписокТоваров, 1);
Иначе
Ит.ИспользоватьСубконто(ВидыСубконто.ТМЦ,СписокТоваров, 2);
КонецЕсли;
Загол=""+"Включен фильтр по ТМЦ";
КонецЕсли;
Если ПустоеЗначение(ВыбМестоХранения) = 1 Тогда
Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,, 1);
Загол=Загол+", по всем складам";
Иначе
Если ВыбМестоХранения.ЭтоГруппа() = 1 Тогда
Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,ВыбМестоХранения, 1);
Иначе
Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,ВыбМестоХранения, 2);
КонецЕсли;
Загол=Загол+", по складу - "+ВыбМестоХранения;
КонецЕсли;
Ит.ВыполнитьЗапрос(Дата2, Дата2,СпСчетов,,, 1,, "К");
//============================================================
// выводим шапку отчета
Таб.ВывестиСекцию("Отчет");
глОживить(Таб.ВысотаСекции("Отчет"));
Таб.ВывестиСекцию("Шапка|ТоварРезерв");
Если ПустоеЗначение(ВыбМестоХранения) = 1 Тогда
Таб.ПрисоединитьСекцию("Шапка|ВсеСклады");
КонецЕсли;
//------------------------------------------------
///Определим, на каких складах есть остаток
ТаблСкладов = СоздатьОбъект("ТаблицаЗначений");
ТаблСкладов.НоваяКолонка("Склад");
Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения);
Пока Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения) = 1 Цикл ///
Если ПустоеЗначение(Ит.Субконто(2)) = 1 Тогда
Продолжить;
КонецЕсли;
//// отбираем неправильные значения
//Если нулДА = 0 Тогда
// Если Ит.СКД(3)<=0 Тогда
// Продолжить;
// КонецЕсли;
//КонецЕсли;
Если ТаблСкладов.НайтиЗначение(Ит.Субконто(2),,"Склад") = 0 Тогда
ТаблСкладов.НоваяСтрока();
ТаблСкладов.Склад = Ит.Субконто(2);
КонецЕсли;
КонецЦикла;
//------------------------------------------------
ТаблСкладов.ВыбратьСтроки();
Пока ТаблСкладов.ПолучитьСтроку() = 1 Цикл
Таб.ПрисоединитьСекцию("Шапка|Склад");
КонецЦикла;
Ном = 0;
//------------------------------------------------
////Формируем сам отчет
Ит.ВыбратьСубконто(ВидыСубконто.ТМЦ);
Пока Ит.ПолучитьСубконто(ВидыСубконто.ТМЦ) = 1 Цикл ///Выбираем наши товары
Ном = Ном+1;
Если Ит.Субконто(1).ЭтоГруппа()=1 Тогда
ПечТовар = Ит.Субконто(1);
ПечОстаток = Ит.СКД(3);
Таб.ВывестиСекцию("Группа|ТоварРезерв");
Если ПустоеЗначение(ВыбМестоХранения) = 1 Тогда
Таб.ПрисоединитьСекцию("Группа|ВсеСклады");
КонецЕсли;
Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения);
ТаблСкладов.ВыбратьСтроки();
Пока ТаблСкладов.ПолучитьСтроку() = 1 Цикл
Если Ит.ПолучитьСубконто(2,,ТаблСкладов.Склад) = 1 Тогда
ПечОстаток = Ит.СКД(3);
Иначе
ПечОстаток = 0;
КонецЕсли;
Таб.ПрисоединитьСекцию("Группа|Склад");
КонецЦикла;
Продолжить;
КонецЕсли;
////// отбираем неправильные значения
//Если нулДА = 0 Тогда
// Если Ит.СКД(3)<=0 Тогда
// Продолжить;
// КонецЕсли;
//КонецЕсли;
//// выводим группу ТМЦ
ПечТовар = СокрЛП(Ит.Субконто(1).ПолнНаименование);
ПечОстаток = Ит.СКД(3);
Таб.ВывестиСекцию("Товар|ТоварРезерв");
Если ПустоеЗначение(ВыбМестоХранения) = 1 Тогда
Таб.ПрисоединитьСекцию("Товар|ВсеСклады");
КонецЕсли;
Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения);
ТаблСкладов.ВыбратьСтроки();
Пока ТаблСкладов.ПолучитьСтроку() = 1 Цикл
Если Ит.ПолучитьСубконто(2,,ТаблСкладов.Склад) = 1 Тогда
ПечОстаток = Ит.СКД(3);
Иначе
ПечОстаток = 0;
КонецЕсли;
Таб.ПрисоединитьСекцию("Товар|Склад");
КонецЦикла;
Состояние("Обработка строки отчета - "+Ном);
КонецЦикла;
//-------------------------------------------------------------------
// Итоговые суммы
//-------------------------------------------------------------------
Если ПустоеЗначение(ВыбМестоХранения) = 1 Тогда
Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,, 1);
Иначе
Если ВыбМестоХранения.ЭтоГруппа() = 1 Тогда
Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,ВыбМестоХранения, 1);
Иначе
Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,ВыбМестоХранения, 2);
КонецЕсли;
КонецЕсли;
Если МножественныйФильтрЗадан(СписокТоваров) = 0 Тогда
Ит.ИспользоватьСубконто(ВидыСубконто.ТМЦ,, 1,1);
Иначе
Если ЕстьГруппыТМЦ > 1 Тогда
Ит.ИспользоватьСубконто(ВидыСубконто.ТМЦ,СписокТоваров, 1);
Иначе
Ит.ИспользоватьСубконто(ВидыСубконто.ТМЦ,СписокТоваров, 2);
КонецЕсли;
КонецЕсли;
//------------------------------------------------------
Ит.ВыполнитьЗапрос(Дата2, Дата2,СпСчетов,,, 1,, "К");
Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения);
Таб.ВывестиСекцию("Итого|ТоварРезерв");
//=======================
ТаблСкладов.ВыбратьСтроки();
Пока ТаблСкладов.ПолучитьСтроку() = 1 Цикл
Если Ит.ПолучитьСубконто(1,,ТаблСкладов.Склад) = 1 Тогда
ПечОстаток = ПечОстаток+Ит.СКД(3);
КонецЕсли;
КонецЦикла;
Таб.ПрисоединитьСекцию("Итого|ВсеСклады");
Если ПустоеЗначение(ВыбМестоХранения) = 1 Тогда
//=======================
ТаблСкладов.ВыбратьСтроки();
Пока ТаблСкладов.ПолучитьСтроку() = 1 Цикл
Если Ит.ПолучитьСубконто(1,,ТаблСкладов.Склад) = 1 Тогда
ПечОстаток = Ит.СКД(3);
Иначе
ПечОстаток = 0;
КонецЕсли;
Таб.ПрисоединитьСекцию("Итого|Склад");
КонецЦикла;
КонецЕсли;
//------------------------------------------------------
// Вывод заполненной формы
Таб.Защита(Константа.ФлагЗащитыТаблиц);
Таб.ТолькоПросмотр(1);
Таб.Показать("ПЕЧАТЬ: Остатки ТМЦ на складах (На "+Дата2+?(ТипЗначения(ВыбФирма)=0, "", ", "+ВыбФирма)+")","");
ОтчетСформирован = 1;
КонецПроцедуры // ОстаткиТоваров
// ===============================
Процедура ВывестиДокументыДвиженияТоваров(Запрос,Таб)
ПечКонКол=Запрос.СНД(3);
Запрос.ВыбратьПериоды();
Пока Запрос.ПолучитьПериод() = 1 Цикл
Док=Запрос.Операция.Документ;
Если ПустоеЗначение(Док) = 1 Тогда
Продолжить;
КонецЕсли;
Наим = Док;
ПечПрихКол = Запрос.ДО(3);
ПечРасхКол = Запрос.КО(3);
ПечКонКол = ПечКонКол + ПечПрихКол - ПечРасхКол;
Таб.ВывестиСекцию("Док");
КонецЦикла;
КонецПроцедуры // ВывестиДокументыДвиженияТоваров
// ===============================
Процедура ДвиженияТоваров()
//
ПечФорма = "ДвиженияТоваров";
глУстПропись(Гривня);
Таб.ИсходнаяТаблица(ПечФорма);
//============================================================
///Итоги по счету учета товара
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Если МножественныйФильтрЗадан(СписокТоваров) = 0 Тогда
Ит.ИспользоватьСубконто(ВидыСубконто.ТМЦ,, 1,1);
Загол=""+"По всем ТМЦ";
Иначе
Если ЕстьГруппыТМЦ > 1 Тогда
Ит.ИспользоватьСубконто(ВидыСубконто.ТМЦ,СписокТоваров, 1);
Иначе
Ит.ИспользоватьСубконто(ВидыСубконто.ТМЦ,СписокТоваров, 2);
КонецЕсли;
Загол=""+"Включен фильтр по ТМЦ";
КонецЕсли;
Если ПустоеЗначение(ВыбМестоХранения) = 1 Тогда
Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,, 1);
Загол=Загол+", по всем складам";
Иначе
Если ВыбМестоХранения.ЭтоГруппа() = 1 Тогда
Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,ВыбМестоХранения, 1);
Иначе
Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,ВыбМестоХранения, 2);
КонецЕсли;
Загол=Загол+", по складу - "+ВыбМестоХранения;
КонецЕсли;
Если ДеталПоДокументам=1 Тогда
Ит.ВыполнитьЗапрос(Дата1, Дата2,СпСчетов,,, 1,"Операция", "К");
Иначе
Ит.ВыполнитьЗапрос(Дата1, Дата2,СпСчетов,,, 1,, "К");
КонецЕсли;
//==========================================================
ПечЗаголСтолбца = "Товар";
Если ДеталПоДокументам=1 Тогда // детализируем по складам
ПечЗаголСтолбца = ПечЗаголСтолбца + "/Документ движения";
КонецЕсли;
//// выводим шапку отчета
Таб.ВывестиСекцию("Отчет");
глОживить(Таб.ВысотаСекции("Отчет"));
Ном = 0;
//-------------------------------------------------------
Ит.ВыбратьСубконто(ВидыСубконто.ТМЦ);
Пока Ит.ПолучитьСубконто(ВидыСубконто.ТМЦ) = 1 Цикл ///Выбираем наши товары
Ном = Ном+1;
Состояние("Обработка строки отчета - "+Ном);
//// выводим группу ТМЦ
Если Ит.Субконто(1).ЭтоГруппа()=1 Тогда
Наим = СокрЛП(Ит.Субконто(1).Наименование);
Таб.ВывестиСекцию("Группа");
глОживить(1);
Продолжить;
Иначе
Наим = СокрЛП(Ит.Субконто(1).ПолнНаименование);
Код = СокрЛП(Ит.Субконто(1).КодСоответствия);
ПечНачКол = Ит.СНД(3);
ПечПрихКол = Ит.ДО(3);
ПечРасхКол = Ит.КО(3);
ПечКонКол = Ит.СКД(3);
Таб.ВывестиСекцию("Товар");
глОживить(1);
КонецЕсли;
Если ДеталПоСкладам=1 Тогда // детализируем по складам
Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения);
Пока Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения) = 1 Цикл ///
Если ПустоеЗначение(Ит.Субконто(2)) = 1 Тогда
Продолжить;
КонецЕсли;
Ном = Ном+1;
Состояние("Обработка строки отчета - "+Ном);
Наим = Ит.Субконто(2).Наименование;
ПечНачКол = Ит.СНД(3);
ПечПрихКол = Ит.ДО(3);
ПечРасхКол = Ит.КО(3);
ПечКонКол = Ит.СКД(3);
Если ПустоеЗначение(ВыбМестоХранения) = 1 Тогда
Таб.ВывестиСекцию("Склад");
глОживить(1);
КонецЕсли;
Если ДеталПоДокументам=1 Тогда
ВывестиДокументыДвиженияТоваров(Ит,Таб);
КонецЕсли;
КонецЦикла;
Иначе
Если ДеталПоДокументам=1 Тогда // не детализируем по складам
ВывестиДокументыДвиженияТоваров(Ит,Таб);
КонецЕсли;
КонецЕсли;
КонецЦикла;
//----------------------------------------------
// Вывод заполненной формы
Таб.Защита(Константа.ФлагЗащитыТаблиц);
Таб.ТолькоПросмотр(1);
Таб.Показать("ПЕЧАТЬ: Отчет о движении ТМЦ на складах ("+ПериодСтр(Дата1, Дата2)+?(ТипЗначения(ВыбФирма)=0, "", ", "+ВыбФирма)+")","");
ОтчетСформирован = 1;
КонецПроцедуры
// ===============================
Процедура ОстаткиТоваровСЦенами()
Загол="";
ПечФорма = "ОстаткиСЦенами";
глУстПропись(Гривня);
Таб.ИсходнаяТаблица(ПечФорма);
ИтПечСтоимость = 0;
//--------------------------------------------------
/////Итоги по счету учета товара
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Если МножественныйФильтрЗадан(СписокТоваров) = 0 Тогда
Ит.ИспользоватьСубконто(ВидыСубконто.ТМЦ,, 1,1);
Загол=""+"По всем ТМЦ";
Иначе
Если ЕстьГруппыТМЦ > 1 Тогда
Ит.ИспользоватьСубконто(ВидыСубконто.ТМЦ,СписокТоваров, 1);
Иначе
Ит.ИспользоватьСубконто(ВидыСубконто.ТМЦ,СписокТоваров, 2);
КонецЕсли;
Загол=""+"Включен фильтр по ТМЦ";
КонецЕсли;
Если ПустоеЗначение(ВыбМестоХранения) = 1 Тогда
Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,, 1);
Загол=Загол+", по всем складам";
Иначе
Если ВыбМестоХранения.ЭтоГруппа() = 1 Тогда
Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,ВыбМестоХранения, 1);
Иначе
Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,ВыбМестоХранения, 2);
КонецЕсли;
Загол=Загол+", по складу - "+ВыбМестоХранения;
КонецЕсли;
Ит.ВыполнитьЗапрос(Дата2, Дата2,СпСчетов,,, 1,, "СК");
//-------------------------------------------------
Категория = "";
Загол=Загол+", в учетной стоимости (грн.)";
// выводим шапку отчета
Таб.ВывестиСекцию("Отчет");
глОживить(Таб.ВысотаСекции("Отчет"));
Таб.ВывестиСекцию("Шапка|ТоварЦена");
Если ПустоеЗначение(ВыбМестоХранения) = 1 Тогда
Таб.ПрисоединитьСекцию("Шапка|ИтогСтолбец");
КонецЕсли;
ТаблСкладов = СоздатьОбъект("ТаблицаЗначений");
ТаблСкладов.Очистить();
ТаблСкладов.НоваяКолонка("Склад");
ТаблСкладов.НоваяКолонка("Себестоимость","Число",12,2);
ТаблСкладовИтого = СоздатьОбъект("ТаблицаЗначений");
ТаблСкладовИтого.Очистить();
ТаблСкладовИтого.НоваяКолонка("Склад");
ТаблСкладовИтого.НоваяКолонка("Себестоимость","Число",12,2);
//------------------------------------------------
///Определим, на каких складах есть остаток
Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения);
Пока Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения) = 1 Цикл ///
Если ПустоеЗначение(Ит.Субконто(2)) = 1 Тогда
Продолжить;
КонецЕсли;
////// отбираем неправильные значения
//Если нулДА = 0 Тогда
// Если Ит.СКД(3)<=0 Тогда
// Продолжить;
// КонецЕсли;
//КонецЕсли;
Если ТаблСкладов.НайтиЗначение(Ит.Субконто(2),,"Склад") = 0 Тогда
ТаблСкладов.НоваяСтрока();
ТаблСкладов.Склад = Ит.Субконто(2);
ТаблСкладовИтого.НоваяСтрока();
ТаблСкладовИтого.Склад = Ит.Субконто(2);
КонецЕсли;
КонецЦикла;
//------------------------------------------------
ТаблСкладов.ВыбратьСтроки();
Пока ТаблСкладов.ПолучитьСтроку() = 1 Цикл
Таб.ПрисоединитьСекцию("Шапка|СкладСтоимость");
КонецЦикла;
Ном = 0;
НомСтроки = 0;
//------------------------------------------------
////Формируем сам отчет
Ит.ВыбратьСубконто(ВидыСубконто.ТМЦ);
Пока Ит.ПолучитьСубконто(ВидыСубконто.ТМЦ) = 1 Цикл ///Выбираем наши товары
////// отбираем неправильные значения
//Если нулДА = 0 Тогда
// Если Ит.СКД(3)<=0 Тогда
// Продолжить;
// КонецЕсли;
//КонецЕсли;
Ном = Ном+1;
//-------------------------------------------------------
////// выводим группу ТМЦ
Если Ит.Субконто(1).ЭтоГруппа()=1 Тогда
Если Ит.Субконто(1).Уровень() > 1 Тогда
Продолжить;
КонецЕсли;
ПечТовар = Ит.Субконто(1);
ПечОстаток = Ит.СКД(3);
// --------------------------------------------------
// себест. (грн)
ПечСтоимость = Ит.СКД(1);
ПечЦена = ?(Ит.СКД(3) = 0,0,Окр(Ит.СКД(1)/Ит.СКД(3),2));
Таб.ВывестиСекцию("Группа|ТоварЦена");
Если ПустоеЗначение(ВыбМестоХранения) = 1 Тогда
Таб.ПрисоединитьСекцию("Группа|ИтогСтолбец");
КонецЕсли;
Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения);
ТаблСкладов.ВыбратьСтроки();
Пока ТаблСкладов.ПолучитьСтроку() = 1 Цикл
Если Ит.ПолучитьСубконто(2,,ТаблСкладов.Склад) = 1 Тогда
ПечОстаток = Ит.СКД(3);
// ---------------------------------------------
// себест. (грн)
ПечСтоимость = Ит.СКД(1);
ПечЦена = ?(Ит.СКД(3) = 0,0,Окр(Ит.СКД(1)/Ит.СКД(3),2));
Таб.ПрисоединитьСекцию("Группа|СкладСтоимость");
Иначе
ПечОстаток = 0;
ПечСтоимость = 0;
Таб.ПрисоединитьСекцию("Группа|СкладСтоимость");
КонецЕсли;
КонецЦикла;
Продолжить;
КонецЕсли;
//Конец обработки группы
//-------------------------------------------------------------
Если ПустоеЗначение(Ит.Субконто(1))=1 Тогда
Продолжить;
КонецЕсли;
//-------------------------------------------------------------
//Обработка обычного товара (не группы)
//-------------------------------------------------------------
ПечТовар = Ит.Субконто(1);
ПечОстаток = Ит.СКД(3);
ПечСтоимость = Ит.СКД(1);
ПечЦена = ?(Ит.СКД(3) = 0,0,Окр(Ит.СКД(1)/Ит.СКД(3),2));
Таб.ВывестиСекцию("Товар|ТоварЦена");
Если ПустоеЗначение(ВыбМестоХранения) = 1 Тогда
Таб.ПрисоединитьСекцию("Товар|ИтогСтолбец");
КонецЕсли;
Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения);
ТаблСкладов.ВыбратьСтроки();
Пока ТаблСкладов.ПолучитьСтроку() = 1 Цикл
Если Ит.ПолучитьСубконто(2,,ТаблСкладов.Склад) = 1 Тогда
ПечОстаток = Ит.СКД(3);
ПечСтоимость = Ит.СКД(1);
ПечЦена = ?(Ит.СКД(3) = 0,0,Окр(Ит.СКД(1)/Ит.СКД(3),2));
//=========================================
НомСтроки = 0;
Если ТаблСкладовИтого.НайтиЗначение(ТаблСкладов.Склад,НомСтроки,"Склад") = 1 Тогда
ТаблСкладовИтого.ТекущаяСтрока(НомСтроки);
ТаблСкладовИтого.Себестоимость = ТаблСкладовИтого.Себестоимость+ПечСтоимость;
КонецЕсли;
//=========================================
Таб.ПрисоединитьСекцию("Товар|СкладСтоимость");
Иначе
ПечОстаток = 0;
ПечСтоимость = 0;
Таб.ПрисоединитьСекцию("Товар|СкладСтоимость");
КонецЕсли;
КонецЦикла;
//---------------------------------------------------------------
//Конец обработки товара
//---------------------------------------------------------------
Состояние("Обработка строки отчета - "+Ном);
КонецЦикла;
//-------------------------------------------------------------------
// Итоговые суммы
//-------------------------------------------------------------------
Таб.ВывестиСекцию("Итого|ТоварЦена");
Если ПустоеЗначение(ВыбМестоХранения) = 1 Тогда
///======================
ПечОстаток = 0;
//=======================
ТаблСкладов.ВыбратьСтроки();
Пока ТаблСкладов.ПолучитьСтроку() = 1 Цикл
Если Ит.ПолучитьСубконто(2,,ТаблСкладов.Склад) = 1 Тогда
ПечОстаток = ПечОстаток+Ит.СКД(3);
//=========================================
НомСтроки = "";
Если ТаблСкладовИтого.НайтиЗначение(ТаблСкладов.Склад,НомСтроки,"Склад") = 1 Тогда
ТаблСкладовИтого.ТекущаяСтрока(НомСтроки);
ПечСтоимость = ТаблСкладовИтого.Себестоимость;
Иначе
ПечСтоимость = 0;
КонецЕсли;
Иначе
ПечОстаток = ПечОстаток+0;
ПечСтоимость = 0;
КонецЕсли;
КонецЦикла;
ПечСтоимость = ТаблСкладовИтого.Итог("Себестоимость");
Таб.ПрисоединитьСекцию("Итого|ИтогСтолбец");
КонецЕсли;
ТаблСкладов.ВыбратьСтроки();
Пока ТаблСкладов.ПолучитьСтроку() = 1 Цикл
Если Ит.ПолучитьСубконто(2,,ТаблСкладов.Склад) = 1 Тогда
ПечОстаток = Ит.СКД(3);
ПечСтоимость = Ит.СКД(1);
Таб.ПрисоединитьСекцию("Итого|СкладСтоимость");
Иначе
ПечОстаток = 0;
ПечСтоимость = 0;
Таб.ПрисоединитьСекцию("Итого|СкладСтоимость");
КонецЕсли;
КонецЦикла;
//-------------------------------------------------------------------
// Вывод заполненной формы
Таб.Защита(Константа.ФлагЗащитыТаблиц);
Таб.ТолькоПросмотр(1);
Таб.Показать("ПЕЧАТЬ: Стоимость ТМЦ на складах (На "+Дата2+?(ТипЗначения(ВыбФирма)=0, "", ", "+ВыбФирма)+")","");
ОтчетСформирован = 1;
КонецПроцедуры // ОстаткиТоваровСЦенами
// ===============================
// ПРОЦЕДУРЫ И ФУНКЦИИ, ВЫЗЫВАЕМЫЕ ИЗ ФОРМУЛ ЭЛЕМЕНТОВ ДИАЛОГА
// ===============================
// ===============================
Функция ДоступностьЭлементов(ВсеЭлементы=0)
Если ТекЗакладка = 1 Тогда
Если ВидОтчета.ТекущаяСтрока() = 1 Тогда // движения ТМЦ
Форма.тПериод. Видимость(1);
Форма.тС. Видимость(1);
Форма.Дата1. Видимость(1);
Форма.кПериод. Видимость(1);
Форма.тПо.Заголовок("по");
Форма.Заголовок("Движения товаров по складам");
Форма.тНазвание.Заголовок("Движения товаров по складам");
Форма.рДетализация. Доступность(1);
Форма.ДеталПоСкладам. Доступность(1);
Форма.ДеталПоДокументам.Доступность(1);
ИначеЕсли ВидОтчета.ТекущаяСтрока() = 2 Тогда // остатки ТМЦ
Форма.тПериод. Видимость(0);
Форма.тС. Видимость(0);
Форма.Дата1. Видимость(0);
Форма.кПериод. Видимость(0);
Форма.тПо.Заголовок("На");
Форма.Заголовок("Остатки товаров на складах");
Форма.тНазвание.Заголовок("Остатки товаров на складах");
Форма.рДетализация. Доступность(0);
Форма.ДеталПоСкладам. Доступность(0);
Форма.ДеталПоДокументам.Доступность(0);
ДеталПоСкладам = 1;
ДеталПоДокументам = 0;
Иначе // стоимость ТМЦ на складах
Форма.тПериод. Видимость(0);
Форма.тС. Видимость(0);
Форма.Дата1. Видимость(0);
Форма.кПериод. Видимость(0);
Форма.тПо.Заголовок("На");
Форма.Заголовок("Суммовые остатки товаров на складах");
Форма.тНазвание.Заголовок("Суммовые остатки товаров на складах");
Форма.рДетализация. Доступность(0);
Форма.ДеталПоСкладам. Доступность(0);
Форма.ДеталПоДокументам.Доступность(0);
ДеталПоСкладам = 0;
ДеталПоДокументам = 0;
КонецЕсли;
Форма.кХВыбФирма.Доступность(ВыбФирма.Выбран());
Форма.кХВыбМестоХранения.Доступность(ВыбМестоХранения.Выбран());
Форма.кХВыбНоменклатура.Доступность(ВыбНоменклатура.Выбран());
Иначе
Форма.тПериод. Видимость(0);
Форма.тС. Видимость(0);
Форма.Дата1. Видимость(0);
Форма.кПериод. Видимость(0);
КонецЕсли;
КонецФункции // ДоступностьЭлементов
// ===============================
Процедура ВыберемВсеЭлементыСписка(СписокТоваров)
Перем Запрос, ТекстЗапроса;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|ТекущийЭлемент = Справочник.ТМЦ.ТекущийЭлемент;
|Группировка ТекущийЭлемент;
|Условие(ТекущийЭлемент в СписокТоваров);";
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
ТЗЗапроса = СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(ТЗЗапроса);
СписокТоваров.УдалитьВсе();
ТЗЗапроса.Выгрузить(СписокТоваров,,,"ТекущийЭлемент");
КонецПроцедуры
// ===============================
Процедура Сформировать(ЗакрытьЭкран=0)
// Создание Таблицы для выходного отчета
Таб = СоздатьОбъект("Таблица");
ОтчетСформирован = 0;
СписокТоваров = СоздатьОбъект("СписокЗначений");
СписокТоваров.УдалитьВсе();
Если МФВыбТовары.РазмерСписка()>0 Тогда
Позиция = 0;
Пока Позиция<МФВыбТовары.РазмерСписка() Цикл
Позиция = Позиция+1;
СписокТоваров.ДобавитьЗначение(МФВыбТовары.ПолучитьЗначение(Позиция));
КонецЦикла;
КонецЕсли;
Если ПустоеЗначение(ВыбНоменклатура) = 0 Тогда
Если (СписокТоваров.НайтиЗначение(ВыбНоменклатура)=0) Тогда
СписокТоваров.ДобавитьЗначение(ВыбНоменклатура);
КонецЕсли;
КонецЕсли;
Если СписокТоваров.РазмерСписка()>0 Тогда
ВыберемВсеЭлементыСписка(СписокТоваров);
КонецЕсли;
СпСчетов = "";
Для А = 1 По Товар.РазмерСписка() Цикл
Если Товар.Пометка(А) = 1 Тогда
СпСчетов = СпСчетов + ?(ПустаяСтрока(СпСчетов) = 1,"",",")+Товар.ПолучитьЗначение(А);
КонецЕсли;
КонецЦикла;
Если ПустаяСтрока(СпСчетов) = 1 Тогда
Сообщить("Не выбран ни один вид ТМЦ для отчета!");
Возврат;
КонецЕсли;
Если ВидОтчета.ТекущаяСтрока()=1 Тогда // движения ТМЦ
ДвиженияТоваров();
ИначеЕсли ВидОтчета.ТекущаяСтрока()=2 Тогда // остатки ТМЦ
ОстаткиТоваров();
ИначеЕсли ВидОтчета.ТекущаяСтрока()=3 Тогда // остатки с себестоимостью
ОстаткиТоваровСЦенами();
КонецЕсли;
Если ОтчетСформирован = 0 Тогда
Возврат;
КонецЕсли;
КонецПроцедуры
// ===============================
// ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ
// ===============================
Процедура ПриВыбореЗакладки(Номер,Значение) // Предопределенная процедура
// закладки
ТекЗакладка = Номер;
Форма.ИспользоватьСлой(Значение+",Кнопки",2);
КонецПроцедуры // ПриВыбореЗакладки
// ===============================
Процедура ПриОткрытии()
ВыбВалюта = Гривня;
ВидОтчета.ТекущаяСтрока(2);
Форма.тПериод. Видимость(0);
Форма.тС. Видимость(0);
Форма.Дата1. Видимость(0);
Форма.кПериод. Видимость(0);
Форма.тПо.Заголовок("На");
Форма.Заголовок("Остатки товаров на складах");
Форма.тНазвание.Заголовок("Остатки товаров на складах");
Форма.рДетализация. Доступность(0);
Форма.ДеталПоСкладам. Доступность(0);
Форма.ДеталПоДокументам.Доступность(0);
ДеталПоСкладам = 1;
ДеталПоДокументам = 0;
Товар.ДобавитьЗначение("281,","Товары на опт. складе");
Товар.ДобавитьЗначение("282","Товары в рознице");
Товар.ДобавитьЗначение("283","Товары на комиссии");
Товар.ДобавитьЗначение("284","Тара под товарами");
Товар.ДобавитьЗначение("20","Производственные запасы");
Товар.ДобавитьЗначение("22","Малоценные и быстроизнашивающиеся предметы");
Товар.ДобавитьЗначение("24","Брак в производстве");
Товар.ДобавитьЗначение("25","Полуфабрикаты");
Товар.ДобавитьЗначение("26","Готовая продукция");
Товар.ДобавитьЗначение("27","Продукция сельского хозяйства");
глПометкаТаблицыГруппировок(Товар,1);
// будем отслеживать только реальные изменения этих реквизитов
Форма.ВидОтчета.ВыполнятьФормулуТолькоПриИзменении(1);
Форма.Обновить(1);
КонецПроцедуры // ПриОткрытии()
// ===============================
Процедура ВводНового() // Предопределенная процедура
КонецПроцедуры // ВводНового
// ===============================
// ТЕЛО МОДУЛЯ
// ===============================
// Инициализируем закладки
Форма.ИспользоватьЗакладки(1);
Форма.Закладки.ДобавитьЗначение("Основной","Основной");
Форма.Закладки.ДобавитьЗначение("Счета","Множественный Фильтр");
Форма.ИспользоватьСлой("Основной,Кнопки",2);
ТекЗакладка = 1;
// инициализация границ периодов
Дата2=ТекущаяДата();
Дата1=ТекущаяДата();
ВыбФирма = Константа.БазФирма;
ВыбМестоХранения = глВосстановитьЗначение(,"БазМестоХранения");
// инициализация списков
ВидОтчета.УдалитьВсе();
ВидОтчета.ДобавитьЗначение("движения ТМЦ");
ВидОтчета.ДобавитьЗначение("остатки ТМЦ");
ВидОтчета.ДобавитьЗначение("стоимость ТМЦ на складах");
ВидОтчета.ТекущаяСтрока(2);
ЕстьГруппыТМЦ = 0;
! |
| http://pro1c.org.ua/index.php?act=announce&id=2: 3, 4
|
! |
| Раздел "Хранилище" предназначен для выкладывания готовых решений, а не для вопросов!
|
Автор: Sharzem 28.08.16, 9:46
Цитата(inna.innainna84 @ 25.08.16, 9:50)
не выбирает движение товара по выбранной фирме
В отчете ВыбФирма не отбирается. Выборка есть только по складам.
Т.е., у Вас 1 склад не может принадлежать 2-м фирмам. Думаю что у Вас это не единственный отчет в конфигурации - порвало где-то еще.
Если у Вас имеется принадлежность одного и того ж склада 2-м разным фирмам, то как вариант (если небольшой период ведения совместного учета):
1. создайте новый склад;
2. С помощью Uchoice.ert отберите документы по новой фирме где совмещен склад и установите новый;
3) Перепроведите документы за этот период.
Есть и другой вариант: можно переписать
все подобные отчеты