Помогите С Отчетом

Тема в разделе "1C и всё что с ней связано", создана пользователем Ivanushka, 28 май 2012.

Статус темы:
Закрыта.
  1. Ivanushka

    Ivanushka Гость

    имеется отчет остатки тмц, в нем реализовано вывод информации по заказам по каждому наименованию товара (количество заказанного товара, дата документа заказ поставщику и статус документа заказ поставщику (заказан, в пути, получен). сейчас по каждому наименованию количество суммируется, а дата заказа ставиться последняя на дату формирования отчета. а нужно, чтобы если наименование встречается несколько раз в разных документах "заказ поставщику" и у них разные статусы, чтобы в отчет выводилось наименование столько раз, сколько разных статусов
     
  2. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Уж сколько раз твердили миру...
    Ведь НИЧЕГО не понять из этих трех строк. Специально постараться - и то так не сформулируешь :crash:
    Вспоминается анекдот про дантиста :
    - Доктор, помогите !
    - У меня прием до 6. Сейчас полседьмого !
    - Ну, сделайте что-нибудь.
    Разворачивается, бьет посетителя в глаз.
    - Иди к окулисту. Он до семи принимает.
    Простите за баян...
     
  3. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Не ворчите, сударь! Тишина в зале! Я дам умный совет:
    Найдите фрагмент текста, отвечающий за вывод отчета.
     
  4. Vladal

    Vladal Active Member

    Регистрация:
    26 май 2012
    Сообщения:
    25
    Симпатии:
    0
    Ну вот в ячейке таблицы, где выводится строка с документом надо вставить (копипастить?) ячейку с наименованием товара из другой ячейки, где этот товар выводится в группировке.
    И проследите, чтобы в ячейке тип значения был отличным от "Текст".
    И да, какая версия платформы, конфигурации?
     
  5. Ivanushka

    Ivanushka Гость

    Типовая конфигурация Торговля+Склад, редакция 9.2
     
  6. Ivanushka

    Ivanushka Гость

    ////////////////////////////////////////////////////////////////////////////////
    // ОПИСАНИЕ МОДУЛЬНЫХ ПЕРЕМЕННЫХ
    //
    Перем ТекСтрокаВТаблице; // текущая строка в таблице значений МФ

    // используются для стандартного механизма кнопок "Обновить" и "Настройка"
    Перем Таб;
    Перем Обновить;
    Перем Расшифровка;

    // Итоги по регистру партий для расчета цен
    Перем ТЗИтогов, ТЗИтогов2;

    // Представление текущего элемента из списка "ЦенаТовара".
    Перем ПредставлениеЦены;

    Перем ТЗВДокумент;
    Перем ВызовИзДокумента;
    Перем ДокументИнвентаризация;
    Перем ВалютаДокумента;
    Перем КурсДокумента, КратностьДокумента;

    // Таблица значений для формирования отчета
    Перем ТЗ;
    Перем МаксимальныйУровень;

    ////////////////////////////////////////////////////////////////////////////////
    // ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ
    //******************************************************************************
    // ВыбратьПоФильтру()
    //
    // Параметры:
    // Нет
    //
    // Описание:
    // Открывает обработку отбора элементов по произвольному фильтру
    //
    Процедура ВыбратьПоФильтру()

    Перем ВидЗначенияПодбора;

    ВидЗначенияПодбора=СокрЛП(ТаблицаМФ.Вид);

    Если ПустоеЗначение(ВидЗначенияПодбора)=1 Тогда
    Возврат;
    КонецЕсли;

    СписокПараметров=СоздатьОбъект("СписокЗначений");
    СписокПараметров.ДобавитьЗначение("", "ИмяВызвавшейФормы");
    СписокПараметров.ДобавитьЗначение(ТаблицаМФ.Тип, "Тип");
    СписокПараметров.ДобавитьЗначение(ВидЗначенияПодбора,"Вид");
    СписокПараметров.ДобавитьЗначение(СписокЭлементовМФ, "Объекты");
    ТаблицаМФ.ФлВкл=2;
    ОткрытьФорму("Обработка.ПодборОбъектов#",СписокПараметров);

    КонецПроцедуры // ВыбратьПоФильтру

    //******************************************************************************
    // ПерерисовкаНазванийЗакладок
    //
    // Параметры:
    // Нет
    //
    // Описание:
    // Добавляет "(!)" в заголовок закладки с множественным фильтром, когда этот фильтр задан
    //
    Функция ПерерисовкаНазванийЗакладок()

    Форма.Закладки.УстановитьЗначение(2,?(глМножественныйФильтрЗадан(ТаблицаМФ)=1,"(!) ","")+"Множественный фильтр");

    КонецФункции // ПерерисовкаНазванийЗакладок

    //******************************************************************************
    // УправлениеДиалогом()
    //
    // Параметры:
    // Нет
    //
    // Возвращаемое значение:
    // Нет
    //
    // Описание:
    // Управление доступностью элементов диалога.
    //
    Процедура УправлениеДиалогом()

    Если Форма.Закладки.ТекущаяСтрока() = 1 Тогда
    Форма.ИспользоватьСлой("Шапка,Подвал,Основной1,Основной2,Разделитель1");

    Иначе
    Форма.ИспользоватьСлой("Шапка,МФ,Подвал");
    КонецЕсли;

    КонецПроцедуры //УправлениеДиалогом()

    //******************************************************************************
    // РасшифровкаОбновить(Обновить)
    //
    // Параметры:
    // Обновить = 1 - нажата кнопка "Обновить"
    // 2 - нажата кнопка "Настройка"
    //
    // Возвращаемое значение:
    // Расшифровка (список значений)
    //
    // Вызывается из формул элементов диалога:
    // из таблицы, кнопки "Обновить" и "Настройка"
    //
    // Описание:
    // функция для стандартного механизма кнопок ""Обновить" и "Настройка""
    // помещает значение параметра в список Расшифровка и возвращает этот список
    //
    Функция РасшифровкаОбновить(Обновить)

    Расшифровка.Установить("Обновить", Обновить);
    Возврат Расшифровка;

    КонецФункции //РасшифровкаОбновить()

    //******************************************************************************
    // ДобавитьСклады(Запрос, ФлагВозврата, СписокСкладов)
    //
    // Параметры:
    // Запрос, ФлагВозврата, СписокСкладов
    //
    // Возвращаемое значение:
    // Нет
    //
    // Описание:
    // Добавление складов в список обходом группировки запроса.
    //
    Процедура ДобавитьСклады(Запрос, ФлагВозврата, СписокСкладов)

    ПервыйРаз = 1;
    Пока Запрос.Группировка("Склад") = 1 Цикл

    Если ПустоеЗначение(Запрос.Склад) = 1 Тогда
    Продолжить;
    КонецЕсли;

    Если СписокСкладов.НайтиЗначение(Запрос.Склад)=0 Тогда
    СписокСкладов.ДобавитьЗначение(Запрос.Склад);
    КонецЕсли;

    КонецЦикла;

    СписокСкладов.Сортировать();
    ФлагВозврата = 1;

    Для Сч = 1 По СписокСкладов.РазмерСписка() Цикл
    ТекСклад = СписокСкладов.ПолучитьЗначение(Сч);
    ТЗ.НоваяКолонка("Количество" + Сч, "Число");
    Если ТекСклад.Вид() = "Склады" Тогда
    Если (ПредставлениеЦены <> "не показывать") и ((ПредставлениеЦены <> "отпускная цена (только розница)") или (ТекСклад.РозничныйСклад = 1)) Тогда
    ТЗ.НоваяКолонка("Сумма" + Сч, "Число");
    КонецЕсли;
    Иначе
    Если (ПредставлениеЦены <> "не показывать") и (ПредставлениеЦены <> "отпускная цена (только розница)") Тогда
    ТЗ.НоваяКолонка("Сумма" + Сч, "Число");
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры // ДобавитьСклады()


    //******************************************************************************
    // ТекстЗапросаБезКомиссии()
    //
    // Параметры:
    // Нет
    //
    // Возвращаемое значение:
    // Текст запроса
    //
    // Описание:
    // Формирует текст запроса, для остатков без комиссионеров.
    //
    Функция ТекстЗапросаБезКомиссии()

    СтрПериод = ?(ДатаКонца>= ПолучитьДатуТА(),"",
    "Период с ДатаКонца по ДатаКонца;");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |" + СтрПериод +
    "
    |Фирма = Регистр.ОстаткиТМЦ.Фирма,
    | Регистр.РезервыТМЦ.Фирма;
    |УпрАналитика = Регистр.ОстаткиТМЦ.Фирма.УпрАналитика,
    | Регистр.РезервыТМЦ.Фирма.УпрАналитика;
    |ЮрЛицо = Регистр.ОстаткиТМЦ.Фирма.ЮрЛицо,
    | Регистр.РезервыТМЦ.Фирма.ЮрЛицо;
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура,
    | Регистр.Заказы.Номенклатура,
    | Регистр.РезервыТМЦ.Номенклатура;
    |Склад = Регистр.ОстаткиТМЦ.Склад,
    | Регистр.РезервыТМЦ.Склад;
    |РозничныйСклад = Регистр.ОстаткиТМЦ.Склад.РозничныйСклад,
    | Регистр.РезервыТМЦ.Склад.РозничныйСклад;";

    Если ВыводитьЗаказанный = 1 Тогда
    ТекстЗапроса = ТекстЗапроса +
    "Заказано = Регистр.Заказы.КоличествоПриход;
    |ДатаЗаказа = Регистр.Заказы.ЗаказПоставщику.ДатаДок;
    |СтатДок = Регистр.Заказы.ЗаказПоставщику.СтатусДокумента1;
    |Функция ЗаказаноКонОст = КонОст(Заказано);";
    КонецЕсли;

    ТекстЗапроса = ТекстЗапроса +
    "Количество = Регистр.ОстаткиТМЦ.Количество;
    |Резерв = Регистр.РезервыТМЦ.Количество;
    |Функция КоличествоКонОст = КонОст(Количество);
    |Группировка Номенклатура"+?(ПоказатьОстатки.ТекущаяСтрока()>=2," Все","")+";";

    Возврат ТекстЗапроса;

    КонецФункции // ТекстЗапросаБезКомиссии()

    //******************************************************************************
    // ЗаполнитьСтроку(ТЗ, Запрос)
    //
    // Параметры:
    // ТЗ - таблица значений отчета спозиционированная на заполняемой строке
    // Запрос - запрос, спозиционированный на соответствующем ТМЦ и, если необходимо розничной цене
    // СписокСкладов - список значений, содержащий все склады, попавшие в запрос
    //
    // Возвращаемое значение:
    // Нет
    //
    // Описание:
    // Заполняет строку таблицы.
    //
    Процедура ЗаполнитьСтроку(ТЗ, Запрос, СписокСкладов, ВДокумент)


    ВалютаЦены = 0;

    ПервыйРаз = 1;
    Пока Запрос.Группировка("Склад")=1 Цикл

    ПечКол = Запрос.КоличествоКонОст;
    Если Показатель.ТекущаяСтрока() = 2 Тогда
    ПечКол = ПечКол - Запрос.РезервКонОст;
    КонецЕсли;

    Попытка
    ПечКол = ПечКол / ТЗ.ПечЕд.Коэффициент;
    Исключение
    КонецПопытки;

    Поз = СписокСкладов.НайтиЗначение(Запрос.Склад);
    Если Поз > 0 Тогда
    ТЗ.УстановитьЗначение(ТЗ.НомерСтроки, "Количество" + Поз, ПечКол);
    КонецЕсли;


    КонецЦикла; // по складам

    КонецПроцедуры // ЗаполнитьСтроку()

    //******************************************************************************
    // РассчитатьИтогиПоГруппам(ТЗ, Запрос)
    //
    // Параметры:
    // СписокСкладов - список значений, содержащий все склады, попавшие в запрос
    //
    // Возвращаемое значение:
    // Нет
    //
    // Описание:
    // Рассчитывает итоги по группам и общие итоги по отчету.
    //
    Процедура РассчитатьИтогиПоГруппам(СписокСкладов)

    Уровень = 1;
    Для Уровень = 1 По 12 Цикл
    КопияТЗ = СоздатьОбъект("ТаблицаЗначений");
    ТЗ.Выгрузить(КопияТЗ);
    КопияТЗ.Сортировать("Уровень");
    ТЗ.ВыбратьСтроки();
    СтрокаНайдена = 0;
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл
    Если ТЗ.Уровень = Уровень Тогда
    Если Уровень <> 12 Тогда
    МаксимальныйУровень = Уровень;
    КонецЕсли;
    СтрокаНайдена = 1;
    КопияТЗ.ВыбратьСтроки();
    Пока КопияТЗ.ПолучитьСтроку() = 1 Цикл
    Если КопияТЗ.Родитель = ТЗ.ТекРасшифровка Тогда
    Если (ТЗ.Уровень <> 12) И (ТЗ.Уровень <= КопияТЗ.Уровень) Тогда
    ТЗ.Уровень = КопияТЗ.Уровень + 1;
    Для Сч = 1 По СписокСкладов.РазмерСписка() Цикл
    ТекСклад = СписокСкладов.ПолучитьЗначение(Сч);
    Если ИтогиПоКоличеству = 1 Тогда
    ТекКол = ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч);
    ТЗ.УстановитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч, 0);
    КонецЕсли;
    //Если ТекСклад.Вид() = "Склады" Тогда
    // ТекСумма = ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Сумма" + Сч);
    // ТЗ.УстановитьЗначение(ТЗ.НомерСтроки, "Сумма" + Сч, 0);
    //Иначе
    // ТекСумма = ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Сумма" + Сч);
    // ТЗ.УстановитьЗначение(ТЗ.НомерСтроки, "Сумма" + Сч, 0);
    //КонецЕсли;
    КонецЦикла;
    Продолжить;
    КонецЕсли;
    Сч = 0;
    Для Сч = 1 По СписокСкладов.РазмерСписка() Цикл
    ТекСклад = СписокСкладов.ПолучитьЗначение(Сч);
    Если ИтогиПоКоличеству = 1 Тогда
    ТекКол = ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч);
    ТЗ.УстановитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч, ТекКол + КопияТЗ.ПолучитьЗначение(КопияТЗ.НомерСтроки, "Количество" + Сч));
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    КонецПроцедуры // РассчитатьИтогиПоГруппам()


    //******************************************************************************
    // Сформировать(ЗакрытьДиалог=0, ВДокумент=0)
    //
    // Параметры:
    // ЗакрытьДиалог - флаг того, что после формирования отчета надо закрыть диалог
    // ВДокумент - 1 - режим переноса информации отчета в документ "Инвентаризайия ТМЦ"
    // 0 - вывод отчета
    //
    // Возвращаемое значение:
    // Нет
    //
    // Вызывается из формул элементов диалога:
    // кнопки "Сформировать" и "ОК"
    //
    // Описание:
    // Запускает отчет.
    //
    Процедура Сформировать(ЗакрытьДиалог=0, ВДокумент=0)

    Перем Запрос, ТекстЗапроса;
    Перем СписокИтогов;
    Перем Эл;

    ВалютаЦены = глРубли;

    Если глПроверкаДаты(ДатаКонца,ДатаКонца)=0 Тогда
    Возврат;
    КонецЕсли;

    Если (ТипЗначенияСтр(Таб) <> "Таблица") ИЛИ (Обновить = 0) Тогда
    Таб = СоздатьОбъект("Таблица");
    Иначе
    Таб.Очистить();
    КонецЕсли;

    Таб.ИсходнаяТаблица( "ОстаткиТМЦ" );

    Расшифровка = СоздатьОбъект("СписокЗначений");
    Путь = "";
    ИмяФайла = "";
    РасположениеФайла(Путь,ИмяФайла);
    ФайлОтчета = Путь + ИмяФайла;
    Расшифровка.Установить("Отчет", ?(ПустоеЗначение(ФайлОтчета) = 1,"ОстаткиТМЦ", ФайлОтчета));

    // все настройки помещаем в список
    Расшифровка.Установить("ДатаКонца", ДатаКонца);
    Расшифровка.Установить("ВыбТМЦ", ВыбТМЦ);

    Расшифровка.Установить("ИтогиПоКоличеству", ИтогиПоКоличеству);
    Расшифровка.Установить("ВыводитьЗаказанный",ВыводитьЗаказанный);
    Расшифровка.Установить("ПоказатьОстатки", ПоказатьОстатки.ТекущаяСтрока());

    глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были
    // запомним МФ только если он задан
    Если глМножественныйФильтрЗадан(ТаблицаМФ) = 1 Тогда
    Расшифровка.Установить("ТаблицаМФ", ТаблицаМФ);
    КонецЕсли;

    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = ТекстЗапросаБезКомиссии();

    Если Показатель.ТекущаяСтрока() = 2 Тогда
    ТекстЗапроса = ТекстЗапроса +
    "Функция РезервКонОст = КонОст(Резерв);";
    КонецЕсли;

    ТекстЗапроса = ТекстЗапроса +
    "Группировка Склад Все ВошедшиеВЗапрос;";



    Загол="";

    НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Номенклатура", ВыбТМЦ, "ВыбТМЦ", ТекстЗапроса,Загол,"СвойстваНоменклатуры");

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

    Если Показатель.ТекущаяСтрока()=1 Тогда
    ПечЗаголовок = "Остатки ТМЦ на складах";
    Иначе
    ПечЗаголовок = "Свободные остатки ТМЦ на складах";
    КонецЕсли;
    ПечЗаголовокСтолбца = "";

    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;

    ТЗИтогов=СоздатьОбъект("ТаблицаЗначений");
    ТЗИтоговКомиссия=СоздатьОбъект("ТаблицаЗначений");
    ТЗИтогов2=СоздатьОбъект("ТаблицаЗначений");
    ТЗИтоговКомиссия2=СоздатьОбъект("ТаблицаЗначений");

    //
    Если
    (СебестоимостьНеИзменялась=1)
    Тогда
    // если считаем себестоимость из регистра партии товаров
    ВремРегистры=СоздатьОбъект("Регистры");
    РегПартии=ВремРегистры.ПартииНаличие;
    РегОтданные = ВремРегистры.ПартииОтданные;
    //Если ВидРазделителя = 1 Тогда // Фильтруем по фирме
    // Если ВыбРазделитель1.Выбран() = 1 Тогда
    // РегПартии.УстановитьЗначениеФильтра("Фирма", ВыбРазделитель1);
    // РегОтданные.УстановитьЗначениеФильтра("Фирма", ВыбРазделитель1);
    // КонецЕсли;
    //ИначеЕсли ВидРазделителя = 2 Тогда // Фильтруем по юр. лицу
    // Если ВыбРазделитель2.Выбран() = 1 Тогда
    // СписокФирм = СоздатьОбъект("СписокЗначений");
    // СпрФирм = СоздатьОбъект("Справочник.Фирмы");
    // СпрФирм.ВыбратьЭлементы();
    // Пока СпрФирм.ПолучитьЭлемент() = 1 Цикл
    // Если СпрФирм.ЮрЛицо = ВыбРазделитель2 Тогда
    // СписокФирм.ДобавитьЗначение(СпрФирм.ТекущийЭлемент());
    // КонецЕсли;
    // РегПартии.УстановитьЗначениеФильтра("Фирма", СписокФирм, 2);
    // РегОтданные.УстановитьЗначениеФильтра("Фирма", СписокФирм, 2);
    // КонецЦикла;
    // КонецЕсли;
    //ИначеЕсли ВидРазделителя = 3 Тогда // Фильтруем по упр. аналитике
    // Если ВыбРазделитель3.Выбран() = 1 Тогда
    // СписокФирм = СоздатьОбъект("СписокЗначений");
    // СпрФирм = СоздатьОбъект("Справочник.Фирмы");
    // СпрФирм.ВыбратьЭлементы();
    // Пока СпрФирм.ПолучитьЭлемент() = 1 Цикл
    // Если СпрФирм.УпрАналитика = ВыбРазделитель3 Тогда
    // СписокФирм.ДобавитьЗначение(СпрФирм.ТекущийЭлемент());
    // КонецЕсли;
    // КонецЦикла;
    // РегПартии.УстановитьЗначениеФильтра("Фирма", СписокФирм, 2);
    // РегОтданные.УстановитьЗначениеФильтра("Фирма", СписокФирм, 2);
    // КонецЕсли;
    //КонецЕсли;
    Если (ДатаКонца<ПолучитьДатуТА()) Тогда
    РегПартии.ВременныйРасчет();
    РегОтданные.ВременныйРасчет();
    ВремРегистры.РассчитатьРегистрыПО(ДатаКонца);
    КонецЕсли;

    РегПартии.ВыгрузитьИтоги(ТЗИтогов,0,1);

    ТЗИтогов.Свернуть("Номенклатура","СуммаРуб, СуммаБезНДС, Количество");
    РегОтданные.ВыгрузитьИтоги(ТЗИтоговКомиссия,0,0);
    ТЗИтоговКомиссия.Свернуть("Номенклатура","СуммаРуб, СуммаБезНДС, Количество");
    ТЗИтоговКомиссия.ВыбратьСтроки();
    Пока ТЗИтоговКомиссия.ПолучитьСтроку() = 1 Цикл
    ТЗИтогов.НоваяСтрока();
    ТЗИтогов.Номенклатура = ТЗИтоговКомиссия.Номенклатура;
    ТЗИтогов.Количество = ТЗИтоговКомиссия.Количество;
    ТЗИтогов.СуммаРуб = ТЗИтоговКомиссия.СуммаРуб;
    ТЗИтогов.СуммаБезНДС = ТЗИтоговКомиссия.СуммаБезНДС;
    КонецЦикла;

    ТЗИтогов.Свернуть("Номенклатура","СуммаРуб, СуммаБезНДС, Количество");

    Если СебестоимостьНеИзменялась=1 Тогда
    РегПартии.ВременныйРасчет();
    РегОтданные.ВременныйРасчет();
    ВремРегистры.РассчитатьРегистрыПО(ДатаCCНеИзменялась);
    РегПартии.ВыгрузитьИтоги(ТЗИтогов2,0,1);
    ТЗИтогов2.Свернуть("Номенклатура","СуммаРуб, СуммаБезНДС, Количество");
    РегОтданные.ВыгрузитьИтоги(ТЗИтоговКомиссия2,0,0);
    ТЗИтоговКомиссия2.Свернуть("Номенклатура","СуммаРуб, СуммаБезНДС, Количество");
    ТЗИтоговКомиссия2.ВыбратьСтроки();
    Пока ТЗИтоговКомиссия2.ПолучитьСтроку() = 1 Цикл
    ТЗИтогов2.НоваяСтрока();
    ТЗИтогов2.Номенклатура = ТЗИтоговКомиссия2.Номенклатура;
    ТЗИтогов2.Количество = ТЗИтоговКомиссия2.Количество;
    ТЗИтогов2.СуммаРуб = ТЗИтоговКомиссия2.СуммаРуб;
    ТЗИтогов2.СуммаБезНДС = ТЗИтоговКомиссия2.СуммаБезНДС;
    КонецЦикла;

    ТЗИтогов2.Свернуть("Номенклатура","СуммаРуб, СуммаБезНДС, Количество");

    КонецЕсли;
    КонецЕсли;



    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("ПечТекстСтроки", "Строка");
    ТЗ.НоваяКолонка("ПечЕд", "Справочник.Единицы");
    ТЗ.НоваяКолонка("Уровень", "Число");
    ТЗ.НоваяКолонка("ТекРасшифровка", "Справочник.Номенклатура");
    ТЗ.НоваяКолонка("Родитель", "Справочник.Номенклатура");

    Если ВыводитьЗаказанный = 1 Тогда
    ТЗ.НоваяКолонка("Заказано", "Число");
    ТЗ.НоваяКолонка("ДатаЗаказа", "Дата");
    ТЗ.НоваяКолонка("СтатДок", "Значение");
    КонецЕсли;

    // сформируем список складов.
    ФлагВозврата = 0;
    СписокСкладов = СоздатьОбъект("СписокЗначений");
    ЕЕ=1;
    Для ИИ=1 По ВыбранныеСклады.РазмерСписка() Цикл
    Если ВыбранныеСклады.Пометка(ИИ)=1 Тогда
    СписокСкладов.ДобавитьЗначение(ВыбранныеСклады.ПолучитьЗначение(ИИ,Эл));
    ТЗ.НоваяКолонка("Количество"+ЕЕ, "Число");
    ЕЕ=ЕЕ+1;
    КонецЕсли;
    КонецЦикла;

    //Пока (Запрос.Группировка("Номенклатура") = 1) и (ФлагВозврата <> 1) Цикл
    // Если Запрос.ЭтоГруппа("Номенклатура")=1 Тогда
    // Продолжить;
    // КонецЕсли;
    // ДобавитьСклады(Запрос, ФлагВозврата, СписокСкладов);
    //КонецЦикла;

    глЧислоСтрок = 0;

    Таб.ВывестиСекцию("Кнопки");
    Таб.ВывестиСекцию("Шапка");
    Таб.ВывестиСекцию("ШапкаТаблицы|ТМЦ");


    // выводим шапку на каждой странице
    НачПовт = Таб.ВысотаСекции("Кнопки") + Таб.ВысотаСекции("Шапка");
    КонПовт = НачПовт + Таб.ВысотаСекции("ШапкаТаблицы");
    Таб.ПовторятьПриПечатиСтроки(НачПовт + 1, КонПовт);

    Для ИИ=1 По ВыбранныеЦены.РазмерСписка() Цикл
    Если ВыбранныеЦены.Пометка(ИИ)=1 Тогда
    СтрокаЦены=""+ВыбранныеЦены.ПолучитьЗначение(ИИ,Эл)+"("+ВыбранныеЦены.ПолучитьЗначение(ИИ,Эл).Валюта+")";
    Таб.ПрисоединитьСекцию("ШапкаТаблицы|Цена");
    КонецЕсли;
    КонецЦикла;

    Если СкладыВОтдельныхКолонках=1 Тогда
    Для Сч =1 По СписокСкладов.РазмерСписка() Цикл
    ПечСклад = СписокСкладов.ПолучитьЗначение(Сч);
    Таб.ПрисоединитьСекцию("ШапкаТаблицы|Склад");
    КонецЦикла;
    Иначе
    ПечСклад = "Остаток";
    Таб.ПрисоединитьСекцию("ШапкаТаблицы|Склад");
    КонецЕсли;

    Если ВыводитьЗаказанный = 1 Тогда
    Таб.ПрисоединитьСекцию("ШапкаТаблицы|Заказано");
    КонецЕсли;

    глОживить(1);

    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 3, "ОстаткиТМЦ", "ОстаткиТМЦ");

    СписокГрупп = СоздатьОбъект("СписокЗначений");
    Запрос.ВНачалоВыборки();
    Пока (Запрос.Группировка("Номенклатура") = 1) Цикл
    ТМЦ = Запрос.Номенклатура;

    Если Показатель.ТекущаяСтрока()=1 Тогда
    ПоказательАнализа = Запрос.КоличествоКонОст;
    Иначе
    ПоказательАнализа = Запрос.КоличествоКонОст - Запрос.РезервКонОст;
    КонецЕсли;


    // проверим условие
    Если ПоказатьОстатки.ТекущаяСтрока()=1 Тогда // все ненулевые
    // выводим все
    Если ПоказательАнализа = 0 Тогда
    Продолжить;
    КонецЕсли;

    ИначеЕсли ПоказатьОстатки.ТекущаяСтрока()=2 Тогда // все
    // выводим все

    ИначеЕсли ПоказатьОстатки.ТекущаяСтрока()=3 Тогда // все отрицательные
    Если ПоказательАнализа >= 0 Тогда // проверим
    Продолжить;
    КонецЕсли;

    ИначеЕсли ПоказатьОстатки.ТекущаяСтрока()=4 Тогда // меньше мин. остатка
    Если ПоказательАнализа >= ТМЦ.МинОстаток Тогда
    Продолжить;
    КонецЕсли;

    ИначеЕсли ПоказатьОстатки.ТекущаяСтрока()=5 Тогда // все, имеющиеся в наличи
    Если ПоказательАнализа <= 0 Тогда
    Продолжить;
    КонецЕсли;

    КонецЕсли;

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

    // выводим группы ТМЦ
    Пока СписокГрупп.РазмерСписка()>0 Цикл
    Группа = СписокГрупп.ПолучитьЗначение(1);
    Если ТМЦ.ПринадлежитГруппе(Группа)=1 Тогда
    ТЗ.НоваяСтрока();
    ТЗ.Уровень = СписокГрупп.РазмерСписка();
    ТЗ.ПечТекстСтроки = Группа.Наименование;
    ТЗ.Родитель = Группа.Родитель;
    ТЗ.ТекРасшифровка = Группа;
    КонецЕсли;
    СписокГрупп.УдалитьЗначение(1);
    КонецЦикла;

    ТМЦСтрока = "" + ТМЦ +?(ПечататьКомментарий=1," "+ТМЦ.Комментарий,"");//+ ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(ТМЦ.Артикул), "");

    ТЗ.НоваяСтрока();
    ТЗ.Уровень = 0;
    ТЗ.ТекРасшифровка = ТМЦ;
    ТЗ.Родитель = ТМЦ.Родитель;
    ТЗ.ПечЕд = ТМЦ.БазоваяЕдиница;
    ТЗ.ПечТекстСтроки = ТМЦСтрока;// + ?(ТМЦ.МинОстаток=0,"",", мин. остаток = "+СокрЛП(глФРМКоличество(ТМЦ.МинОстаток,ТЗ.ПечЕд)));
    Если ВыводитьЗаказанный = 1 Тогда
    ТЗ.Заказано = Запрос.ЗаказаноКонОст;
    ТЗ.ДатаЗаказа = Запрос.ДатаЗаказа;
    ТЗ.СтатДок = Запрос.СтатДок;
    КонецЕсли;
    ЗаполнитьСтроку(ТЗ, Запрос, СписокСкладов, 0);
    глОживить(1);

    КонецЦикла;

    // Последняя строка для общих итогов
    ТЗ.НоваяСтрока();
    ТЗ.Уровень = 12;
    ТЗ1=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.Выгрузить(ТЗ1);
    ТЗ1.УдалитьСтроки();
    РассчитатьИтогиПоГруппам(СписокСкладов);

    ТЗ.ВыбратьСтроки();
    СЗ=СоздатьОбъект("СписокЗначений");
    ПредУровень=12;
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл
    Если ТЗ.Родитель.Выбран()=0 Тогда
    ТЗ1.УдалитьСтроки();
    КонецЕсли;
    Если (ПредУровень=0) И (ТЗ.Уровень>0) Тогда
    Для ИИ=1 По ТЗ.Уровень Цикл
    Если (ТЗ1.КоличествоСтрок()>0) Тогда
    ТЗ1.УдалитьСтроку(ТЗ1.КоличествоСтрок());
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    ПредУровень=ТЗ.Уровень;
    //Проверка на изменение себестоимости
    Если (СебестоимостьНеИзменялась=1) И (ТЗ.ТекРасшифровка.ЭтоГруппа()=0) Тогда
    ЦЦ1=0;
    ЦЦ2=0;
    НомСтр="";
    Если ТЗИтогов.НайтиЗначение(ТЗ.ТекРасшифровка,НомСтр,"Номенклатура")=1 Тогда
    ТЗИтогов.ПолучитьСтрокуПоНомеру(НомСтр);
    КолТовара = ТЗИтогов.Количество;
    ЦЦ1 = ?(КолТовара=0,0,ТЗИтогов.СуммаБезНДС/КолТовара);
    КонецЕсли;
    НомСтр="";
    Если ТЗИтогов2.НайтиЗначение(ТЗ.ТекРасшифровка,НомСтр,"Номенклатура")=1 Тогда
    ТЗИтогов2.ПолучитьСтрокуПоНомеру(НомСтр);
    КолТовара = ТЗИтогов2.Количество;
    ЦЦ2 = ?(КолТовара=0,0,ТЗИтогов2.СуммаБезНДС/КолТовара);
    КонецЕсли;

    Если Окр(ЦЦ1,2)=Окр(ЦЦ2,2) Тогда
    Продолжить;
    КонецЕсли;
    КонецЕсли;
    //Проверка на изменение любого типа цен
    Если (ЦенаНеИзменялась=1) И (ТЗ.ТекРасшифровка.ЭтоГруппа()=0) Тогда
    ФлагВыхода=0;
    Для ИИ=1 По ВыбранныеЦены.РазмерСписка() Цикл
    Если ВыбранныеЦены.Пометка(ИИ)=1 Тогда
    ОЦ1 = 0;
    ЦЦ1 = 0;
    ОЦ2 = 0;
    ЦЦ2 = 0;
    ВалЦены = 0;
    глВернутьЦену(ТЗ.ТекРасшифровка, ВыбранныеЦены.ПолучитьЗначение(ИИ,Эл), ДатаЦенаНеИзменялась, ЦЦ1,,ВалЦены,, ОЦ1);
    глВернутьЦену(ТЗ.ТекРасшифровка, ВыбранныеЦены.ПолучитьЗначение(ИИ,Эл), ДатаКонца, ЦЦ2,,ВалЦены,, ОЦ2);
    Если ЦЦ1=ЦЦ2 Тогда
    ФлагВыхода=1;
    Прервать;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    Если ФлагВыхода=1 Тогда
    Продолжить;
    КонецЕсли;
    КонецЕсли;

    ПечТекстСтроки = ТЗ.ПечТекстСтроки;
    ПечЕд = ТЗ.ПечЕд;
    ТекРасшифровка = ТЗ.ТекРасшифровка;
    Если (ТЗ.Уровень > 0) И (ТЗ.Уровень < 12) Тогда
    ТЗ1.НоваяСтрока();
    ТЗ1.ПечЕд=ТЗ.ПечЕд;
    ТЗ1.ТекРасшифровка=ТЗ.ТекРасшифровка;
    ТЗ1.ПечТекстСтроки=ТЗ.ПечТекстСтроки;
    ТЗ1.Родитель=ТЗ.Родитель;
    ТЗ1.Уровень=ТЗ.Уровень;
    Продолжить;
    ИмяСекции = "СтрокаГ";
    ИначеЕсли ТЗ.Уровень = 12 Тогда
    ИмяСекции = "ПодвалИтого";
    Иначе
    ИмяСекции = "Строка";
    Если ПоказатьОстатки.ТекущаяСтрока()=1 Тогда
    КолОбщ= 0;
    Для Сч = 1 По СписокСкладов.РазмерСписка() Цикл
    КолОбщ = КолОбщ+(ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч));
    КонецЦикла;
    Если КолОбщ=0 Тогда
    Продолжить;
    КонецЕсли;

    КонецЕсли;
    Если (УсловиеКраснойСтроки=1) И (ТЗ.ТекРасшифровка.ЭтоГруппа()=0) Тогда
    Для ИИ=1 По ВыбранныеЦены.РазмерСписка() Цикл
    Если ВыбранныеЦены.Пометка(ИИ)=1 Тогда
    ОЦ1 = 0;
    ЦЦ1 = 0;
    ОЦ2 = 0;
    ЦЦ2 = 0;
    ВалЦены = 0;
    глВернутьЦену(ТЗ.ТекРасшифровка, ВыбранныеЦены.ПолучитьЗначение(ИИ,Эл), ДатаКраснойСтроки, ЦЦ1,,ВалЦены,, ОЦ1);
    глВернутьЦену(ТЗ.ТекРасшифровка, ВыбранныеЦены.ПолучитьЗначение(ИИ,Эл), ДатаКонца, ЦЦ2,,ВалЦены,, ОЦ2);
    Если ЦЦ1<>ЦЦ2 Тогда
    ИмяСекции = "КраснаяСтрока";
    Прервать;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    Если (УсловиеСинейСтроки=1) И (ТЗ.ТекРасшифровка.ЭтоГруппа()=0) Тогда
    Запрос1=СоздатьОбъект("Запрос");
    Ном=ТЗ.ТекРасшифровка;
    ТекстЗапроса=
    "Период С ДатаСинейСтроки ПО ДатаКонца;
    | ОбрабатыватьДокументы Проведенные;
    | Док=ДОкумент.ПоступлениеТМЦ.ТекущийДокумент;
    | Номенклатура=ДОкумент.ПоступлениеТМЦ.Номенклатура;
    | Условие (Номенклатура=Ном);";
    Если Запрос.Выполнить(ТекстЗапроса)=1 Тогда
    ТЗПоступления=СоздатьОбъект("ТаблицаЗначений");
    Запрос.Выгрузить(ТЗПоступления,1,0);
    Если ТЗПоступления.КоличествоСтрок()>0 Тогда
    ТЗПоступления.ВыбратьСтроки();
    Если ТЗПоступления.ПолучитьСтроку()=1 Тогда
    Если ПустоеЗначение(ТЗПоступления.Док)=0 Тогда
    ИмяСекции = "СиняяСтрока";
    КонецЕсли;
    КонецЕсли;

    КонецЕсли;

    КонецЕсли;
    КонецЕсли;

    ТЗ1.ВыбратьСтроки();
    ПОка ТЗ1.ПолучитьСТроку()=1 Цикл
    ПечТекстСтроки = ТЗ1.ПечТекстСтроки;
    ПечЕд = ТЗ1.ПечЕд;
    ТекРасшифровка = ТЗ1.ТекРасшифровка;
    Таб.ВывестиСекцию("СтрокаГ|ТМЦ");
    Для ИИ=1 По ВыбранныеЦены.РазмерСписка() Цикл
    Если ВыбранныеЦены.Пометка(ИИ)=1 Тогда
    Таб.ПрисоединитьСекцию("СтрокаГ|Цена");
    КонецЕсли;
    КонецЦикла;
    Если СкладыВОтдельныхКолонках=1 Тогда
    Сч = 0;
    Для Сч = 1 По СписокСкладов.РазмерСписка() Цикл
    Если (ФлагЗвездочки=1) Тогда
    ПКол=ТЗ1.ПолучитьЗначение(ТЗ1.НомерСтроки, "Количество" + Сч);
    Если (ПКол=0) Тогда
    ПечКол="";
    ИначеЕсли (ПКол>0) И (ПКол<10) Тогда
    ПечКол="*";
    ИначеЕсли (ПКол>=10) И (ПКол<50) Тогда
    ПечКол="**";
    ИначеЕсли (ПКол>=50) И (ПКол<100) Тогда
    ПечКол="***";
    ИначеЕсли (ПКол>=100) Тогда
    ПечКол="****";
    КонецЕсли;
    Иначе
    ПечКол = глФРМКоличество(ТЗ1.ПолучитьЗначение(ТЗ1.НомерСтроки, "Количество" + Сч));
    КонецЕсли;

    Таб.ПрисоединитьСекцию("СтрокаГ|Склад");
    КонецЦикла;
    Иначе
    КолОбщ= 0;
    Для Сч = 1 По СписокСкладов.РазмерСписка() Цикл
    КолОбщ = КолОбщ+(ТЗ1.ПолучитьЗначение(ТЗ1.НомерСтроки, "Количество" + Сч));
    КонецЦикла;
    Если (ФлагЗвездочки=1) Тогда
    ПКол=КолОбщ;
    Если (ПКол=0) Тогда
    ПечКол="";
    ИначеЕсли (ПКол>0) И (ПКол<10) Тогда
    ПечКол="*";
    ИначеЕсли (ПКол>=10) И (ПКол<50) Тогда
    ПечКол="**";
    ИначеЕсли (ПКол>=50) И (ПКол<100) Тогда
    ПечКол="***";
    ИначеЕсли (ПКол>=100) Тогда
    ПечКол="****";
    КонецЕсли;
    Иначе
    ПечКол = глФРМКоличество(КолОбщ);
    КонецЕсли;
    Таб.ПрисоединитьСекцию("СтрокаГ|Склад");
    КонецЕсли;
    Если ВыводитьЗаказанный = 1 Тогда
    Если (ФлагЗвездочки=1) Тогда
    ПКол=ТЗ1.Заказано;
    Попытка
    Если (ПКол=0) Тогда
    ПечЗаказано="";
    ИначеЕсли (ПКол>0) И (ПКол<10) Тогда
    ПечЗаказано="*";
    ИначеЕсли (ПКол>=10) И (ПКол<50) Тогда
    ПечЗаказано="**";
    ИначеЕсли (ПКол>=50) И (ПКол<100) Тогда
    ПечЗаказано="***";
    ИначеЕсли (ПКол>=100) Тогда
    ПечЗаказано="****";
    КонецЕсли;
    Исключение
    ПечЗаказано="";
    КонецПопытки;
    Иначе
    ПечЗаказано = глФРМКоличество(ТЗ1.Заказано);
    КонецЕсли;
    Таб.ПрисоединитьСекцию("СтрокаГ|Заказано");
    КонецЕсли;

    КонецЦикла;
    ТЗ1.УдалитьСтроки();
    ПечТекстСтроки = ТЗ.ПечТекстСтроки;
    ПечЕд = ТЗ.ПечЕд;
    ТекРасшифровка = ТЗ.ТекРасшифровка;
    КонецЕсли;
    Таб.ВывестиСекцию(ИмяСекции+"|ТМЦ");


    Для ИИ=1 По ВыбранныеЦены.РазмерСписка() Цикл
    Если ВыбранныеЦены.Пометка(ИИ)=1 Тогда
    ОЦ1 = 0;
    ЦЦ1 = 0;
    ВалЦены = 0;
    глВернутьЦену(ТЗ.ТекРасшифровка, ВыбранныеЦены.ПолучитьЗначение(ИИ,Эл), ТекущаяДата(), ЦЦ1,,ВалЦены,, ОЦ1);
    ПечЦена=ЦЦ1;
    Таб.ПрисоединитьСекцию(ИмяСекции + "|Цена");
    КонецЕсли;
    КонецЦикла;

    Сч = 0;
    СтрСкл=0;
    Для Сч = 1 По СписокСкладов.РазмерСписка() Цикл
    Если СкладыВОтдельныхКолонках=1 Тогда
    Если (ФлагЗвездочки=1) Тогда
    ПКол=ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч);
    Если (ПКол=0) Тогда
    ПечКол="";
    ИначеЕсли (ПКол>0) И (ПКол<10) Тогда
    ПечКол="*";
    ИначеЕсли (ПКол>=10) И (ПКол<50) Тогда
    ПечКол="**";
    ИначеЕсли (ПКол>=50) И (ПКол<100) Тогда
    ПечКол="***";
    ИначеЕсли (ПКол>=100) Тогда
    ПечКол="****";
    КонецЕсли;
    Иначе
    ПечКол = глФРМКоличество(ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч));
    КонецЕсли;
    Таб.ПрисоединитьСекцию(ИмяСекции + "|Склад");
    Иначе
    СтрСкл = СтрСкл+ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч);
    КонецЕсли;
    КонецЦикла;
    Если СкладыВОтдельныхКолонках=0 Тогда
    Если (ФлагЗвездочки=1) Тогда
    ПКол=СтрСкл;
    Если (ПКол=0) Тогда
    ПечКол="";
    ИначеЕсли (ПКол>0) И (ПКол<10) Тогда
    ПечКол="*";
    ИначеЕсли (ПКол>=10) И (ПКол<50) Тогда
    ПечКол="**";
    ИначеЕсли (ПКол>=50) И (ПКол<100) Тогда
    ПечКол="***";
    ИначеЕсли (ПКол>=100) Тогда
    ПечКол="****";
    КонецЕсли;
    Иначе
    ПечКол = глФРМКоличество(СтрСкл);
    КонецЕсли;
    Таб.ПрисоединитьСекцию(ИмяСекции + "|Склад");
    КонецЕсли;
    Если ВыводитьЗаказанный = 1 Тогда
    Если (ФлагЗвездочки=1) Тогда
    Попытка
    ПКол=ТЗ.Заказано;
    Если (ПКол=0) Тогда
    ПечЗаказано="";
    ИначеЕсли (ПКол>0) И (ПКол<10) Тогда
    ПечЗаказано="*";
    ИначеЕсли (ПКол>=10) И (ПКол<50) Тогда
    ПечЗаказано="**";
    ИначеЕсли (ПКол>=50) И (ПКол<100) Тогда
    ПечЗаказано="***";
    ИначеЕсли (ПКол>=100) Тогда
    ПечЗаказано="****";
    КонецЕсли;
    Исключение
    ПечЗаказано="";
    КонецПопытки;
    Иначе
    ПечЗаказано = глФРМКоличество(ТЗ.Заказано);
    КонецЕсли;
    ДатаЗаказа=ТЗ.ДатаЗаказа;
    СтатДок=ТЗ.СтатДок;
    Таб.ПрисоединитьСекцию(ИмяСекции + "|Заказано");
    КонецЕсли;

    КонецЦикла;

    Таб.ОбластьПечати(3);

    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда
    Таб.Защита(1);
    КонецЕсли;
    Таб.Показать("Остатки ТМЦ", "");

    Если (Обновить = 2) Тогда
    СтрокаДействийФормы = "#Закрыть";
    КонецЕсли;

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



    Процедура ПечатьБланка(ЗакрытьДиалог=0, ВДокумент=0)

    Перем Запрос, ТекстЗапроса;
    Перем СписокИтогов;
    Перем Эл;

    ВалютаЦены = глРубли;

    Если глПроверкаДаты(ДатаКонца,ДатаКонца)=0 Тогда
    Возврат;
    КонецЕсли;

    Если (ТипЗначенияСтр(Таб) <> "Таблица") ИЛИ (Обновить = 0) Тогда
    Таб = СоздатьОбъект("Таблица");
    Иначе
    Таб.Очистить();
    КонецЕсли;

    Таб.ИсходнаяТаблица( "БланкЗаказа" );

    Расшифровка = СоздатьОбъект("СписокЗначений");
    Путь = "";
    ИмяФайла = "";
    РасположениеФайла(Путь,ИмяФайла);
    ФайлОтчета = Путь + ИмяФайла;
    Расшифровка.Установить("Отчет", ?(ПустоеЗначение(ФайлОтчета) = 1,"ОстаткиТМЦ", ФайлОтчета));

    // все настройки помещаем в список
    Расшифровка.Установить("ДатаКонца", ДатаКонца);
    Расшифровка.Установить("ВыбТМЦ", ВыбТМЦ);

    Расшифровка.Установить("ИтогиПоКоличеству", ИтогиПоКоличеству);
    Расшифровка.Установить("ВыводитьЗаказанный",ВыводитьЗаказанный);
    Расшифровка.Установить("ПоказатьОстатки", ПоказатьОстатки.ТекущаяСтрока());

    глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были
    // запомним МФ только если он задан
    Если глМножественныйФильтрЗадан(ТаблицаМФ) = 1 Тогда
    Расшифровка.Установить("ТаблицаМФ", ТаблицаМФ);
    КонецЕсли;

    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = ТекстЗапросаБезКомиссии();

    Если Показатель.ТекущаяСтрока() = 2 Тогда
    ТекстЗапроса = ТекстЗапроса +
    "Функция РезервКонОст = КонОст(Резерв);";
    КонецЕсли;

    ТекстЗапроса = ТекстЗапроса +
    "Группировка Склад Все ВошедшиеВЗапрос;";



    Загол="";

    НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Номенклатура", ВыбТМЦ, "ВыбТМЦ", ТекстЗапроса,Загол,"СвойстваНоменклатуры");

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

    Если Показатель.ТекущаяСтрока()=1 Тогда
    ПечЗаголовок = "Остатки ТМЦ на складах";
    Иначе
    ПечЗаголовок = "Свободные остатки ТМЦ на складах";
    КонецЕсли;
    ПечЗаголовокСтолбца = "";

    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;

    ТЗИтогов=СоздатьОбъект("ТаблицаЗначений");
    ТЗИтоговКомиссия=СоздатьОбъект("ТаблицаЗначений");
    ТЗИтогов2=СоздатьОбъект("ТаблицаЗначений");
    ТЗИтоговКомиссия2=СоздатьОбъект("ТаблицаЗначений");

    //
    Если
    (СебестоимостьНеИзменялась=1)
    Тогда
    // если считаем себестоимость из регистра партии товаров
    ВремРегистры=СоздатьОбъект("Регистры");
    РегПартии=ВремРегистры.ПартииНаличие;
    РегОтданные = ВремРегистры.ПартииОтданные;
    //Если ВидРазделителя = 1 Тогда // Фильтруем по фирме
    // Если ВыбРазделитель1.Выбран() = 1 Тогда
    // РегПартии.УстановитьЗначениеФильтра("Фирма", ВыбРазделитель1);
    // РегОтданные.УстановитьЗначениеФильтра("Фирма", ВыбРазделитель1);
    // КонецЕсли;
    //ИначеЕсли ВидРазделителя = 2 Тогда // Фильтруем по юр. лицу
    // Если ВыбРазделитель2.Выбран() = 1 Тогда
    // СписокФирм = СоздатьОбъект("СписокЗначений");
    // СпрФирм = СоздатьОбъект("Справочник.Фирмы");
    // СпрФирм.ВыбратьЭлементы();
    // Пока СпрФирм.ПолучитьЭлемент() = 1 Цикл
    // Если СпрФирм.ЮрЛицо = ВыбРазделитель2 Тогда
    // СписокФирм.ДобавитьЗначение(СпрФирм.ТекущийЭлемент());
    // КонецЕсли;
    // РегПартии.УстановитьЗначениеФильтра("Фирма", СписокФирм, 2);
    // РегОтданные.УстановитьЗначениеФильтра("Фирма", СписокФирм, 2);
    // КонецЦикла;
    // КонецЕсли;
    //ИначеЕсли ВидРазделителя = 3 Тогда // Фильтруем по упр. аналитике
    // Если ВыбРазделитель3.Выбран() = 1 Тогда
    // СписокФирм = СоздатьОбъект("СписокЗначений");
    // СпрФирм = СоздатьОбъект("Справочник.Фирмы");
    // СпрФирм.ВыбратьЭлементы();
    // Пока СпрФирм.ПолучитьЭлемент() = 1 Цикл
    // Если СпрФирм.УпрАналитика = ВыбРазделитель3 Тогда
    // СписокФирм.ДобавитьЗначение(СпрФирм.ТекущийЭлемент());
    // КонецЕсли;
    // КонецЦикла;
    // РегПартии.УстановитьЗначениеФильтра("Фирма", СписокФирм, 2);
    // РегОтданные.УстановитьЗначениеФильтра("Фирма", СписокФирм, 2);
    // КонецЕсли;
    //КонецЕсли;
    Если (ДатаКонца<ПолучитьДатуТА()) Тогда
    РегПартии.ВременныйРасчет();
    РегОтданные.ВременныйРасчет();
    ВремРегистры.РассчитатьРегистрыПО(ДатаКонца);
    КонецЕсли;

    РегПартии.ВыгрузитьИтоги(ТЗИтогов,0,1);

    ТЗИтогов.Свернуть("Номенклатура","СуммаРуб, СуммаБезНДС, Количество");
    РегОтданные.ВыгрузитьИтоги(ТЗИтоговКомиссия,0,0);
    ТЗИтоговКомиссия.Свернуть("Номенклатура","СуммаРуб, СуммаБезНДС, Количество");
    ТЗИтоговКомиссия.ВыбратьСтроки();
    Пока ТЗИтоговКомиссия.ПолучитьСтроку() = 1 Цикл
    ТЗИтогов.НоваяСтрока();
    ТЗИтогов.Номенклатура = ТЗИтоговКомиссия.Номенклатура;
    ТЗИтогов.Количество = ТЗИтоговКомиссия.Количество;
    ТЗИтогов.СуммаРуб = ТЗИтоговКомиссия.СуммаРуб;
    ТЗИтогов.СуммаБезНДС = ТЗИтоговКомиссия.СуммаБезНДС;
    КонецЦикла;

    ТЗИтогов.Свернуть("Номенклатура","СуммаРуб, СуммаБезНДС, Количество");

    Если СебестоимостьНеИзменялась=1 Тогда
    РегПартии.ВременныйРасчет();
    РегОтданные.ВременныйРасчет();
    ВремРегистры.РассчитатьРегистрыПО(ДатаCCНеИзменялась);
    РегПартии.ВыгрузитьИтоги(ТЗИтогов2,0,1);
    ТЗИтогов2.Свернуть("Номенклатура","СуммаРуб, СуммаБезНДС, Количество");
    РегОтданные.ВыгрузитьИтоги(ТЗИтоговКомиссия2,0,0);
    ТЗИтоговКомиссия2.Свернуть("Номенклатура","СуммаРуб, СуммаБезНДС, Количество");
    ТЗИтоговКомиссия2.ВыбратьСтроки();
    Пока ТЗИтоговКомиссия2.ПолучитьСтроку() = 1 Цикл
    ТЗИтогов2.НоваяСтрока();
    ТЗИтогов2.Номенклатура = ТЗИтоговКомиссия2.Номенклатура;
    ТЗИтогов2.Количество = ТЗИтоговКомиссия2.Количество;
    ТЗИтогов2.СуммаРуб = ТЗИтоговКомиссия2.СуммаРуб;
    ТЗИтогов2.СуммаБезНДС = ТЗИтоговКомиссия2.СуммаБезНДС;
    КонецЦикла;

    ТЗИтогов2.Свернуть("Номенклатура","СуммаРуб, СуммаБезНДС, Количество");

    КонецЕсли;
    КонецЕсли;



    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("ПечТекстСтроки", "Строка");
    ТЗ.НоваяКолонка("ПечЕд", "Справочник.Единицы");
    ТЗ.НоваяКолонка("Уровень", "Число");
    ТЗ.НоваяКолонка("ТекРасшифровка", "Справочник.Номенклатура");
    ТЗ.НоваяКолонка("Родитель", "Справочник.Номенклатура");

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

    // сформируем список складов.
    ФлагВозврата = 0;
    СписокСкладов = СоздатьОбъект("СписокЗначений");
    ЕЕ=1;
    Для ИИ=1 По ВыбранныеСклады.РазмерСписка() Цикл
    Если ВыбранныеСклады.Пометка(ИИ)=1 Тогда
    СписокСкладов.ДобавитьЗначение(ВыбранныеСклады.ПолучитьЗначение(ИИ,Эл));
    ТЗ.НоваяКолонка("Количество"+ЕЕ, "Число");
    ЕЕ=ЕЕ+1;
    КонецЕсли;
    КонецЦикла;

    //Пока (Запрос.Группировка("Номенклатура") = 1) и (ФлагВозврата <> 1) Цикл
    // Если Запрос.ЭтоГруппа("Номенклатура")=1 Тогда
    // Продолжить;
    // КонецЕсли;
    // ДобавитьСклады(Запрос, ФлагВозврата, СписокСкладов);
    //КонецЦикла;

    глЧислоСтрок = 0;

    Таб.ВывестиСекцию("Шапка");
    Таб.ВывестиСекцию("ШапкаТаблицы|ТМЦ");


    // выводим шапку на каждой странице
    НачПовт = Таб.ВысотаСекции("Кнопки") + Таб.ВысотаСекции("Шапка");
    КонПовт = НачПовт + Таб.ВысотаСекции("ШапкаТаблицы");
    Таб.ПовторятьПриПечатиСтроки(НачПовт + 1, КонПовт);

    Для ИИ=1 По ВыбранныеЦены.РазмерСписка() Цикл
    Если ВыбранныеЦены.Пометка(ИИ)=1 Тогда
    СтрокаЦены=""+ВыбранныеЦены.ПолучитьЗначение(ИИ,Эл)+"("+ВыбранныеЦены.ПолучитьЗначение(ИИ,Эл).Валюта+")";
    Таб.ПрисоединитьСекцию("ШапкаТаблицы|Цена");
    КонецЕсли;
    КонецЦикла;

    Если СкладыВОтдельныхКолонках=1 Тогда
    Для Сч =1 По СписокСкладов.РазмерСписка() Цикл
    ПечСклад = СписокСкладов.ПолучитьЗначение(Сч);
    Таб.ПрисоединитьСекцию("ШапкаТаблицы|Склад");
    КонецЦикла;
    Иначе
    ПечСклад = "Остаток";
    Таб.ПрисоединитьСекцию("ШапкаТаблицы|Склад");
    КонецЕсли;

    Если ВыводитьЗаказанный = 1 Тогда
    Таб.ПрисоединитьСекцию("ШапкаТаблицы|Заказано");
    КонецЕсли;
    Таб.ПрисоединитьСекцию("ШапкаТаблицы|Заказ");
    глОживить(1);

    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 3, "ОстаткиТМЦ", "ОстаткиТМЦ");

    СписокГрупп = СоздатьОбъект("СписокЗначений");
    Запрос.ВНачалоВыборки();
    Пока (Запрос.Группировка("Номенклатура") = 1) Цикл
    ТМЦ = Запрос.Номенклатура;

    Если Показатель.ТекущаяСтрока()=1 Тогда
    ПоказательАнализа = Запрос.КоличествоКонОст;
    Иначе
    ПоказательАнализа = Запрос.КоличествоКонОст - Запрос.РезервКонОст;
    КонецЕсли;


    // проверим условие
    Если ПоказатьОстатки.ТекущаяСтрока()=1 Тогда // все ненулевые
    // выводим все
    Если ПоказательАнализа = 0 Тогда
    Продолжить;
    КонецЕсли;

    ИначеЕсли ПоказатьОстатки.ТекущаяСтрока()=2 Тогда // все
    // выводим все

    ИначеЕсли ПоказатьОстатки.ТекущаяСтрока()=3 Тогда // все отрицательные
    Если ПоказательАнализа >= 0 Тогда // проверим
    Продолжить;
    КонецЕсли;

    ИначеЕсли ПоказатьОстатки.ТекущаяСтрока()=4 Тогда // меньше мин. остатка
    Если ПоказательАнализа >= ТМЦ.МинОстаток Тогда
    Продолжить;
    КонецЕсли;

    ИначеЕсли ПоказатьОстатки.ТекущаяСтрока()=5 Тогда // все, имеющиеся в наличи
    Если ПоказательАнализа <= 0 Тогда
    Продолжить;
    КонецЕсли;

    КонецЕсли;

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

    // выводим группы ТМЦ
    Пока СписокГрупп.РазмерСписка()>0 Цикл
    Группа = СписокГрупп.ПолучитьЗначение(1);
    Если ТМЦ.ПринадлежитГруппе(Группа)=1 Тогда
    ТЗ.НоваяСтрока();
    ТЗ.Уровень = СписокГрупп.РазмерСписка();
    ТЗ.ПечТекстСтроки = Группа.Наименование;
    ТЗ.Родитель = Группа.Родитель;
    ТЗ.ТекРасшифровка = Группа;
    КонецЕсли;
    СписокГрупп.УдалитьЗначение(1);
    КонецЦикла;

    ТМЦСтрока = "" + ТМЦ +?(ПечататьКомментарий=1," "+ТМЦ.Комментарий,"");//+ ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(ТМЦ.Артикул), "");

    ТЗ.НоваяСтрока();
    ТЗ.Уровень = 0;
    ТЗ.ТекРасшифровка = ТМЦ;
    ТЗ.Родитель = ТМЦ.Родитель;
    ТЗ.ПечЕд = ТМЦ.БазоваяЕдиница;
    ТЗ.ПечТекстСтроки = ТМЦСтрока;// + ?(ТМЦ.МинОстаток=0,"",", мин. остаток = "+СокрЛП(глФРМКоличество(ТМЦ.МинОстаток,ТЗ.ПечЕд)));
    Если ВыводитьЗаказанный = 1 Тогда
    ТЗ.Заказано = Запрос.ЗаказаноКонОст;
    ТЗ.ДатаЗаказа = Запрос.ДатаЗаказа;
    ТЗ.СтатДок = Запрос.СтатДок;
    КонецЕсли;
    ЗаполнитьСтроку(ТЗ, Запрос, СписокСкладов, 0);
    глОживить(1);

    КонецЦикла;

    // Последняя строка для общих итогов
    ТЗ.НоваяСтрока();
    ТЗ.Уровень = 12;
    ТЗ1=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.Выгрузить(ТЗ1);
    ТЗ1.УдалитьСтроки();
    РассчитатьИтогиПоГруппам(СписокСкладов);

    ТЗ.ВыбратьСтроки();
    СЗ=СоздатьОбъект("СписокЗначений");
    ПредУровень=12;
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл
    Если ТЗ.Родитель.Выбран()=0 Тогда
    ТЗ1.УдалитьСтроки();
    КонецЕсли;
    Если (ПредУровень=0) И (ТЗ.Уровень>0) Тогда
    Для ИИ=1 По ТЗ.Уровень Цикл
    Если (ТЗ1.КоличествоСтрок()>0) Тогда
    ТЗ1.УдалитьСтроку(ТЗ1.КоличествоСтрок());
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    ПредУровень=ТЗ.Уровень;
    //Проверка на изменение себестоимости
    Если (СебестоимостьНеИзменялась=1) И (ТЗ.ТекРасшифровка.ЭтоГруппа()=0) Тогда
    ЦЦ1=0;
    ЦЦ2=0;
    НомСтр="";
    Если ТЗИтогов.НайтиЗначение(ТЗ.ТекРасшифровка,НомСтр,"Номенклатура")=1 Тогда
    ТЗИтогов.ПолучитьСтрокуПоНомеру(НомСтр);
    КолТовара = ТЗИтогов.Количество;
    ЦЦ1 = ?(КолТовара=0,0,ТЗИтогов.СуммаБезНДС/КолТовара);
    КонецЕсли;
    НомСтр="";
    Если ТЗИтогов2.НайтиЗначение(ТЗ.ТекРасшифровка,НомСтр,"Номенклатура")=1 Тогда
    ТЗИтогов2.ПолучитьСтрокуПоНомеру(НомСтр);
    КолТовара = ТЗИтогов2.Количество;
    ЦЦ2 = ?(КолТовара=0,0,ТЗИтогов2.СуммаБезНДС/КолТовара);
    КонецЕсли;

    Если Окр(ЦЦ1,2)=Окр(ЦЦ2,2) Тогда
    Продолжить;
    КонецЕсли;
    КонецЕсли;
    //Проверка на изменение любого типа цен
    Если (ЦенаНеИзменялась=1) И (ТЗ.ТекРасшифровка.ЭтоГруппа()=0) Тогда
    ФлагВыхода=0;
    Для ИИ=1 По ВыбранныеЦены.РазмерСписка() Цикл
    Если ВыбранныеЦены.Пометка(ИИ)=1 Тогда
    ОЦ1 = 0;
    ЦЦ1 = 0;
    ОЦ2 = 0;
    ЦЦ2 = 0;
    ВалЦены = 0;
    глВернутьЦену(ТЗ.ТекРасшифровка, ВыбранныеЦены.ПолучитьЗначение(ИИ,Эл), ДатаЦенаНеИзменялась, ЦЦ1,,ВалЦены,, ОЦ1);
    глВернутьЦену(ТЗ.ТекРасшифровка, ВыбранныеЦены.ПолучитьЗначение(ИИ,Эл), ДатаКонца, ЦЦ2,,ВалЦены,, ОЦ2);
    Если ЦЦ1=ЦЦ2 Тогда
    ФлагВыхода=1;
    Прервать;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    Если ФлагВыхода=1 Тогда
    Продолжить;
    КонецЕсли;
    КонецЕсли;

    ПечТекстСтроки = ТЗ.ПечТекстСтроки;
    ПечКод = ТЗ.ТекРасшифровка.Код;
    ПечЕд = ТЗ.ПечЕд;
    ТекРасшифровка = ТЗ.ТекРасшифровка;
    Если (ТЗ.Уровень > 0) И (ТЗ.Уровень < 12) Тогда
    ТЗ1.НоваяСтрока();
    ТЗ1.ПечЕд=ТЗ.ПечЕд;
    ТЗ1.ТекРасшифровка=ТЗ.ТекРасшифровка;
    ТЗ1.ПечТекстСтроки=ТЗ.ПечТекстСтроки;
    ТЗ1.Родитель=ТЗ.Родитель;
    ТЗ1.Уровень=ТЗ.Уровень;
    Продолжить;
    ИмяСекции = "СтрокаГ";
    ИначеЕсли ТЗ.Уровень = 12 Тогда
    ИмяСекции = "ПодвалИтого";
    Иначе
    ИмяСекции = "Строка";
    Если ПоказатьОстатки.ТекущаяСтрока()=1 Тогда
    КолОбщ= 0;
    Для Сч = 1 По СписокСкладов.РазмерСписка() Цикл
    КолОбщ = КолОбщ+(ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч));
    КонецЦикла;
    Если КолОбщ=0 Тогда
    Продолжить;
    КонецЕсли;

    КонецЕсли;
    Если (УсловиеКраснойСтроки=1) И (ТЗ.ТекРасшифровка.ЭтоГруппа()=0) Тогда
    Для ИИ=1 По ВыбранныеЦены.РазмерСписка() Цикл
    Если ВыбранныеЦены.Пометка(ИИ)=1 Тогда
    ОЦ1 = 0;
    ЦЦ1 = 0;
    ОЦ2 = 0;
    ЦЦ2 = 0;
    ВалЦены = 0;
    глВернутьЦену(ТЗ.ТекРасшифровка, ВыбранныеЦены.ПолучитьЗначение(ИИ,Эл), ДатаКраснойСтроки, ЦЦ1,,ВалЦены,, ОЦ1);
    глВернутьЦену(ТЗ.ТекРасшифровка, ВыбранныеЦены.ПолучитьЗначение(ИИ,Эл), ДатаКонца, ЦЦ2,,ВалЦены,, ОЦ2);
    Если ЦЦ1<>ЦЦ2 Тогда
    ИмяСекции = "КраснаяСтрока";
    Прервать;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    Если (УсловиеСинейСтроки=1) И (ТЗ.ТекРасшифровка.ЭтоГруппа()=0) Тогда
    Запрос1=СоздатьОбъект("Запрос");
    Ном=ТЗ.ТекРасшифровка;
    ТекстЗапроса=
    "Период С ДатаСинейСтроки ПО ДатаКонца;
    | ОбрабатыватьДокументы Проведенные;
    | Док=ДОкумент.ПоступлениеТМЦ.ТекущийДокумент;
    | Номенклатура=ДОкумент.ПоступлениеТМЦ.Номенклатура;
    | Условие (Номенклатура=Ном);";
    Если Запрос.Выполнить(ТекстЗапроса)=1 Тогда
    ТЗПоступления=СоздатьОбъект("ТаблицаЗначений");
    Запрос.Выгрузить(ТЗПоступления,1,0);
    Если ТЗПоступления.КоличествоСтрок()>0 Тогда
    ТЗПоступления.ВыбратьСтроки();
    Если ТЗПоступления.ПолучитьСтроку()=1 Тогда
    Если ПустоеЗначение(ТЗПоступления.Док)=0 Тогда
    ИмяСекции = "СиняяСтрока";
    КонецЕсли;
    КонецЕсли;

    КонецЕсли;

    КонецЕсли;
    КонецЕсли;

    ТЗ1.ВыбратьСтроки();
    ПОка ТЗ1.ПолучитьСТроку()=1 Цикл
    ПечТекстСтроки = ТЗ1.ПечТекстСтроки;
    ПечЕд = ТЗ1.ПечЕд;
    ТекРасшифровка = ТЗ1.ТекРасшифровка;
    Таб.ВывестиСекцию("СтрокаГ|ТМЦ");
    Для ИИ=1 По ВыбранныеЦены.РазмерСписка() Цикл
    Если ВыбранныеЦены.Пометка(ИИ)=1 Тогда
    Таб.ПрисоединитьСекцию("СтрокаГ|Цена");
    КонецЕсли;
    КонецЦикла;

    Если СкладыВОтдельныхКолонках=1 Тогда
    Сч = 0;
    Для Сч = 1 По СписокСкладов.РазмерСписка() Цикл
    Если (ФлагЗвездочки=1) Тогда
    ПКол=ТЗ1.ПолучитьЗначение(ТЗ1.НомерСтроки, "Количество" + Сч);
    Если (ПКол=0) Тогда
    ПечКол="";
    ИначеЕсли (ПКол>0) И (ПКол<10) Тогда
    ПечКол="*";
    ИначеЕсли (ПКол>=10) И (ПКол<50) Тогда
    ПечКол="**";
    ИначеЕсли (ПКол>=50) И (ПКол<100) Тогда
    ПечКол="***";
    ИначеЕсли (ПКол>=100) Тогда
    ПечКол="****";
    КонецЕсли;
    Иначе
    ПечКол = глФРМКоличество(ТЗ1.ПолучитьЗначение(ТЗ1.НомерСтроки, "Количество" + Сч));
    КонецЕсли;
    Таб.ПрисоединитьСекцию("СтрокаГ|Склад");
    КонецЦикла;
    Иначе
    КолОбщ= 0;
    Для Сч = 1 По СписокСкладов.РазмерСписка() Цикл
    КолОбщ = КолОбщ+(ТЗ1.ПолучитьЗначение(ТЗ1.НомерСтроки, "Количество" + Сч));
    КонецЦикла;
    Если (ФлагЗвездочки=1) Тогда
    ПКол=КолОбщ;
    Если (ПКол=0) Тогда
    ПечКол="";
    ИначеЕсли (ПКол>0) И (ПКол<10) Тогда
    ПечКол="*";
    ИначеЕсли (ПКол>=10) И (ПКол<50) Тогда
    ПечКол="**";
    ИначеЕсли (ПКол>=50) И (ПКол<100) Тогда
    ПечКол="***";
    ИначеЕсли (ПКол>=100) Тогда
    ПечКол="****";
    КонецЕсли;
    Иначе
    ПечКол = глФРМКоличество(КолОбщ);
    КонецЕсли;
    Таб.ПрисоединитьСекцию("СтрокаГ|Склад");
    КонецЕсли;
    Если ВыводитьЗаказанный = 1 Тогда
    Если (ФлагЗвездочки=1) Тогда
    ПКол=ТЗ1.Заказано;
    Попытка
    Если (ПКол=0) Тогда
    ПечЗаказано="";
    ИначеЕсли (ПКол>0) И (ПКол<10) Тогда
    ПечЗаказано="*";
    ИначеЕсли (ПКол>=10) И (ПКол<50) Тогда
    ПечЗаказано="**";
    ИначеЕсли (ПКол>=50) И (ПКол<100) Тогда
    ПечЗаказано="***";
    ИначеЕсли (ПКол>=100) Тогда
    ПечЗаказано="****";
    КонецЕсли;
    Исключение
    ПечЗаказано="";
    КонецПопытки;
    Иначе
    ПечЗаказано = глФРМКоличество(ТЗ1.Заказано);
    КонецЕсли;
    Таб.ПрисоединитьСекцию("СтрокаГ|Заказано");
    КонецЕсли;
    Таб.ПрисоединитьСекцию("СтрокаГ|Заказ");
    КонецЦикла;
    ТЗ1.УдалитьСтроки();
    ПечТекстСтроки = ТЗ.ПечТекстСтроки;
    ПечЕд = ТЗ.ПечЕд;
    ТекРасшифровка = ТЗ.ТекРасшифровка;
    КонецЕсли;
    Таб.ВывестиСекцию(ИмяСекции+"|ТМЦ");


    Для ИИ=1 По ВыбранныеЦены.РазмерСписка() Цикл
    Если ВыбранныеЦены.Пометка(ИИ)=1 Тогда
    ОЦ1 = 0;
    ЦЦ1 = 0;
    ВалЦены = 0;
    глВернутьЦену(ТЗ.ТекРасшифровка, ВыбранныеЦены.ПолучитьЗначение(ИИ,Эл), ТекущаяДата(), ЦЦ1,,ВалЦены,, ОЦ1);
    ПечЦена=ЦЦ1;
    Таб.ПрисоединитьСекцию(ИмяСекции + "|Цена");
    КонецЕсли;
    КонецЦикла;

    Сч = 0;
    СтрСкл=0;
    Для Сч = 1 По СписокСкладов.РазмерСписка() Цикл
    Если СкладыВОтдельныхКолонках=1 Тогда
    Если (ФлагЗвездочки=1) Тогда
    ПКол=ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч);
    Если (ПКол=0) Тогда
    ПечКол="";
    ИначеЕсли (ПКол>0) И (ПКол<10) Тогда
    ПечКол="*";
    ИначеЕсли (ПКол>=10) И (ПКол<50) Тогда
    ПечКол="**";
    ИначеЕсли (ПКол>=50) И (ПКол<100) Тогда
    ПечКол="***";
    ИначеЕсли (ПКол>=100) Тогда
    ПечКол="****";
    КонецЕсли;
    Иначе
    ПечКол = глФРМКоличество(ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч));
    КонецЕсли;
    Таб.ПрисоединитьСекцию(ИмяСекции + "|Склад");
    Иначе
    СтрСкл = СтрСкл+ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч);
    КонецЕсли;
    КонецЦикла;
    Если СкладыВОтдельныхКолонках=0 Тогда
    Если (ФлагЗвездочки=1) Тогда
    ПКол=СтрСкл;
    Если (ПКол=0) Тогда
    ПечКол="";
    ИначеЕсли (ПКол>0) И (ПКол<10) Тогда
    ПечКол="*";
    ИначеЕсли (ПКол>=10) И (ПКол<50) Тогда
    ПечКол="**";
    ИначеЕсли (ПКол>=50) И (ПКол<100) Тогда
    ПечКол="***";
    ИначеЕсли (ПКол>=100) Тогда
    ПечКол="****";
    КонецЕсли;
    Иначе
    ПечКол = глФРМКоличество(СтрСкл);
    КонецЕсли;
    Таб.ПрисоединитьСекцию(ИмяСекции + "|Склад");
    КонецЕсли;
    Если ВыводитьЗаказанный = 1 Тогда
    Если (ФлагЗвездочки=1) Тогда
    Попытка
    ПКол=ТЗ.Заказано;
    Если (ПКол=0) Тогда
    ПечЗаказано="";
    ИначеЕсли (ПКол>0) И (ПКол<10) Тогда
    ПечЗаказано="*";
    ИначеЕсли (ПКол>=10) И (ПКол<50) Тогда
    ПечЗаказано="**";
    ИначеЕсли (ПКол>=50) И (ПКол<100) Тогда
    ПечЗаказано="***";
    ИначеЕсли (ПКол>=100) Тогда
    ПечЗаказано="****";
    КонецЕсли;
    Исключение
    ПечЗаказано="";
    КонецПопытки;
    Иначе
    ПечЗаказано = глФРМКоличество(ТЗ.Заказано);
    КонецЕсли;
    ДатаЗаказа=ТЗ.ДатаЗаказа;
    СтатДок=ТЗ.СтатДок;
    Таб.ПрисоединитьСекцию(ИмяСекции + "|Заказано");
    КонецЕсли;
    Таб.ПрисоединитьСекцию(ИмяСекции + "|Заказ");
    КонецЦикла;

    Таб.ОбластьПечати(3);

    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда
    Таб.Защита(1);
    КонецЕсли;
    Таб.Показать("Остатки ТМЦ", "");

    Если (Обновить = 2) Тогда
    СтрокаДействийФормы = "#Закрыть";
    КонецЕсли;

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

    ////////////////////////////////////////////////////////////////////////////////
    // ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ
    //
    //******************************************************************************
    // Предопределенная процедура
    Процедура ПриОткрытии(ФлагВосстановленияНастройки)

    // тип вид переменная название
    глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Номенклатура", "Номенклатура", "По номенклатуре");
    глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Склады", "Склад", "По складам");
    глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","ЗначенияСвойств", "Номенклатура", "По свойствам номенклатуры");
    глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Фирмы", "Фирма", "По фирмам");
    глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","СвоиЮрЛица", "ЮрЛицо", "По юр. лицам");
    глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","УпрАналитика", "УпрАналитика", "По упр. аналитике");

    Если ФлагВосстановленияНастройки = 0 Тогда

    ВидЕдиницы = 1;
    ВидРазделителя = 1;

    КонецЕсли;

    Если (ТипЗначенияСтр(Форма.Параметр) = "СписокЗначений") и (глОбновить = 0) Тогда
    глРасшифровка = Форма.Параметр;
    ВызовИзДокумента = 1;
    Форма.кнОк. Доступность(0);
    Форма.кнСформировать. Заголовок("Просмотр");
    КонецЕсли;

    Если (глФлагРасшифровки = 1) или (ВызовИзДокумента = 1) Тогда
    Обновить = глОбновить;

    // восстанавливаем настройки из списка
    ДатаКонца = глРасшифровка.Получить("ДатаКонца");
    ВыбТМЦ = глРасшифровка.Получить("ВыбТМЦ");

    ВалютаДокумента = глРасшифровка.Получить("ВалютаДокумента");
    КурсДокумента = глРасшифровка.Получить("КурсДокумента");
    КратностьДокумента = глРасшифровка.Получить("КратностьДокумента");

    ВидЕдиницы = глРасшифровка.Получить("ВидЕдиницы");
    ИтогиПоКоличеству = глРасшифровка.Получить("ИтогиПоКоличеству");

    ПоказатьОстатки.ТекущаяСтрока(глРасшифровка.Получить("ПоказатьОстатки"));
    Показатель. ТекущаяСтрока(глРасшифровка.Получить("Показатель"));
    Если ТипЗначенияСтр(глРасшифровка.Получить("ТаблицаМФ"))="ТаблицаЗначений" Тогда
    ТаблицаМФ.Загрузить(глРасшифровка.Получить("ТаблицаМФ"));
    КонецЕсли;

    Если Обновить <> 0 Тогда
    Таб = глТаблица;
    КонецЕсли;

    Если (Обновить <> 2) и (ВызовИзДокумента <> 1) Тогда
    Сформировать();
    СтатусВозврата(0);
    Возврат;
    КонецЕсли;
    Иначе
    Обновить = 0;
    КонецЕсли;

    ПерерисовкаНазванийЗакладок();

    ТаблицаМФ.ВидимостьКолонки("Тип",0);
    ТаблицаМФ.ВидимостьКолонки("Вид",0);
    ТаблицаМФ.ВидимостьКолонки("СписокЭлементов",0);
    ТаблицаМФ.ВидимостьКолонки("ТипМФ",0);
    ТаблицаМФ.ВидимостьКолонки("ИмяПеременной",0);

    ТаблицаМФ.ВыводитьПиктограммы("ФлВкл");

    УправлениеДиалогом();
    СпрСклады=СоздатьОбъект("Справочник.Склады");
    СпрСклады.НайтиПоНаименованию("Основной");
    ВыбранныеСклады.ДобавитьЗначение(СпрСклады.ТекущийЭлемент());
    ВыбранныеСклады.Пометка(1,1);
    СпрСклады.ВыбратьЭлементы();
    Пока СпрСклады.ПолучитьЭлемент()=1 Цикл
    Если ВыбранныеСклады.НайтиЗначение(СпрСклады.ТекущийЭлемент())=0 Тогда
    ВыбранныеСклады.ДобавитьЗначение(СпрСклады.ТекущийЭлемент());
    КонецЕсли;
    КонецЦикла;
    ВыводитьЗаказанный=0;
    СпрСклады=СоздатьОбъект("Справочник.ТипыЦен");
    СпрСклады.ВыбратьЭлементы();
    Пока СпрСклады.ПолучитьЭлемент()=1 Цикл
    Если ВыбранныеЦены.НайтиЗначение(СпрСклады.ТекущийЭлемент())=0 Тогда
    ВыбранныеЦены.ДобавитьЗначение(СпрСклады.ТекущийЭлемент());
    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры // ПриОткрытии()

    //******************************************************************************
    // Предопределенная процедура.
    //
    Процедура ПриЗакрытии()

    // записываем изменения если они были
    глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст);

    КонецПроцедуры // ПриЗакрытии()

    //******************************************************************************
    // Предопределенная процедура.
    Процедура ВводНового()

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

    КонецПроцедуры // ВводНового()

    //******************************************************************************
    // Предопределенная процедура
    //
    Процедура ПриВыбореЗакладки(Номер,Значение)
    // закладки
    Если Номер=1 Тогда
    глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были
    КонецЕсли;
    УправлениеДиалогом();
    ПерерисовкаНазванийЗакладок();

    КонецПроцедуры // ПриВыбореЗакладки

    //******************************************************************************
    // Предопределенная процедура
    //
    Процедура ОбработкаПодбора(Значение)

    Если (СписокЭлементовМФ.НайтиЗначение(Значение)=0) Тогда
    Представление=""+Значение;
    Если ТипЗначенияСтр(Значение)="Справочник" Тогда
    Если СокрЛП(Метаданные.Справочник(Значение.Вид()).Владелец) <> "Метаданные" Тогда
    Представление=Представление+" ("+Значение.Владелец+")";
    КонецЕсли;
    КонецЕсли;
    СписокЭлементовМФ.ДобавитьЗначение(Значение,Представление);
    ТаблицаМФ.ФлВкл=2;
    КонецЕсли;

    СписокЭлементовМФ.Выгрузить(ТаблицаМФ.СписокЭлементов);

    КонецПроцедуры // ОбработкаПодбора


    Процедура Установить(Режим = "")

    Для а = 1 По ВыбранныеСклады.РазмерСписка() Цикл
    Если Режим="Все" Тогда
    ВыбранныеСклады.Пометка(а, 1);

    ИначеЕсли Режим="Сброс" Тогда
    ВыбранныеСклады.Пометка(а,0);

    Иначе
    ВыбранныеСклады.Пометка(а,?(ВыбранныеСклады.Пометка(а) = 1, 0, 1));
    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры // Установить()

    Процедура Установить1(Режим = "")

    Для а = 1 По ВыбранныеЦены.РазмерСписка() Цикл
    Если Режим="Все" Тогда
    ВыбранныеЦены.Пометка(а, 1);

    ИначеЕсли Режим="Сброс" Тогда
    ВыбранныеЦены.Пометка(а,0);

    Иначе
    ВыбранныеЦены.Пометка(а,?(ВыбранныеЦены.Пометка(а) = 1, 0, 1));
    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры // Установить()



    ////////////////////////////////////////////////////////////////////////////////
    // ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
    //
    ДатаКонца=ПолучитьДатуТА();

    ПоказатьОстатки.УдалитьВсе();
    ПоказатьОстатки.ДобавитьЗначение("все ненулевые");
    ПоказатьОстатки.ДобавитьЗначение("все");
    ПоказатьОстатки.ДобавитьЗначение("все отрицательные");
    ПоказатьОстатки.ДобавитьЗначение("меньше мин. остатка");
    ПоказатьОстатки.ДобавитьЗначение("все, имеющиеся в наличии");
    ПоказатьОстатки.ТекущаяСтрока(1);

    Показатель.УдалитьВсе();
    Показатель.ДобавитьЗначение("включая резерв");
    Показатель.ДобавитьЗначение("за минусом резервов");
    Показатель.ТекущаяСтрока(1);

    // инициализация переменных множественного фильтра
    ТипМФ.УдалитьВсе();
    ТипМФ.ДобавитьЗначение("одно из");
    ТипМФ.ДобавитьЗначение("все кроме");

    ТаблицаМФ.УдалитьСтроки();
    Пока ТаблицаМФ.КоличествоКолонок()>0 Цикл
    ТаблицаМФ.УдалитьКолонку(1);
    КонецЦикла;

    ТаблицаМФ.НоваяКолонка("Тип");
    ТаблицаМФ.НоваяКолонка("Вид");
    ТаблицаМФ.НоваяКолонка("ИмяПеременной");
    ТаблицаМФ.НоваяКолонка("СписокЭлементов"); // список элементов, по которым производим фильтрацию
    ТаблицаМФ.НоваяКолонка("ТипМФ"); // текущая строка списка ТипМФ
    ТаблицаМФ.НоваяКолонка("ФлВкл","Число",1,,"Вкл",5,,); // фильтр включен ("1" или "0")
    ТаблицаМФ.НоваяКолонка("Представление",,,,"Вид фильтра:");
    ТаблицаМФ.ВыводитьПиктограммы("ФлВкл");

    ТекСтрокаВТаблице="";

    // Инициализируем закладки
    Форма.ИспользоватьЗакладки(1);
    Форма.Закладки.ДобавитьЗначение(1,"Основная");
    Форма.Закладки.ДобавитьЗначение(2,"Множественный фильтр");
    Форма.Закладки.ТекущаяСтрока(1);


    МаксимальныйУровень = 1;
     
  7. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    :eek: Если я правильно понимаю, это для нас с Vbs. Чтобы от скуки не маялись.
     
  8. Vladal

    Vladal Active Member

    Регистрация:
    26 май 2012
    Сообщения:
    25
    Симпатии:
    0
    Макет нужен еще, макет!
     
  9. Vladal

    Vladal Active Member

    Регистрация:
    26 май 2012
    Сообщения:
    25
    Симпатии:
    0
    маленький совет - картинки лучше слать в PNG, ну или JPEG
     
  10. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    1. Дайнеко, как всегда прав
    2. Сравнимый по объему текст я читал лет 30 назад. Но то хоть была "Сага о Форсайтах", а это из принципа просмотрел по диагонали
    3. Типовой конфигурацию счесть никак не могу. Смущает СтатусДокумента, в этом направлении и предлагаю пошаманить
     
  11. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    А я не читал Сагу о Форсайтах, поэтому не собираюсь читать модуль этого отчета, пока не прочту!
     
  12. Ivanushka

    Ivanushka Гость

    Функция ТекстЗапросаБезКомиссии()

    СтрПериод = ?(ДатаКонца>= ПолучитьДатуТА(),"",
    "Период с ДатаКонца по ДатаКонца;");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |" + СтрПериод +
    "
    |Фирма = Регистр.ОстаткиТМЦ.Фирма,
    | Регистр.РезервыТМЦ.Фирма;
    |УпрАналитика = Регистр.ОстаткиТМЦ.Фирма.УпрАналитика,
    | Регистр.РезервыТМЦ.Фирма.УпрАналитика;
    |ЮрЛицо = Регистр.ОстаткиТМЦ.Фирма.ЮрЛицо,
    | Регистр.РезервыТМЦ.Фирма.ЮрЛицо;
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура,
    | Регистр.Заказы.Номенклатура,
    | Регистр.РезервыТМЦ.Номенклатура;
    |Склад = Регистр.ОстаткиТМЦ.Склад,
    | Регистр.РезервыТМЦ.Склад;
    |РозничныйСклад = Регистр.ОстаткиТМЦ.Склад.РозничныйСклад,
    | Регистр.РезервыТМЦ.Склад.РозничныйСклад;";

    Если ВыводитьЗаказанный = 1 Тогда
    ТекстЗапроса = ТекстЗапроса +
    "Заказано = Регистр.Заказы.КоличествоПриход;
    |ДатаЗаказа = Регистр.Заказы.ЗаказПоставщику.ДатаДок;
    |СтатДок = Регистр.Заказы.ЗаказПоставщику.СтатусДокумента1;
    |Функция ЗаказаноКонОст = КонОст(Заказано);";
    КонецЕсли;

    ТекстЗапроса = ТекстЗапроса +
    "Количество = Регистр.ОстаткиТМЦ.Количество;
    |Резерв = Регистр.РезервыТМЦ.Количество;
    |Функция КоличествоКонОст = КонОст(Количество);
    |Группировка Номенклатура"+?(ПоказатьОстатки.ТекущаяСтрока()>=2," Все","")+";";

    Возврат ТекстЗапроса;

    КонецФункции // ТекстЗапросаБезКомиссии()

    ....

    Если ВыводитьЗаказанный = 1 Тогда
    ТЗ.НоваяКолонка("Заказано", "Число");
    ТЗ.НоваяКолонка("ДатаЗаказа", "Дата");
    ТЗ.НоваяКолонка("СтатДок", "Значение");
    КонецЕсли;


    ...

    Если ВыводитьЗаказанный = 1 Тогда
    Таб.ПрисоединитьСекцию("ШапкаТаблицы|Заказано");
    КонецЕсли;
    ...
    Если ВыводитьЗаказанный = 1 Тогда
    ТЗ.Заказано = Запрос.ЗаказаноКонОст;
    ТЗ.ДатаЗаказа = Запрос.ДатаЗаказа;
    ТЗ.СтатДок = Запрос.СтатДок;
    КонецЕсли;
    ...

    Если ВыводитьЗаказанный = 1 Тогда
    Если (ФлагЗвездочки=1) Тогда
    ПКол=ТЗ1.Заказано;
    Попытка
    Если (ПКол=0) Тогда
    ПечЗаказано="";
    ИначеЕсли (ПКол>0) И (ПКол<10) Тогда
    ПечЗаказано="*";
    ИначеЕсли (ПКол>=10) И (ПКол<50) Тогда
    ПечЗаказано="**";
    ИначеЕсли (ПКол>=50) И (ПКол<100) Тогда
    ПечЗаказано="***";
    ИначеЕсли (ПКол>=100) Тогда
    ПечЗаказано="****";
    КонецЕсли;
    Исключение
    ПечЗаказано="";
    КонецПопытки;
    Иначе
    ПечЗаказано = глФРМКоличество(ТЗ1.Заказано);
    КонецЕсли;
    Таб.ПрисоединитьСекцию("СтрокаГ|Заказано");
    КонецЕсли;
    ....


    Если ВыводитьЗаказанный = 1 Тогда
    Если (ФлагЗвездочки=1) Тогда
    Попытка
    ПКол=ТЗ.Заказано;
    Если (ПКол=0) Тогда
    ПечЗаказано="";
    ИначеЕсли (ПКол>0) И (ПКол<10) Тогда
    ПечЗаказано="*";
    ИначеЕсли (ПКол>=10) И (ПКол<50) Тогда
    ПечЗаказано="**";
    ИначеЕсли (ПКол>=50) И (ПКол<100) Тогда
    ПечЗаказано="***";
    ИначеЕсли (ПКол>=100) Тогда
    ПечЗаказано="****";
    КонецЕсли;
    Исключение
    ПечЗаказано="";
    КонецПопытки;
    Иначе
    ПечЗаказано = глФРМКоличество(ТЗ.Заказано);
    КонецЕсли;
    ДатаЗаказа=ТЗ.ДатаЗаказа;
    СтатДок=ТЗ.СтатДок;
    Таб.ПрисоединитьСекцию(ИмяСекции + "|Заказано");
    КонецЕсли;
     
  13. Ivanushka

    Ivanushka Гость

    Функция ТекстЗапросаБезКомиссии()

    СтрПериод = ?(ДатаКонца>= ПолучитьДатуТА(),"",
    "Период с ДатаКонца по ДатаКонца;");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |" + СтрПериод +
    "
    |Фирма = Регистр.ОстаткиТМЦ.Фирма,
    | Регистр.РезервыТМЦ.Фирма;
    |УпрАналитика = Регистр.ОстаткиТМЦ.Фирма.УпрАналитика,
    | Регистр.РезервыТМЦ.Фирма.УпрАналитика;
    |ЮрЛицо = Регистр.ОстаткиТМЦ.Фирма.ЮрЛицо,
    | Регистр.РезервыТМЦ.Фирма.ЮрЛицо;
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура,
    | Регистр.Заказы.Номенклатура,
    | Регистр.РезервыТМЦ.Номенклатура;
    |Склад = Регистр.ОстаткиТМЦ.Склад,
    | Регистр.РезервыТМЦ.Склад;
    |РозничныйСклад = Регистр.ОстаткиТМЦ.Склад.РозничныйСклад,
    | Регистр.РезервыТМЦ.Склад.РозничныйСклад;";

    Если ВыводитьЗаказанный = 1 Тогда
    ТекстЗапроса = ТекстЗапроса +
    "Заказано = Регистр.Заказы.КоличествоПриход;
    |ДатаЗаказа = Регистр.Заказы.ЗаказПоставщику.ДатаДок;
    |СтатДок = Регистр.Заказы.ЗаказПоставщику.СтатусДокумента1;
    |Функция ЗаказаноКонОст = КонОст(Заказано);";
    КонецЕсли;

    ТекстЗапроса = ТекстЗапроса +
    "Количество = Регистр.ОстаткиТМЦ.Количество;
    |Резерв = Регистр.РезервыТМЦ.Количество;
    |Функция КоличествоКонОст = КонОст(Количество);
    |Группировка Номенклатура"+?(ПоказатьОстатки.ТекущаяСтрока()>=2," Все","")+";";

    Возврат ТекстЗапроса;

    КонецФункции // ТекстЗапросаБезКомиссии()


    ....


    // выводим группы ТМЦ
    Пока СписокГрупп.РазмерСписка()>0 Цикл
    Группа = СписокГрупп.ПолучитьЗначение(1);
    Если ТМЦ.ПринадлежитГруппе(Группа)=1 Тогда
    ТЗ.НоваяСтрока();
    ТЗ.Уровень = СписокГрупп.РазмерСписка();
    ТЗ.ПечТекстСтроки = Группа.Наименование;
    ТЗ.Родитель = Группа.Родитель;
    ТЗ.ТекРасшифровка = Группа;
    КонецЕсли;
    СписокГрупп.УдалитьЗначение(1);
    КонецЦикла;

    ТМЦСтрока = "" + ТМЦ +?(ПечататьКомментарий=1," "+ТМЦ.Комментарий,"");//+ ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(ТМЦ.Артикул), "");

    ТЗ.НоваяСтрока();
    ТЗ.Уровень = 0;
    ТЗ.ТекРасшифровка = ТМЦ;
    ТЗ.Родитель = ТМЦ.Родитель;
    ТЗ.ПечЕд = ТМЦ.БазоваяЕдиница;
    ТЗ.ПечТекстСтроки = ТМЦСтрока;// + ?(ТМЦ.МинОстаток=0,"",", мин. остаток = "+СокрЛП(глФРМКоличество(ТМЦ.МинОстаток,ТЗ.ПечЕд)));
    Если ВыводитьЗаказанный = 1 Тогда
    ТЗ.Заказано = Запрос.ЗаказаноКонОст;
    ТЗ.ДатаЗаказа = Запрос.ДатаЗаказа;
    ТЗ.СтатДок = Запрос.СтатДок;
    КонецЕсли;
    ЗаполнитьСтроку(ТЗ, Запрос, СписокСкладов, 0);
    глОживить(1);

    КонецЦикла;





    отчет выводит только одну дату и соответсвенно один статус. какой цикл нужно написать, чтобы выводил все вхождения ТМЦСтрока в документ заказ поставщику и выводил все даты документа
     
  14. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Такой текст я тоже могу читать из большого интереса или за деньги)
     
  15. Ivanushka

    Ivanushka Гость

    что тогда конкретно нужно чтобы вы мне захотели помочь? я не знаю, как реализовать это в 1с 7.7((
     
  16. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Попробуй так :


    Если ВыводитьЗаказанный = 1 Тогда
    ТекстЗапроса = ТекстЗапроса +"
    |Группировка СтатДок;";
    КонецЕсли;
    Синтаксис только проверь
     
  17. Ivanushka

    Ivanushka Гость

    как написать цикл по всем документам, потому что сейчас в отчете берется во внимание только последний документ
     
  18. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Добавить группировку по документу
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей