//////////////////////////////////////////////////////////////////////////////// // ОПИСАНИЕ МОДУЛЬНЫХ ПЕРЕМЕННЫХ // Перем ТекСтрокаВТаблице; // текущая строка в таблице значений МФ // используются для стандартного механизма кнопок "Обновить" и "Настройка" Перем Таб; Перем Обновить; Перем Расшифровка; // Итоги по регистру партий для расчета цен Перем ТЗИтогов; // Представление текущего элемента из списка "ЦенаТовара". Перем ПредставлениеЦены; Перем ТЗВДокумент; Перем ВызовИзДокумента; Перем ДокументИнвентаризация; Перем ВалютаДокумента; Перем КурсДокумента, КратностьДокумента; // Таблица значений для формирования отчета Перем ТЗ; //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ //****************************************************************************** // ВыбратьПоФильтру() // // Параметры: // Нет // // Описание: // Открывает обработку отбора элементов по произвольному фильтру // Процедура ВыбратьПоФильтру() Перем ВидЗначенияПодбора; ВидЗначенияПодбора=СокрЛП(ТаблицаМФ.Вид); Если ПустоеЗначение(ВидЗначенияПодбора)=1 Тогда Возврат; КонецЕсли; СписокПараметров=СоздатьОбъект("СписокЗначений"); СписокПараметров.ДобавитьЗначение("", "ИмяВызвавшейФормы"); СписокПараметров.ДобавитьЗначение(ТаблицаМФ.Тип, "Тип"); СписокПараметров.ДобавитьЗначение(ВидЗначенияПодбора,"Вид"); СписокПараметров.ДобавитьЗначение(СписокЭлементовМФ, "Объекты"); ТаблицаМФ.ФлВкл=2; ОткрытьФорму("Обработка.ПодборОбъектов#",СписокПараметров); КонецПроцедуры // ВыбратьПоФильтру //****************************************************************************** // ПерерисовкаНазванийЗакладок // // Параметры: // Нет // // Описание: // Добавляет "(!)" в заголовок закладки с множественным фильтром, когда этот фильтр задан // Функция ПерерисовкаНазванийЗакладок() Форма.Закладки.УстановитьЗначение(2,?(глМножественныйФильтрЗадан(ТаблицаМФ)=1,"(!) ","")+"Множественный фильтр"); КонецФункции // ПерерисовкаНазванийЗакладок //****************************************************************************** // УправлениеДиалогом() // // Параметры: // Нет // // Возвращаемое значение: // Нет // // Описание: // Управление доступностью элементов диалога. // Процедура УправлениеДиалогом() Если Форма.Закладки.ТекущаяСтрока() = 1 Тогда Форма.ИспользоватьСлой("Шапка,Подвал,Основной1,Основной2,Разделитель"+СокрЛП(ВидРазделителя)); Если ЦенаТовара.ПолучитьЗначение(ЦенаТовара.ТекущаяСтрока()) = "из справочника цен" Тогда Форма.ЦенаИзСправочника.Видимость(1); Иначе Форма.ЦенаИзСправочника.Видимость(0); КонецЕсли; Иначе Форма.ИспользоватьСлой("Шапка,МФ,Подвал"); КонецЕсли; КонецПроцедуры //УправлениеДиалогом() //****************************************************************************** // РасшифровкаОбновить(Обновить) // // Параметры: // Обновить = 1 - нажата кнопка "Обновить" // 2 - нажата кнопка "Настройка" // // Возвращаемое значение: // Расшифровка (список значений) // // Вызывается из формул элементов диалога: // из таблицы, кнопки "Обновить" и "Настройка" // // Описание: // функция для стандартного механизма кнопок ""Обновить" и "Настройка"" // помещает значение параметра в список Расшифровка и возвращает этот список // Функция РасшифровкаОбновить(Обновить) Расшифровка.Установить("Обновить", Обновить); Возврат Расшифровка; КонецФункции //РасшифровкаОбновить() //****************************************************************************** // ДобавитьСклады(Запрос, ФлагВозврата, СписокСкладов) // // Параметры: // Запрос, ФлагВозврата, СписокСкладов // // Возвращаемое значение: // Нет // // Описание: // Добавление складов в список обходом группировки запроса. // Процедура ДобавитьСклады(Запрос, ФлагВозврата, СписокСкладов) ПервыйРаз = 1; Пока Запрос.Группировка("Склад") = 1 Цикл Если ПоказатьКомиссию = 1 Тогда Если ПервыйРаз = 1 Тогда Пока Запрос.Группировка("Комиссионер") = 1 Цикл Если (ПустоеЗначение(Запрос.Комиссионер) = 1) Тогда Продолжить; КонецЕсли; Если СписокСкладов.НайтиЗначение(Запрос.Комиссионер)=0 Тогда СписокСкладов.ДобавитьЗначение(Запрос.Комиссионер); КонецЕсли; КонецЦикла; ПервыйРаз = 0; КонецЕсли; КонецЕсли; Если ПустоеЗначение(Запрос.Склад) = 1 Тогда Продолжить; КонецЕсли; Если СписокСкладов.НайтиЗначение(Запрос.Склад)=0 Тогда СписокСкладов.ДобавитьЗначение(Запрос.Склад); КонецЕсли; КонецЦикла; СписокСкладов.Сортировать(); ФлагВозврата = 1; Для Сч = 1 По СписокСкладов.РазмерСписка() Цикл ТекСклад = СписокСкладов.ПолучитьЗначение(Сч); ТЗ.НоваяКолонка("Количество" + Сч, "Число"); Если ТекСклад.Вид() = "Склады" Тогда Если (ПредставлениеЦены <> "не показывать") и ((ПредставлениеЦены <> "отпускная цена (только розница)") или (ТекСклад.РозничныйСклад = 1)) Тогда ТЗ.НоваяКолонка("Сумма" + Сч, "Число"); КонецЕсли; Иначе Если (ПредставлениеЦены <> "не показывать") и (ПредставлениеЦены <> "отпускная цена (только розница)") Тогда ТЗ.НоваяКолонка("Сумма" + Сч, "Число"); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры // ДобавитьСклады() //****************************************************************************** // Название: ПолучитьЦенуТовара(ТЗИтоги, Товар, Цена, ВалютаЦены) // // Параметры: // ТЗИтоги - таблица с рассчитанными итогами по товарам // Товар - товар, цену которого следует получить // Цена - переменная, в которую будет передана цена товара за базовую единицу // ВалютаЦены - переменная, в которую будет передана валюта цена товара // // Возвращаемое значение: // Нет // // Вызывается из формул диалога: // Наименование,. // // Описание: // получает цену товара // Процедура ПолучитьЦенуТовара(ТЗИтоги, Товар, Цена, ВалютаЦены) Если ВидЕдиницы = 1 Тогда Коэффициент = Товар.ОсновнаяЕдиница.Коэффициент; Иначе Коэффициент = 1; КонецЕсли; ПереданнаяВалюта = ВалютаЦены; Если ПредставлениеЦены="из справочника цен"Тогда //из категории цен ОбЦена = 0; ЦенаЦены = 0; ВалЦены = 0; глВернутьЦену(Товар, ЦенаИзСправочника, ДатаКонца, ЦенаЦены,,ВалЦены,, ОбЦена); Если ПустоеЗначение(ОбЦена) = 0 Тогда // есть цена НайденнаяЕдиница= ОбЦена.Единица.Получить(ДатаКонца); Цена = ЦенаЦены * Коэффициент /?(НайденнаяЕдиница.Коэффициент = 0, 1, НайденнаяЕдиница.Коэффициент); ВалютаЦены = ВалЦены; Если ЦенаИзСправочника.Валюта <> ВалЦены Тогда Цена = глПересчет(Цена, ВалЦены, ДатаКонца, ЦенаИзСправочника.Валюта, ДатаКонца); КонецЕсли; Иначе Цена = 0; ВалютаЦены = глРубли; КонецЕсли; ИначеЕсли ПредставлениеЦены="отпускная цена (только розница)" Тогда //продажная цена // Возвращаю ту цену, которую передали с учетом коэффициента ВалютаЦены = глРубли; Цена = Цена * Коэффициент; ИначеЕсли ПредставлениеЦены="усредненная себестоимость без НДС" Тогда //себестоимость без НДС НомСтр=""; Если ТЗИтоги.НайтиЗначение(Товар,НомСтр,"Номенклатура")=0 Тогда Цена = 0; ВалютаЦены = глРубли; Иначе ТЗИтоги.ПолучитьСтрокуПоНомеру(НомСтр); КолТовара = ТЗИтоги.Количество; Цена = ?(КолТовара=0,0,ТЗИтоги.СуммаБезНДС * Коэффициент/КолТовара); ВалютаЦены = глРубли; КонецЕсли; ИначеЕсли ПредставлениеЦены = "усредненная себестоимость с НДС" Тогда //себестоимость с НДС // ВалютаЦены - валюта учета товара НомСтр=""; Если ТЗИтоги.НайтиЗначение(Товар,НомСтр,"Номенклатура")=0 Тогда Цена = 0; ВалютаЦены = глРубли; Иначе ТЗИтоги.ПолучитьСтрокуПоНомеру(НомСтр); КолТовара = ТЗИтоги.Количество; Цена = ?(КолТовара=0,0,ТЗИтоги.СуммаРуб * Коэффициент/КолТовара); ВалютаЦены = глРубли; КонецЕсли; КонецЕсли; // Если мы хотим получить цену в определенной валюте, отличной от той, в которой мы имеем цену на данный момент, // то необходимо осуществить пересчет Если ПустоеЗначение(ПереданнаяВалюта) = 0 Тогда Если ПереданнаяВалюта <> ВалютаЦены Тогда Цена = глПересчет(Цена, ВалютаЦены, ДатаКонца, ПереданнаяВалюта, ДатаКонца); КонецЕсли; КонецЕсли; КонецПроцедуры //ПолучитьЦенуТовара //****************************************************************************** // ТекстЗапросаСКомиссией() // // Параметры: // Нет // // Возвращаемое значение: // Текст запроса // // Описание: // Формирует текст запроса, для остатков с комиссионерами. // Функция ТекстЗапросаСКомиссией() СтрПериод = ?(ДатаКонца>= ПолучитьДатуТА(),"", "Период с ДатаКонца по ДатаКонца;"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |" + СтрПериод + " |Фирма = Регистр.ОстаткиТМЦ.Фирма, | Регистр.РезервыТМЦ.Фирма, | Регистр.ПартииОтданные.Фирма; |УпрАналитика = Регистр.ОстаткиТМЦ.Фирма.УпрАналитика, | Регистр.РезервыТМЦ.Фирма.УпрАналитика, | Регистр.ПартииОтданные.Фирма.УпрАналитика; |ЮрЛицо = Регистр.ОстаткиТМЦ.Фирма.ЮрЛицо, | Регистр.РезервыТМЦ.Фирма.ЮрЛицо, | Регистр.ПартииОтданные.Фирма.ЮрЛицо; |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура, | Регистр.РезервыТМЦ.Номенклатура, | Регистр.Заказы.Номенклатура, | Регистр.ПартииОтданные.Номенклатура; |Склад = Регистр.ОстаткиТМЦ.Склад, | Регистр.РезервыТМЦ.Склад; |Комиссионер = Регистр.ПартииОтданные.Договор.Владелец;"; Если ВыводитьЗаказанный = 1 Тогда ТекстЗапроса = ТекстЗапроса + "Заказано = Регистр.Заказы.КоличествоПриход; |Функция ЗаказаноКонОст = КонОст(Заказано);"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + "Количество = Регистр.ОстаткиТМЦ.Количество, | Регистр.ПартииОтданные.Количество; |Резерв = Регистр.РезервыТМЦ.Количество; |Функция КоличествоКонОст = КонОст(Количество); |Группировка Номенклатура"+?(ПоказатьОстатки.ТекущаяСтрока()>=2," Все","")+";"; Возврат ТекстЗапроса; КонецФункции // ТекстЗапросаСКомиссией() //****************************************************************************** // ТекстЗапросаБезКомиссии() // // Параметры: // Нет // // Возвращаемое значение: // Текст запроса // // Описание: // Формирует текст запроса, для остатков без комиссионеров. // Функция ТекстЗапросаБезКомиссии() СтрПериод = ?(ДатаКонца>= ПолучитьДатуТА(),"", "Период с ДатаКонца по ДатаКонца;"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |" + СтрПериод + " |Фирма = Регистр.ОстаткиТМЦ.Фирма, | Регистр.РезервыТМЦ.Фирма; |УпрАналитика = Регистр.ОстаткиТМЦ.Фирма.УпрАналитика, | Регистр.РезервыТМЦ.Фирма.УпрАналитика; |ЮрЛицо = Регистр.ОстаткиТМЦ.Фирма.ЮрЛицо, | Регистр.РезервыТМЦ.Фирма.ЮрЛицо; |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура, | Регистр.Заказы.Номенклатура, | Регистр.РезервыТМЦ.Номенклатура; |Склад = Регистр.ОстаткиТМЦ.Склад, | Регистр.РезервыТМЦ.Склад;"; Если ВыводитьЗаказанный = 1 Тогда ТекстЗапроса = ТекстЗапроса + "Заказано = Регистр.Заказы.КоличествоПриход; |Функция ЗаказаноКонОст = КонОст(Заказано);"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + "Количество = Регистр.ОстаткиТМЦ.Количество; |Резерв = Регистр.РезервыТМЦ.Количество; |Функция КоличествоКонОст = КонОст(Количество); |Группировка Номенклатура"+?(ПоказатьОстатки.ТекущаяСтрока()>=2," Все","")+";"; Возврат ТекстЗапроса; КонецФункции // ТекстЗапросаБезКомиссии() //****************************************************************************** // ЗаполнитьСтроку(ТЗ, Запрос) // // Параметры: // ТЗ - таблица значений отчета спозиционированная на заполняемой строке // Запрос - запрос, спозиционированный на соответствующем ТМЦ и, если необходимо розничной цене // СписокСкладов - список значений, содержащий все склады, попавшие в запрос // // Возвращаемое значение: // Нет // // Описание: // Заполняет строку таблицы. // Процедура ЗаполнитьСтроку(ТЗ, Запрос, СписокСкладов, ВДокумент) Если ПредставлениеЦены = "отпускная цена (только розница)" Тогда Цена = Запрос.ЦенаПрод; Иначе Цена = 0; КонецЕсли; ВалютаЦены = 0; ПолучитьЦенуТовара(ТЗИтогов, Запрос.Номенклатура, Цена, ВалютаЦены); Если ПредставлениеЦены <> "не показывать" Тогда ТЗ.Цена = Цена; КонецЕсли; ПервыйРаз = 1; Пока Запрос.Группировка("Склад")=1 Цикл Если ПоказатьКомиссию = 1 Тогда Если ПервыйРаз = 1 Тогда Пока Запрос.Группировка("Комиссионер") = 1 Цикл Если (ПустоеЗначение(Запрос.Комиссионер) = 1) Тогда Продолжить; КонецЕсли; ПечКол = Запрос.КоличествоКонОст; Если Показатель.ТекущаяСтрока() = 2 Тогда ПечКол = ПечКол - Запрос.РезервКонОст; КонецЕсли; Поз = СписокСкладов.НайтиЗначение(Запрос.Комиссионер); Если Поз > 0 Тогда ТЗ.УстановитьЗначение(ТЗ.НомерСтроки, "Количество" + Поз, ПечКол); Если (ПредставлениеЦены <> "не показывать") и (ПредставлениеЦены <> "отпускная цена (только розница)") Тогда ПечСумма = Цена * ПечКол; ТЗ.УстановитьЗначение(ТЗ.НомерСтроки, "Сумма" + Поз, ПечСумма); КонецЕсли; КонецЕсли; КонецЦикла; ПервыйРаз = 0; Если ПустоеЗначение(Запрос.Склад) = 1 Тогда Продолжить; КонецЕсли; КонецЕсли; КонецЕсли; ПечКол = Запрос.КоличествоКонОст; Если Показатель.ТекущаяСтрока() = 2 Тогда ПечКол = ПечКол - Запрос.РезервКонОст; КонецЕсли; ПечКол = ПечКол / ТЗ.ПечЕд.Коэффициент; Поз = СписокСкладов.НайтиЗначение(Запрос.Склад); Если Поз > 0 Тогда ТЗ.УстановитьЗначение(ТЗ.НомерСтроки, "Количество" + Поз, ПечКол); Если (ПредставлениеЦены <> "не показывать") и ((ПредставлениеЦены <> "отпускная цена (только розница)") или (Запрос.Склад.РозничныйСклад = 1)) Тогда ПечСумма = Цена * ПечКол; ТЗ.УстановитьЗначение(ТЗ.НомерСтроки, "Сумма" + Поз, ПечСумма); КонецЕсли; КонецЕсли; Если ВДокумент = 1 Тогда Если ПустоеЗначение(Запрос.Склад) = 1 Тогда Продолжить; КонецЕсли; // Заполнение строк документа "Инвентаризация ТМЦ" ТЗВДокумент.НоваяСтрока(); Если ВидРазделителя = 1 Тогда ТЗВДокумент.Разделитель = ВыбРазделитель1; КонецЕсли; ТЗВДокумент.Склад = Запрос.Склад; ТЗВДокумент.Номенклатура = Запрос.Номенклатура; ТЗВДокумент.Количество = ПечКол; ТЗВДокумент.Единица = ТЗ.ПечЕд; ТЗВДокумент.Коэффициент = ТЗ.ПечЕд.Коэффициент; Если ПустоеЗначение(ВалютаДокумента) = 0 Тогда ТЗВДокумент.ЦенаПрод = глПересчет(Цена, глРубли, ДатаКонца, ВалютаДокумента, КурсДокумента,, КратностьДокумента); Иначе ТЗВДокумент.ЦенаПрод = Цена; КонецЕсли; ТЗВДокумент.Сумма = ПечСумма; КонецЕсли; КонецЦикла; // по складам КонецПроцедуры // ЗаполнитьСтроку() //****************************************************************************** // РассчитатьИтогиПоГруппам(ТЗ, Запрос) // // Параметры: // СписокСкладов - список значений, содержащий все склады, попавшие в запрос // // Возвращаемое значение: // Нет // // Описание: // Рассчитывает итоги по группам и общие итоги по отчету. // Процедура РассчитатьИтогиПоГруппам(СписокСкладов) Уровень = 1; Для Уровень = 1 По 12 Цикл КопияТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.Выгрузить(КопияТЗ); КопияТЗ.Сортировать("Уровень"); ТЗ.ВыбратьСтроки(); СтрокаНайдена = 0; Пока ТЗ.ПолучитьСтроку() = 1 Цикл Если ТЗ.Уровень = Уровень Тогда СтрокаНайдена = 1; КопияТЗ.ВыбратьСтроки(); Пока КопияТЗ.ПолучитьСтроку() = 1 Цикл Если КопияТЗ.Родитель = ТЗ.ТекРасшифровка Тогда Если (ТЗ.Уровень <> 12) И (ТЗ.Уровень <= КопияТЗ.Уровень) Тогда ТЗ.Уровень = КопияТЗ.Уровень + 1; Для Сч = 1 По СписокСкладов.РазмерСписка() Цикл ТекСклад = СписокСкладов.ПолучитьЗначение(Сч); Если ИтогиПоКоличеству = 1 Тогда ТекКол = ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч); ТЗ.УстановитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч, 0); КонецЕсли; Если ТекСклад.Вид() = "Склады" Тогда Если (ПредставлениеЦены <> "не показывать") и ((ПредставлениеЦены <> "отпускная цена (только розница)") или (ТекСклад.РозничныйСклад = 1)) Тогда ТекСумма = ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Сумма" + Сч); ТЗ.УстановитьЗначение(ТЗ.НомерСтроки, "Сумма" + Сч, 0); КонецЕсли; Иначе Если (ПредставлениеЦены <> "не показывать") и (ПредставлениеЦены <> "отпускная цена (только розница)") Тогда ТекСумма = ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Сумма" + Сч); ТЗ.УстановитьЗначение(ТЗ.НомерСтроки, "Сумма" + Сч, 0); КонецЕсли; КонецЕсли; КонецЦикла; Продолжить; КонецЕсли; Сч = 0; Для Сч = 1 По СписокСкладов.РазмерСписка() Цикл ТекСклад = СписокСкладов.ПолучитьЗначение(Сч); Если ИтогиПоКоличеству = 1 Тогда ТекКол = ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч); ТЗ.УстановитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч, ТекКол + КопияТЗ.ПолучитьЗначение(КопияТЗ.НомерСтроки, "Количество" + Сч)); КонецЕсли; Если ТекСклад.Вид() = "Склады" Тогда Если (ПредставлениеЦены <> "не показывать") и ((ПредставлениеЦены <> "отпускная цена (только розница)") или (ТекСклад.РозничныйСклад = 1)) Тогда ТекСумма = ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Сумма" + Сч); ТЗ.УстановитьЗначение(ТЗ.НомерСтроки, "Сумма" + Сч, ТекСумма + КопияТЗ.ПолучитьЗначение(КопияТЗ.НомерСтроки, "Сумма" + Сч)); КонецЕсли; Иначе Если (ПредставлениеЦены <> "не показывать") и (ПредставлениеЦены <> "отпускная цена (только розница)") Тогда ТекСумма = ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Сумма" + Сч); ТЗ.УстановитьЗначение(ТЗ.НомерСтроки, "Сумма" + Сч, ТекСумма + КопияТЗ.ПолучитьЗначение(КопияТЗ.НомерСтроки, "Сумма" + Сч)); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры // РассчитатьИтогиПоГруппам() //****************************************************************************** // Сформировать(ЗакрытьДиалог=0, ВДокумент=0) // // Параметры: // ЗакрытьДиалог - флаг того, что после формирования отчета надо закрыть диалог // ВДокумент - 1 - режим переноса информации отчета в документ "Инвентаризайия ТМЦ" // 0 - вывод отчета // // Возвращаемое значение: // Нет // // Вызывается из формул элементов диалога: // кнопки "Сформировать" и "ОК" // // Описание: // Запускает отчет. // Процедура Сформировать(ЗакрытьДиалог=0, ВДокумент=0) Перем Запрос, ТекстЗапроса; Перем СписокИтогов; ПредставлениеЦены = ЦенаТовара.ПолучитьЗначение(ЦенаТовара.ТекущаяСтрока()); ВалютаЦены = глРубли; Если ПредставлениеЦены = "из справочника цен" Тогда Если ЦенаИзСправочника.Выбран() = 1 Тогда ВалютаЦены = ЦенаИзСправочника.Валюта; Иначе Предупреждение("Выберите, пожалуйста, тип используемой цены!"); Возврат; КонецЕсли; КонецЕсли; Если глПроверкаДаты(ДатаКонца,ДатаКонца)=0 Тогда Возврат; КонецЕсли; Если (ТипЗначенияСтр(Таб) <> "Таблица") ИЛИ (Обновить = 0) Тогда Таб = СоздатьОбъект("Таблица"); Иначе Таб.Очистить(); КонецЕсли; Если ВДокумент = 1 Тогда ТЗВДокумент = СоздатьОбъект("ТаблицаЗначений"); ТЗВДокумент.НоваяКолонка("Разделитель", "Справочник.Фирмы"); ТЗВДокумент.НоваяКолонка("Склад", "Справочник.Склады"); ТЗВДокумент.НоваяКолонка("Номенклатура","Справочник.Номенклатура"); ТЗВДокумент.НоваяКолонка("Количество", "Число"); ТЗВДокумент.НоваяКолонка("Единица", "Справочник.Единицы"); ТЗВДокумент.НоваяКолонка("Коэффициент", "Число"); ТЗВДокумент.НоваяКолонка("ЦенаПрод", "Число"); ТЗВДокумент.НоваяКолонка("Сумма", "Число"); КонецЕсли; Таб.ИсходнаяТаблица( "ОстаткиТМЦ" ); Расшифровка = СоздатьОбъект("СписокЗначений"); Путь = ""; ИмяФайла = ""; РасположениеФайла(Путь,ИмяФайла); ФайлОтчета = Путь + ИмяФайла; Расшифровка.Установить("Отчет", ?(ПустоеЗначение(ФайлОтчета) = 1,"ОстаткиТМЦ", ФайлОтчета)); // все настройки помещаем в список Расшифровка.Установить("ДатаКонца", ДатаКонца); Расшифровка.Установить("ВыбРазделитель1",ВыбРазделитель1); Расшифровка.Установить("ВыбРазделитель2",ВыбРазделитель2); Расшифровка.Установить("ВыбРазделитель3",ВыбРазделитель3); Расшифровка.Установить("ВидРазделителя",ВидРазделителя); Расшифровка.Установить("ВыбТМЦ", ВыбТМЦ); Расшифровка.Установить("ВыбСклад", ВыбСклад); Расшифровка.Установить("ВидЕдиницы", ВидЕдиницы); Расшифровка.Установить("ЦенаТовара", ЦенаТовара.ТекущаяСтрока()); Расшифровка.Установить("ЦенаИзСправочника", ЦенаИзСправочника); Расшифровка.Установить("ПоказатьКомиссию",ПоказатьКомиссию); Расшифровка.Установить("ИтогиПоКоличеству", ИтогиПоКоличеству); Расшифровка.Установить("ВыводитьЗаказанный",ВыводитьЗаказанный); Расшифровка.Установить("ПоказатьОстатки", ПоказатьОстатки.ТекущаяСтрока()); Расшифровка.Установить("Показатель", Показатель. ТекущаяСтрока()); глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были // запомним МФ только если он задан Если глМножественныйФильтрЗадан(ТаблицаМФ) = 1 Тогда Расшифровка.Установить("ТаблицаМФ", ТаблицаМФ); КонецЕсли; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); Если ПоказатьКомиссию = 1 Тогда ТекстЗапроса = ТекстЗапросаСКомиссией(); Иначе ТекстЗапроса = ТекстЗапросаБезКомиссии(); КонецЕсли; Если Показатель.ТекущаяСтрока() = 2 Тогда ТекстЗапроса = ТекстЗапроса + "Функция РезервКонОст = КонОст(Резерв);"; КонецЕсли; Если (ПредставлениеЦены = "отпускная цена (только розница)") Тогда ТекстЗапроса = ТекстЗапроса + "ЦенаПрод = Регистр.ОстаткиТМЦ.ЦенаПрод, Регистр.ПартииОтданные.Номенклатура.МинОстаток; |Группировка ЦенаПрод;"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + "Группировка Склад Все ВошедшиеВЗапрос;"; Если ПоказатьКомиссию = 1 Тогда ТекстЗапроса = ТекстЗапроса + "Группировка Комиссионер без групп Все ВошедшиеВЗапрос ;"; КонецЕсли; Загол=""; НетОш = 1; // нет ошибок при наложении фильтров Если ВидРазделителя = 1 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",ВыбРазделитель1,"ВыбРазделитель1",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",,,ТекстЗапроса,Загол); ИначеЕсли ВидРазделителя = 2 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",ВыбРазделитель2,"ВыбРазделитель2",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",,,ТекстЗапроса,Загол); ИначеЕсли ВидРазделителя = 3 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",ВыбРазделитель3,"ВыбРазделитель3",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",,,ТекстЗапроса,Загол); КонецЕсли; НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Номенклатура", ВыбТМЦ, "ВыбТМЦ", ТекстЗапроса,Загол,"СвойстваНоменклатуры"); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Склад", ВыбСклад, "ВыбСклад", ТекстЗапроса,Загол); Если НетОш = 0 Тогда Возврат; КонецЕсли; Если Показатель.ТекущаяСтрока()=1 Тогда ПечЗаголовок = "Остатки ТМЦ на складах"; Иначе ПечЗаголовок = "Свободные остатки ТМЦ на складах"; КонецЕсли; Если ПоказатьКомиссию = 1 Тогда ПечЗаголовок = ПечЗаголовок + " и у комиссионеров"; КонецЕсли; ПечЗаголовокСтолбца = ""; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; ТЗИтогов=СоздатьОбъект("ТаблицаЗначений"); ТЗИтоговКомиссия=СоздатьОбъект("ТаблицаЗначений"); Если ((ПредставлениеЦены="усредненная себестоимость с НДС") ИЛИ (ПредставлениеЦены="усредненная себестоимость без НДС") ) Тогда // если считаем себестоимость из регистра партии товаров ВремРегистры=СоздатьОбъект("Регистры"); РегПартии=ВремРегистры.ПартииНаличие; РегОтданные = ВремРегистры.ПартииОтданные; Если ВидРазделителя = 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 Тогда ТЗ.НоваяКолонка("Заказано", "Строка"); КонецЕсли; // сформируем список складов. ФлагВозврата = 0; СписокСкладов = СоздатьОбъект("СписокЗначений"); Пока (Запрос.Группировка("Номенклатура") = 1) и (ФлагВозврата <> 1) Цикл Если Запрос.ЭтоГруппа("Номенклатура")=1 Тогда Продолжить; КонецЕсли; Если ПредставлениеЦены = "отпускная цена (только розница)" Тогда Пока (Запрос.Группировка("ЦенаПрод") = 1) и (ФлагВозврата <> 1) Цикл ДобавитьСклады(Запрос, ФлагВозврата, СписокСкладов); КонецЦикла; Иначе ДобавитьСклады(Запрос, ФлагВозврата, СписокСкладов); КонецЕсли; КонецЦикла; глЧислоСтрок = 0; Таб.ВывестиСекцию("Кнопки"); Таб.ВывестиСекцию("Шапка"); Таб.ВывестиСекцию("ШапкаТаблицы|ТМЦ"); Если ВыводитьЗаказанный = 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, " " + СокрЛП(ТМЦ.Артикул), "")+", Код. "+ ТМЦ.Код; Если ПредставлениеЦены = "отпускная цена (только розница)" Тогда Пока Запрос.Группировка("ЦенаПрод") = 1 Цикл ТЗ.НоваяСтрока(); ТЗ.Уровень = 0; ТЗ.ТекРасшифровка = ТМЦ; ТЗ.Родитель = ТМЦ.Родитель; ТЗ.ПечЕд = ?(ВидЕдиницы = 1,ТМЦ.ОсновнаяЕдиница, ТМЦ.БазоваяЕдиница); ТЗ.ПечТекстСтроки = ТМЦСтрока + ?(ТМЦ.МинОстаток=0,"",", мин. остаток = "+СокрЛП(глФРМКоличество(ТМЦ.МинОстаток,ТЗ.ПечЕд))); Если ВыводитьЗаказанный = 1 Тогда ТЗ.Заказано = Запрос.ЗаказаноКонОст; КонецЕсли; ЗаполнитьСтроку(ТЗ, Запрос, СписокСкладов, ВДокумент); КонецЦикла; иначе ТЗ.НоваяСтрока(); ТЗ.Уровень = 0; ТЗ.ТекРасшифровка = ТМЦ; ТЗ.Родитель = ТМЦ.Родитель; ТЗ.ПечЕд = ?(ВидЕдиницы = 1,ТМЦ.ОсновнаяЕдиница, ТМЦ.БазоваяЕдиница); ТЗ.ПечТекстСтроки = ТМЦСтрока + ?(ТМЦ.МинОстаток=0,"",", мин. остаток = "+СокрЛП(глФРМКоличество(ТМЦ.МинОстаток,ТЗ.ПечЕд))); Если ВыводитьЗаказанный = 1 Тогда ТЗ.Заказано = Запрос.ЗаказаноКонОст; КонецЕсли; ЗаполнитьСтроку(ТЗ, Запрос, СписокСкладов, ВДокумент); КонецЕсли; глОживить(1); КонецЦикла; // Последняя строка для общих итогов ТЗ.НоваяСтрока(); ТЗ.Уровень = 12; РассчитатьИтогиПоГруппам(СписокСкладов); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл ПечТекстСтроки = ТЗ.ПечТекстСтроки; ПечЕд = ТЗ.ПечЕд; ТекРасшифровка = ТЗ.ТекРасшифровка; Если (ТЗ.Уровень > 0) И (ТЗ.Уровень < 12) Тогда ИмяСекции = "СтрокаГ"; ИначеЕсли ТЗ.Уровень = 12 Тогда ИмяСекции = ?((ПредставлениеЦены <> "не показывать") ИЛИ (ИтогиПоКоличеству = 1),"ПодвалИтого","Подвал"); Иначе ИмяСекции = "Строка" КонецЕсли; Таб.ВывестиСекцию(ИмяСекции+"|ТМЦ"); Если ВыводитьЗаказанный = 1 Тогда ПечЗаказано = глФРМКоличество(ТЗ.Заказано); Таб.ПрисоединитьСекцию(ИмяСекции + "|Заказано"); КонецЕсли; Если (ПредставлениеЦены <> "не показывать") Тогда ПечЦена = глФРМ(ТЗ.Цена); Таб.ПрисоединитьСекцию(ИмяСекции + "|Цена"); КонецЕсли; Сч = 0; Для Сч = 1 По СписокСкладов.РазмерСписка() Цикл ТекСклад = СписокСкладов.ПолучитьЗначение(Сч); ПечКол = глФРМКоличество(ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Количество" + Сч)); Если ТекСклад.Вид() = "Склады" Тогда Если (ПредставлениеЦены <> "не показывать") и ((ПредставлениеЦены <> "отпускная цена (только розница)") или (ТекСклад.РозничныйСклад = 1)) Тогда ПечСумма = глФрм(ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Сумма" + Сч)); Таб.ПрисоединитьСекцию(ИмяСекции + "|Сумма"); Иначе Таб.ПрисоединитьСекцию(ИмяСекции + "|Склад"); КонецЕсли; Иначе Если (ПредставлениеЦены <> "не показывать") и (ПредставлениеЦены <> "отпускная цена (только розница)") Тогда ПечСумма = глФрм(ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки, "Сумма" + Сч)); Таб.ПрисоединитьСекцию(ИмяСекции + "|Сумма"); Иначе Таб.ПрисоединитьСекцию(ИмяСекции + "|Склад"); КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; Таб.ОбластьПечати(3); // Вывод заполненной формы Если ВДокумент = 0 Тогда Таб.ТолькоПросмотр(1); Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда Таб.Защита(1); КонецЕсли; Таб.Показать("Остатки ТМЦ", ""); КонецЕсли; Если (Обновить = 2)ИЛИ(ЗакрытьДиалог=1) Тогда СтрокаДействийФормы = "#Закрыть"; КонецЕсли; КонецПроцедуры //****************************************************************************** // ПриВыбореСклада() // // Параметры: // Нет // // Возвращаемое значение: // Нет // // Вызывается из формул элементов диалога: // ВыбСклад и кнопки кнХСклад // // Описание: // Изменяет допустимые настройки отчета в зависимости от выбранного скалда. // В частности, если выбран оптовый склад, то из списка цен исключаются розничные цены. // Процедура ПриВыбореСклада() Оптовый = 0; Если ВыбСклад.Выбран() = 1 Тогда Если ВыбСклад.РозничныйСклад = 0 Тогда Оптовый = 1; КонецЕсли; КонецЕсли; Поз = ЦенаТовара.НайтиЗначение("отпускная цена (только розница)"); Если Оптовый = 1 Тогда Если Поз > 0 Тогда ЦенаТовара.УдалитьЗначение(Поз); КонецЕсли; Иначе Если Поз = 0 Тогда ЦенаТовара.ВставитьЗначение(3, "отпускная цена (только розница)"); КонецЕсли; КонецЕсли; КонецПроцедуры // ПриВыбореСклада() //****************************************************************************** // ПоКнопкеИнвентаризация() // // Параметры: // Нет // // Возвращаемое значение: // Нет // // Вызывается из формул элементов диалога: // Кнопка "Инвентаризация". // // Описание: // Вызывается при нажатии кнопки "Инвентаризаци". Формирует документ "Инвентаризация ТМЦ" и заполняет // его строками из отчета // Процедура ПоКнопкеИнвентаризация() Если ВыбСклад.выбран() = 1 Тогда Заголовок = "Перенесено в документ Инвентаризация ТМЦ"; Сформировать(1, 1); Если ТипЗначенияСтр(Таб) = "Таблица" Тогда Таб.Показать(,, -1); КонецЕсли; Если ПустоеЗначение(ДокументИнвентаризация) = 0 Тогда ОткрытьФорму(ДокументИнвентаризация, ТЗВДокумент); Иначе ОткрытьФорму("Документ.ИнвентаризацияТМЦ", ТЗВДокумент); КонецЕсли; Иначе Предупреждение("Для заполнения документа ""Инвентаризация ТМЦ"" необходимо указывать конкретный склад.", 60); КонецЕсли; КонецПроцедуры // ПоКнопкеИнвентаризация() //////////////////////////////////////////////////////////////////////////////// // ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ // //****************************************************************************** // Предопределенная процедура Процедура ПриОткрытии(ФлагВосстановленияНастройки) // тип вид переменная название глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Номенклатура", "Номенклатура", "По номенклатуре"); глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Склады", "Склад", "По складам"); глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","ЗначенияСвойств", "Номенклатура", "По свойствам номенклатуры"); глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Фирмы", "Фирма", "По фирмам"); глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","СвоиЮрЛица", "ЮрЛицо", "По юр. лицам"); глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","УпрАналитика", "УпрАналитика", "По упр. аналитике"); Если ФлагВосстановленияНастройки = 0 Тогда ВидЕдиницы = 1; ВидРазделителя = 1; КонецЕсли; Если (ТипЗначенияСтр(Форма.Параметр) = "СписокЗначений") и (глОбновить = 0) Тогда глРасшифровка = Форма.Параметр; ВызовИзДокумента = 1; Форма.кнОк. Доступность(0); Форма.кнСформировать. Заголовок("Просмотр"); Форма.кнИнвентаризация. Заголовок("Перенести в документ"); Форма.ВидРазделителя. Доступность(0); Форма.ЮрЛицо. Доступность(0); Форма.УпрАналитика. Доступность(0); Форма.ВыбРазделитель1. Доступность(0); Форма.кнХРазделитель1. Доступность(0); КонецЕсли; Если (глФлагРасшифровки = 1) или (ВызовИзДокумента = 1) Тогда Обновить = глОбновить; // восстанавливаем настройки из списка ДатаКонца = глРасшифровка.Получить("ДатаКонца"); ВидРазделителя = глРасшифровка.Получить("ВидРазделителя"); ВыбРазделитель1 = глРасшифровка.Получить("ВыбРазделитель1"); ВыбРазделитель2 = глРасшифровка.Получить("ВыбРазделитель2"); ВыбРазделитель3 = глРасшифровка.Получить("ВыбРазделитель3"); ВыбТМЦ = глРасшифровка.Получить("ВыбТМЦ"); ВыбСклад = глРасшифровка.Получить("ВыбСклад"); ПриВыбореСклада(); НеВыбиратьСклад = глРасшифровка.Получить("НеВыбиратьСклад"); Если НеВыбиратьСклад = 1 Тогда Форма.ВыбСклад.Доступность(0); Форма.кнХСклад.Доступность(0); КонецЕсли; НеВыбиратьКомиссию = глРасшифровка.Получить("НеВыбиратьКомиссию"); Если НеВыбиратьКомиссию = 1 Тогда Форма.ПоказатьКомиссию.Доступность(0); КонецЕсли; ВалютаДокумента = глРасшифровка.Получить("ВалютаДокумента"); КурсДокумента = глРасшифровка.Получить("КурсДокумента"); КратностьДокумента = глРасшифровка.Получить("КратностьДокумента"); ВидЕдиницы = глРасшифровка.Получить("ВидЕдиницы"); ПоказатьКомиссию = глРасшифровка.Получить("ПоказатьКомиссию"); ИтогиПоКоличеству = глРасшифровка.Получить("ИтогиПоКоличеству"); ВыводитьЗаказанный = глРасшифровка.Получить("ВыводитьЗаказанный"); ПоказатьОстатки.ТекущаяСтрока(глРасшифровка.Получить("ПоказатьОстатки")); Показатель. ТекущаяСтрока(глРасшифровка.Получить("Показатель")); ЦенаТовара. ТекущаяСтрока(глРасшифровка.Получить("ЦенаТовара")); ЦенаИзСправочника = глРасшифровка.Получить("ЦенаИзСправочника"); НеВыбиратьЦену = глРасшифровка.Получить("НеВыбиратьЦену"); Если НеВыбиратьЦену = 1 Тогда Форма.ЦенаТовара.Доступность(0); КонецЕсли; Если ВызовИзДокумента = 1 Тогда ДокументИнвентаризация = глРасшифровка.Получить("ДокументИнвентаризация"); КонецЕсли; Если ТипЗначенияСтр(глРасшифровка.Получить("ТаблицаМФ"))="ТаблицаЗначений" Тогда ТаблицаМФ.Загрузить(глРасшифровка.Получить("ТаблицаМФ")); КонецЕсли; Если Обновить <> 0 Тогда Таб = глТаблица; КонецЕсли; Если (Обновить <> 2) и (ВызовИзДокумента <> 1) Тогда Сформировать(); СтатусВозврата(0); Возврат; КонецЕсли; Иначе Обновить = 0; КонецЕсли; ПерерисовкаНазванийЗакладок(); ТаблицаМФ.ВидимостьКолонки("Тип",0); ТаблицаМФ.ВидимостьКолонки("Вид",0); ТаблицаМФ.ВидимостьКолонки("СписокЭлементов",0); ТаблицаМФ.ВидимостьКолонки("ТипМФ",0); ТаблицаМФ.ВидимостьКолонки("ИмяПеременной",0); ТаблицаМФ.ВыводитьПиктограммы("ФлВкл"); УправлениеДиалогом(); КонецПроцедуры // ПриОткрытии() //****************************************************************************** // Предопределенная процедура. // Процедура ПриЗакрытии() // записываем изменения если они были глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); КонецПроцедуры // ПриЗакрытии() //****************************************************************************** // Предопределенная процедура. Процедура ВводНового() // эта предопределенная процедура выполняется при восстановлении настройки ПерерисовкаНазванийЗакладок(); УправлениеДиалогом(); ТаблицаМФ.ВыводитьПиктограммы("ФлВкл"); КонецПроцедуры // ВводНового() //****************************************************************************** // Предопределенная процедура // Процедура ПриВыбореЗакладки(Номер,Значение) // закладки Если Номер=1 Тогда глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были КонецЕсли; УправлениеДиалогом(); ПерерисовкаНазванийЗакладок(); КонецПроцедуры // ПриВыбореЗакладки //****************************************************************************** // Предопределенная процедура // Процедура ОбработкаПодбора(Значение) Если (СписокЭлементовМФ.НайтиЗначение(Значение)=0) Тогда Представление=""+Значение; Если ТипЗначенияСтр(Значение)="Справочник" Тогда Если СокрЛП(Метаданные.Справочник(Значение.Вид()).Владелец) <> "Метаданные" Тогда Представление=Представление+" ("+Значение.Владелец+")"; КонецЕсли; КонецЕсли; СписокЭлементовМФ.ДобавитьЗначение(Значение,Представление); ТаблицаМФ.ФлВкл=2; КонецЕсли; КонецПроцедуры // ОбработкаПодбора //////////////////////////////////////////////////////////////////////////////// // ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ // ДатаКонца=ПолучитьДатуТА(); ПоказатьОстатки.УдалитьВсе(); ПоказатьОстатки.ДобавитьЗначение("все ненулевые"); ПоказатьОстатки.ДобавитьЗначение("все"); ПоказатьОстатки.ДобавитьЗначение("все отрицательные"); ПоказатьОстатки.ДобавитьЗначение("меньше мин. остатка"); ПоказатьОстатки.ДобавитьЗначение("все, имеющиеся в наличии"); ПоказатьОстатки.ТекущаяСтрока(1); Показатель.УдалитьВсе(); Показатель.ДобавитьЗначение("включая резерв"); Показатель.ДобавитьЗначение("за минусом резервов"); Показатель.ТекущаяСтрока(1); // инициализация переменных множественного фильтра ТипМФ.УдалитьВсе(); ТипМФ.ДобавитьЗначение("одно из"); ТипМФ.ДобавитьЗначение("все кроме"); ТаблицаМФ.УдалитьСтроки(); Пока ТаблицаМФ.КоличествоКолонок()>0 Цикл ТаблицаМФ.УдалитьКолонку(1); КонецЦикла; ТаблицаМФ.НоваяКолонка("Тип"); ТаблицаМФ.НоваяКолонка("Вид"); ТаблицаМФ.НоваяКолонка("ИмяПеременной"); ТаблицаМФ.НоваяКолонка("СписокЭлементов"); // список элементов, по которым производим фильтрацию ТаблицаМФ.НоваяКолонка("ТипМФ"); // текущая строка списка ТипМФ ТаблицаМФ.НоваяКолонка("ФлВкл","Число",1,,"Вкл",5,,); // фильтр включен ("1" или "0") ТаблицаМФ.НоваяКолонка("Представление",,,,"Вид фильтра:"); ТаблицаМФ.ВыводитьПиктограммы("ФлВкл"); ТекСтрокаВТаблице=""; // Инициализируем закладки Форма.ИспользоватьЗакладки(1); Форма.Закладки.ДобавитьЗначение(1,"Основная"); Форма.Закладки.ДобавитьЗначение(2,"Множественный фильтр"); Форма.Закладки.ТекущаяСтрока(1); ЦенаТовара.УдалитьВсе(); ЦенаТовара.ДобавитьЗначение("усредненная себестоимость с НДС"); ЦенаТовара.ДобавитьЗначение("усредненная себестоимость без НДС"); ЦенаТовара.ДобавитьЗначение("отпускная цена (только розница)"); ЦенаТовара.ДобавитьЗначение("из справочника цен"); ЦенаТовара.ДобавитьЗначение("не показывать"); ЦенаТовара.ТекущаяСтрока(1);