Показано с 1 по 9 из 9
Комбинированный просмотр
-
17.01.2014, 13:37 #1
- Регистрация
- 17.04.2012
- Сообщений
- 5
- Сказал(а) спасибо
- 22
- Поблагодарили 0 раз(а) в 0 сообщениях
Спасибо, что откликнулись, сделала, как сказали убрали кавычки. Теперь другая проблема, пишет Не удалось определить значение параметра организации: ПолноеНаименование, ИНН, ОГРН и тд
#Если Клиент Тогда
Перем мТабДок;
Перем мКоличествоГруппировок;
Перем мКоличествоДопПолейПосле;
Перем мКоличествоДопПолейДо;
Перем мКоличествоДопПолейВместе ;
Перем мСоответствиеГруппировок;
Перем мСоответствиеДопПолейДо;
Перем мСоответствиеДопПолейПосл е;
Перем мСоответствиеДопПолейВмес те;
Перем мСписокПоложенийДляПечати Экспорт;
Перем мСписокНачало;
Перем мСписокНоменклатура;
Перем мСписокДопПоле;
Перем мСписокГруппаНачало;
Перем мСписокГруппаНоменклатура ;
Перем мСписокГруппаДопПоле;
Перем мСпециальныеПоля;
Перем мИмяРеквизитаСклад;
Перем мСклад;
Перем мИмяМакета Экспорт;
Перем мМакет;
Перем мИнициализироватьНастройк иПриОткрытии Экспорт;
Перем мТекущаяНастройка Экспорт;
Перем мНомерСтроки;
Перем мИзмеренияСтроки;
Перем мЕдиницаИзмеренияВеса;
Перем мПоляСПредставлениями;
Перем мВесВведенНеДляВсехТоваро в;
Перем мИтогВес;
// Процедура осуществляет вызов формирования печатной формы из документа.
//
// Параметры:
//
//
Процедура НапечататьИзДокумента(Док, ИмяМакета = Неопределено, ПечататьТолькоНеотсканиро ванные = Неопределено, НаПринтер = Ложь) Экспорт
Если ИмяМакета <> Неопределено Тогда
мИмяМакета = ИмяМакета;
КонецЕсли;
Если ПечататьТолькоНеотсканиро ванные <> Неопределено Тогда
ТолькоНеотсканированныйТо вар = ПечататьТолькоНеотсканиро ванные;
КонецЕсли;
ВидДокументов = Док.Метаданные().Имя;
Документ = Док;
ВосстановитьНастройкиПриО ткрытии();
Если ПоказыватьФорму Тогда
мИнициализироватьНастройк иПриОткрытии = Ложь;
ПолучитьФорму().Открыть();
Иначе
Печать(НаПринтер);
КонецЕсли;
КонецПроцедуры // НапечататьИзДокумента()
// Формирует структуру для сохранения настроек отчета
//
Процедура СформироватьСтруктуруДляС охраненияНастроек(Структу� �аСНастройками) Экспорт
СтруктураСНастройками = Новый Структура;
СтруктураСНастройками.Вст� �вить("НастройкиПостроител� �" , ПостроительОтчета.Получит� �Настройки());
СтруктураСНастройками.Вст� �вить("ТаблицаНастройкиПол� �йПечать" , ТаблицаНастройкиПолейПеча ть);
СтруктураСНастройками.Вст� �вить("СписокСкладов" , СписокСкладов);
СтруктураСНастройками.Вст� �вить("ВыводитьЗаголовок" , ВыводитьЗаголовок);
СтруктураСНастройками.Вст� �вить("ПоказыватьФорму" , ПоказыватьФорму);
СтруктураСНастройками.Вст� �вить("ИспользоватьСвойств� �" , ИспользоватьСвойства);
СтруктураСНастройками.Вст� �вить("КоличествоУровнейМе� �тХранения" , КоличествоУровнейМестХран ения);
СтруктураСНастройками.Вст� �вить("ПредставленияПриори� �етовМестХранения", ПредставленияПриоритетовМ естХранения);
КонецПроцедуры // СформироватьСтруктуруДляС охраненияНастроек()
// Процедура открывает форму настройки из документа.
//
// Параметры:
// ТекДок - Ссылка на документ, из которого открыта форма.
//
Процедура ОткрытьФормуНастройкиИзДо кумента(Док) Экспорт
ВидДокументов = Док.Метаданные().Имя;
Документ = Док;
ВосстановитьНастройкиПриО ткрытии();
мИнициализироватьНастройк иПриОткрытии = Ложь;
ПолучитьФорму().Открыть();
КонецПроцедуры // ОткрытьФормуНастройкиИзДо кумента()
// Функция выводит поле в шапку отчета. Возвращает количество выведенных полей.
//
// Параметры:
// ДопПоле - поле, которое нужно вывести.
// РезультатЗапроса - результат запроса.
// Секция - выводимая секция.
//
// Возвращаемое значение:
// Число - количество выведенных полей.
//
Функция ВывестиПолеВШапку(ДопПоле, РезультатЗапроса, Знач Секция)
КоличествоПолей = 0;
Если мСпециальныеПоля[ДопПоле.Имя] = 0 Тогда // "МестоХранения"
Выборка = РезультатЗапроса.Выбрать(О бходРезультатаЗапроса.ПоГ� �уппировкам, "Приоритет", "Все");
Пока Выборка.Следующий() Цикл
СтрокаПредставленияПриори тета = ПредставленияПриоритетовМ естХранения.Найти(Выборка.� �риоритет, "Приоритет");
Если СтрокаПредставленияПриори тета = Неопределено Тогда
НазваниеКолонки = ДопПоле.Псевдоним + ?(Выборка.Количество() = 1, "", " " + (Выборка.Приоритет));
Иначе
НазваниеКолонки = СтрокаПредставленияПриори тета.Псевдоним;
КонецЕсли;
Секция.Параметры.ДопПоле = НазваниеКолонки;
мТабДок.Присоединить(Секци я);
КоличествоПолей = КоличествоПолей + 1;
КонецЦикла;
ИначеЕсли мСпециальныеПоля[ДопПоле.Имя] = 1 Тогда // "Остаток"
Секция = мМакет.ПолучитьОбласть("Ша� �ка|ДопПолеОстаток");
Выборка = РезультатЗапроса.Выбрать(О бходРезультатаЗапроса.ПоГ� �уппировкам, "Склад", "Все");
Пока Выборка.Следующий() Цикл
НазваниеКолонки = СокрЛП(Выборка.СкладПредст авление);
Если Не ПустаяСтрока(ДопПоле.Псевд оним) Тогда
НазваниеКолонки = НазваниеКолонки + Символы.ПС + ДопПоле.Псевдоним;
КонецЕсли;
Секция.Параметры.ДопПоле = НазваниеКолонки;
мТабДок.Присоединить(Секци я);
КоличествоПолей = КоличествоПолей + 1;
КонецЦикла;
Иначе
Секция.Параметры.ДопПоле = ДопПоле.Псевдоним;
мТабДок.Присоединить(Секци я);
КоличествоПолей = КоличествоПолей + 1;
КонецЕсли;
Возврат КоличествоПолей;
КонецФункции // ВывестиПолеВШапку()
// Процедура выводит поле в отчет.
//
// Параметры:
// ДопПоле - поле, которое нужно вывести.
// РезультатЗапроса - результат запроса.
// Секция - выводимая секция.
//
Процедура ВывестиПолеВОтчет(ДопПоле, Выборка, Знач Секция)
Если мСпециальныеПоля[ДопПоле] = 0 Тогда // "МестоХранения"
ВыборкаДопПоле = Выборка.Выбрать(ОбходРезул ьтатаЗапроса.ПоГруппировк� �м, "Приоритет", "Все");
Пока ВыборкаДопПоле.Следующий() Цикл
Секция.Параметры.ЗначениеД опПоля = ВыборкаДопПоле[ДопПоле];
Секция.ТекущаяОбласть.Гори зонтальноеПоложение = ТаблицаНастройкиПолейПеча ть.Найти(ДопПоле, "Имя").Выравнивание;
мТабДок.Присоединить(Секци я);
КонецЦикла;
ИначеЕсли мСпециальныеПоля[ДопПоле] = 1 Тогда // "Остаток"
Секция = мМакет.ПолучитьОбласть("Сп� �сок|ДопПолеОстаток");
ВыборкаДопПоле = Выборка.Выбрать(ОбходРезул ьтатаЗапроса.ПоГруппировк� �м, "Склад", "Все");
Пока ВыборкаДопПоле.Следующий() Цикл
Секция.Параметры.ЗначениеД опПоля = ВыборкаДопПоле.Остаток;
Секция.ТекущаяОбласть.Гори зонтальноеПоложение = ТаблицаНастройкиПолейПеча ть.Найти(ДопПоле, "Имя").Выравнивание;
мТабДок.Присоединить(Секци я);
КонецЦикла;
Иначе
Если мПоляСПредставлениями[ДопПоле] = Неопределено Тогда
ПредставлениеПоля = Выборка[ДопПоле];
Иначе
ПредставлениеПоля = Выборка[ДопПоле + "Представление"];
КонецЕсли;
Секция.Параметры.ЗначениеД опПоля = ПредставлениеПоля;
Секция.ТекущаяОбласть.Гори зонтальноеПоложение = ТаблицаНастройкиПолейПеча ть.Найти(ДопПоле, "Имя").Выравнивание;
мТабДок.Присоединить(Секци я);
КонецЕсли;
КонецПроцедуры // ВывестиПолеВОтчет()
// Процедура выводит пустое поле в отчет.
//
// Параметры:
// ДопПоле - поле, которое нужно вывести.
// РезультатЗапроса - результат запроса.
// Секция - выводимая секция.
//
Процедура ВывестиПустоеПолеВОтчет(Д� �пПоле, Выборка, Знач Секция)
Если мСпециальныеПоля[ДопПоле] = 0 Тогда // "МестоХранения"
ВыборкаДопПоле = Выборка.Выбрать(ОбходРезул ьтатаЗапроса.ПоГруппировк� �м, "Приоритет", "Все");
Пока ВыборкаДопПоле.Следующий() Цикл
Секция.Параметры.ЗначениеД опПоля = "";
мТабДок.Присоединить(Секци я);
КонецЦикла;
ИначеЕсли мСпециальныеПоля[ДопПоле] = 1 Тогда // "Остаток"
Секция = мМакет.ПолучитьОбласть("Сп� �сокГруппа|ДопПолеОстаток") ;
ВыборкаДопПоле = Выборка.Выбрать(ОбходРезул ьтатаЗапроса.ПоГруппировк� �м, "Склад", "Все");
Пока ВыборкаДопПоле.Следующий() Цикл
Секция.Параметры.ЗначениеД опПоля = "";
мТабДок.Присоединить(Секци я);
КонецЦикла;
Иначе
Секция.Параметры.ЗначениеД опПоля = "";
мТабДок.Присоединить(Секци я);
КонецЕсли;
КонецПроцедуры // ВывестиПустоеПолеВОтчет()
// Процедура устанавливает ширину колонок полей.
//
// Параметры:
// ДопПоле - поле, которое нужно вывести.
// РезультатЗапроса - результат запроса.
// Секция - выводимая секция.
//
Функция УстановитьШиринуПолей(Доп� �оле, РезультатЗапроса, ТекКолонка)
Если мСпециальныеПоля[ДопПоле] = 0 Тогда // "МестоХранения"
КоличествоПолей = 0;
ВыборкаДопПоле = РезультатЗапроса.Выбрать(О бходРезультатаЗапроса.ПоГ� �уппировкам, "Приоритет", "Все");
Пока ВыборкаДопПоле.Следующий() Цикл
мТабДок.Область(, ТекКолонка + КоличествоПолей, , ТекКолонка + КоличествоПолей).ШиринаКол онки = ТаблицаНастройкиПолейПеча ть.Найти(ДопПоле).Ширина;
КоличествоПолей = КоличествоПолей + 1;
КонецЦикла;
ИначеЕсли мСпециальныеПоля[ДопПоле] = 1 Тогда // "Остаток"
КоличествоПолей = 0;
ВыборкаДопПоле = РезультатЗапроса.Выбрать(О бходРезультатаЗапроса.ПоГ� �уппировкам, "Склад", "Все");
Пока ВыборкаДопПоле.Следующий() Цикл
мТабДок.Область(, ТекКолонка + КоличествоПолей, , ТекКолонка + КоличествоПолей + 1).ШиринаКолонки = ТаблицаНастройкиПолейПеча ть.Найти(ДопПоле).Ширина;
КоличествоПолей = КоличествоПолей + 1;
КонецЦикла;
Иначе
мТабДок.Область(, ТекКолонка, , ТекКолонка).ШиринаКолонки = ТаблицаНастройкиПолейПеча ть.Найти(ДопПоле).Ширина;
КоличествоПолей = 1;
КонецЕсли;
Возврат КоличествоПолей;
КонецФункции // УстановитьШиринуПолей()
// Процедура обновляет построитель отчета.
// Установленные настройки при этом не изменяются.
//
Процедура ОбновитьПостроительОтчета () Экспорт
Настройки = ПостроительОтчета.Получит� �Настройки();
ЗаполнитьПостроительОтчет а();
ПостроительОтчета.Установ� �тьНастройки(Настройки);
КонецПроцедуры // ОбновитьПостроительОтчета ()
// Проверяет корректность установленных пользователем настроек.
//
// Параметры:
// Отказ - в этот параметр возвращается значение Истина, если обнаружены ошибки.
//
Процедура ПроверитьКорректностьНаст роек(Отказ)
Если Не ЗначениеЗаполнено(Докумен� �) Тогда
Предупреждение("Не выбран документ для печати!");
Отказ = Истина;
Возврат;
КонецЕсли;
//Если СписокСкладов.Количество() = 0 Тогда
// Предупреждение("Не выбраны склады!");
// Отказ = Истина;
// Возврат;
//КонецЕсли;
Если КоличествоУровнейМестХран ения = 0 Тогда
Предупреждение("Не указано количество уровней мест хранения!");
Отказ = Истина;
Возврат;
КонецЕсли;
КоличествоИзмерений = ПостроительОтчета.Измерен� �яСтроки.Количество() - 1;
ИзмерениеНоменклатура = ПостроительОтчета.Измерен� �яСтроки.Найти("Номенклатур а");
Если ИзмерениеНоменклатура = Неопределено Тогда
Предупреждение("Отсутствуе т обязательная группировка но номенклатуре!");
Отказ = Истина;
Возврат;
КонецЕсли;
Индекс = ПостроительОтчета.Измерен� �яСтроки.Индекс(ИзмерениеН� �менклатура);
Если Индекс <> КоличествоИзмерений Тогда
Предупреждение ("Группировка: ""Номенклатура"" должна быть последней в измерениях строк.");
ПостроительОтчета.Измерен� �яСтроки.Сдвинуть(Измерени� �Номенклатура, КоличествоИзмерений - Индекс);
КонецЕсли;
СоответствиеСтрок = Новый Соответствие;
Для Каждого СтрокаПостроителя Из ПостроительОтчета.Измерен� �яСтроки Цикл
Если СоответствиеСтрок[СтрокаПостроителя.ПутьКДа� �ным] = Неопределено Тогда
СоответствиеСтрок.Вставит� �(СтрокаПостроителя.ПутьКД� �нным, СтрокаПостроителя);
Иначе
Предупреждение("Повторяюща яся группировка " + СтрокаПостроителя.Предста� �ление + "." + Символы.ПС +
"Нельзя использовать одинаковые поля группировки строк!");
Отказ = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ПроверитьКорректностьНаст роек()
// В текст для построителя отчета вставляет свойства.
// Скопирована из общего модуля и изменена.
Процедура ДобавитьВТекстСвойстваЛок ально(ТаблицаПолей, Текст, СтруктураПредставлениеПол ей, мСоответствиеНазначений,
СтруктураПараметры, ТекстИсточникиСведений="", ТекстПоляКатегорий="",
ТекстПоляСвойств="", ТекстПоляСгруппироватьПо = "",
ЗаменятьСвойства = "//СВОЙСТВА", ЗаменятьКатегории = "//КАТЕГОРИИ",
ЗаменятьСоединения = "//СОЕДИНЕНИЯ", ЗаменятьСгруппироватьПо = "//СГРУППИРОВАТЬПО",
ИдентификаторыПараметровД ляОтборовПоКатегориям = "", ЗаменятьИтоги = "//ИТОГИ",
ЗаменятьПредставления = "//ПРЕДСТАВЛЕНИЯ_СВОЙСТВА") Экспорт
// Добавляемые фрагменты запроса.
ТекстПоляСвойствДляГруппи ровки = "";
ТекстИсточникиСведений ="";
ТекстПоляСвойств = "";
ТекстПоляСвойствИтоги = "";
ТекстПоляСвойствПредставл ения = "";
Индекс = 0;
СвойстваОбъектов = ПланыВидовХарактеристик.С� �ойстваОбъектов.Выбрать();
Пока СвойстваОбъектов.Следующи� �() Цикл
Если СвойстваОбъектов.ЭтоГрупп� � ИЛИ СвойстваОбъектов.ПометкаУ� �аления Тогда
Продолжить;
КонецЕсли;
Поля = ТаблицаПолей.НайтиСтроки(Н овый Структура("Назначение", СвойстваОбъектов.Назначен� �еСвойства));
Для Каждого Поле из Поля Цикл
// Для списка всех полей.
ТекстПоляСвойств = ТекстПоляСвойств + ",
| Свойство" + Индекс + ".Значение" + " КАК " + "Свойство" + Индекс + "Значение";
ТекстПоляСвойствИтоги = ТекстПоляСвойствИтоги + ",
| МИНИМУМ(Свойство" + Индекс + ".Значение)";
ТекстПоляСвойствПредставл ения = ТекстПоляСвойствПредставл ения + ",
| Свойство" + Индекс + ".Значение.Представление" + " КАК " + "Свойство" + Индекс + "ЗначениеПредставление";
ТекстПоляСвойствДляГруппи ровки = ТекстПоляСвойствДляГруппи ровки + ",
| Свойство" + Индекс + ".Значение";
// Источник для свойств.
ТекстИсточникиСведений = ТекстИсточникиСведений + Символы.ПС +
"{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияС� �ойствОбъектов КАК Свойство" + Индекс + "
|ПО Свойство" + Индекс + ".Объект = " + Поле.ПутьКДанным + "
|И Свойство" + Индекс + ".Свойство = &ПараметрСвойство" + Индекс + "}";
СтруктураПараметры.Встави� �ь("ПараметрСвойство" + Индекс, СвойстваОбъектов.Ссылка);
СтруктураПредставлениеПол ей.Вставить("Свойство" + Индекс + "Значение", СвойстваОбъектов.Наименов� �ние + " (св-во " + Поле.Представление + ")");
мСоответствиеНазначений.В� �тавить(СвойстваОбъектов.Н� �именование + " (св-во " + Поле.Представление + ")", СвойстваОбъектов.Ссылка);
Индекс = Индекс + 1;
КонецЦикла;
КонецЦикла;
Текст = СтрЗаменить(Текст, ЗаменятьСвойства, ТекстПоляСвойств);
Текст = СтрЗаменить(Текст, ЗаменятьИтоги, ТекстПоляСвойствИтоги);
Текст = СтрЗаменить(Текст, ЗаменятьПредставления, ТекстПоляСвойствПредставл ения);
Текст = СтрЗаменить(Текст, ЗаменятьСоединения, ТекстИсточникиСведений);
Текст = СтрЗаменить(Текст, ЗаменятьСгруппироватьПо, ТекстПоляСвойствДляГруппи ровки);
КонецПроцедуры // ДобавитьВТекстСвойстваЛок ально()
// Производит рекурсивный обход выборки,
// выводит в макет строки из текущей выборки.
//
// Параметры:
// Выборка - текущая выборка.
// НомерГруппировки - текущий номер группировки строк.
//
Процедура ВывестиСтроку(Выборка, НомерГруппировки)
// Обойдем в цикле переданную выборку.
Пока Выборка.Следующий() Цикл
НазваниеГруппировки = Выборка.Группировка();
ЗначениеГруппировки = Выборка[НазваниеГруппировки];
Уровень = Выборка.Уровень();
ЭтоНеИтогПоИерархии = (Выборка.ТипЗаписи() <> ТипЗаписиЗапроса.ИтогПоИе� �архии);
ЭтоНижнийУровень = (НазваниеГруппировки = "Номенклатура" И ЭтоНеИтогПоИерархии);
Если мПоляСПредставлениями[НазваниеГруппировки] = Неопределено Тогда
ПредставлениеГруппировки = Выборка[НазваниеГруппировки];
Иначе
ПредставлениеГруппировки = Выборка[НазваниеГруппировки + "Представление"];
КонецЕсли;
// Если тип записи - это итог по иерархии,
// то для вывода будем использовать секции, предназначенные для иерархии.
Если ЭтоНижнийУровень Тогда
мНомерСтроки = мНомерСтроки + 1;
СекцияНачало = мСписокНачало;
СекцияНачало.Параметры.Ном ерСтроки = мНомерСтроки;
СекцияНоменклатура = мСписокНоменклатура;
СекцияДопПоле = мСписокДопПоле;
Иначе
СекцияНачало = мСписокГруппаНачало;
СекцияНоменклатура = мСписокГруппаНоменклатура ;
СекцияДопПоле = мСписокГруппаДопПоле;
КонецЕсли;
СекцияНоменклатура.Параме� �ры.Измерение = ПредставлениеГруппировки;
Если ЭтоНеИтогПоИерархии Тогда
СекцияНоменклатура.Параме� �ры.Расшифровка = ЗначениеГруппировки;
КонецЕсли;
// Если выведены все группировки верхних уровней,
// то выведем доп. поля.
Если ЭтоНижнийУровень Тогда
ВыборкаЕдиницыИзмерения = Выборка.Выбрать(ОбходРезул ьтатаЗапроса.ПоГруппировк� �м, "ЕдиницаИзмерения");
Пока ВыборкаЕдиницыИзмерения.С� �едующий() Цикл
мТабДок.Вывести(СекцияНача ло, Уровень, , Истина);
Если ВыборкаЕдиницыИзмерения.В� �с = 0 Тогда
мВесВведенНеДляВсехТоваро в = Истина;
Иначе
мИтогВес = мИтогВес + ВыборкаЕдиницыИзмерения.В� �с;
КонецЕсли;
Для Тмп = 1 По мСоответствиеДопПолейДо.К� �личество() Цикл
ВывестиПолеВОтчет(мСоотве� �ствиеДопПолейДо[Тмп], ВыборкаЕдиницыИзмерения, СекцияДопПоле);
КонецЦикла;
СтрокаДопПолейВместе = "";
Для Тмп = 1 По мКоличествоДопПолейВместе Цикл
Если Не ПустаяСтрока(Строка(Выборк аЕдиницыИзмерения[мСоответствиеДопПолейВмес те[Тмп]])) Тогда
Если ПустаяСтрока(СтрокаДопПол� �йВместе) Тогда
СтрокаДопПолейВместе = СтрокаДопПолейВместе + " (" + ВыборкаЕдиницыИзмерения[мСоответствиеДопПолейВмес те[Тмп]];
Иначе
СтрокаДопПолейВместе = СтрокаДопПолейВместе + ", " + ВыборкаЕдиницыИзмерения[мСоответствиеДопПолейВмес те[Тмп]];
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Не ПустаяСтрока(СтрокаДопПол� �йВместе) Тогда
СекцияНоменклатура.Параме� �ры.Измерение = Строка(СекцияНоменклатура. Параметры.Измерение) + СтрокаДопПолейВместе + ")";
КонецЕсли;
мТабДок.Присоединить(Секци яНоменклатура);
Для Тмп = 1 По мСоответствиеДопПолейПосл е.Количество() Цикл
ВывестиПолеВОтчет(мСоотве� �ствиеДопПолейПосле[Тмп], ВыборкаЕдиницыИзмерения, СекцияДопПоле);
КонецЦикла;
КонецЦикла;
Иначе
мТабДок.Вывести(СекцияНача ло, Уровень, , Истина);
// Для группировок верхних уровней и иерархии выведем
// пустые ячейки доп. полей.
Для Тмп = 1 По мСоответствиеДопПолейДо.К� �личество() Цикл
ВывестиПустоеПолеВОтчет(м� �оответствиеДопПолейДо[Тмп], Выборка, СекцияДопПоле);
КонецЦикла;
мТабДок.Присоединить(Секци яНоменклатура);
Для Тмп = 1 По мСоответствиеДопПолейПосл е.Количество() Цикл
ВывестиПустоеПолеВОтчет(м� �оответствиеДопПолейПосле[Тмп], Выборка, СекцияДопПоле);
КонецЦикла;
// Если тип записи не итог по иерархии,
// то нужно выбрать следующую группировку.
Если ЭтоНеИтогПоИерархии Тогда
ВывестиСтроку(Выборка.Выбр ать(ОбходРезультатаЗапрос� �.ПоГруппировкам, мСоответствиеГруппировок[НомерГруппировки + 1]), НомерГруппировки + 1);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ВывестиСтроку()
Функция ВосстановитьНастройки() Экспорт
Перем СохраненнаяНастройка;
СтруктураНастройки = Новый Структура;
СтруктураНастройки.Встави� �ь("Пользователь" , глЗначениеПеременной("глТе кущийПользователь"));
СтруктураНастройки.Встави� �ь("ИмяОбъекта" , Строка(ЭтотОбъект));
СтруктураНастройки.Встави� �ь("НаименованиеНастройки", ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.Наимено� �аниеНастройки));
Результат = УниверсальныеМеханизмы.Во� �становлениеНастроек(Струк тураНастройки);
Если Результат <> Неопределено Тогда
мТекущаяНастройка = Результат;
ВосстановитьНастройкиИзСт руктуры(мТекущаяНастройка. СохраненнаяНастройка);
Иначе
мТекущаяНастройка = СтруктураНастройки;
КонецЕсли;
ОбновитьСохраненныеНастро йки();
КонецФункции // ВосстановитьНастройки()
// Процедура восстанавливает сохраненные настройки при открытии обработки.
//
Процедура ВосстановитьНастройкиПриО ткрытии() Экспорт
ЗаполнитьПостроительОтчет а();
СтруктураНастройки = Новый Структура;
СтруктураНастройки.Встави� �ь("Пользователь", глЗначениеПеременной("глТе кущийПользователь"));
СтруктураНастройки.Встави� �ь("ИмяОбъекта" , Строка(ЭтотОбъект));
Если УниверсальныеМеханизмы.По� �учитьНастройкуИспользова� �ьПриОткрытии(СтруктураНас тройки) Тогда
мТекущаяНастройка = СтруктураНастройки;
ВосстановитьНастройкиИзСт руктуры(СтруктураНастройк� �.СохраненнаяНастройка);
КонецЕсли;
ОбновитьСохраненныеНастро йки();
КонецПроцедуры // ВосстановитьНастройкиПриО ткрытии()
// Заполняет настройки отчета из структуры сохраненных настроек
//
Функция ВосстановитьНастройкиИзСт руктуры(СтруктураСНастрой� �ами) Экспорт
Перем ТекНастройка;
Если СтруктураСНастройками.Сво� �ство("НастройкиПостроител� �", ТекНастройка) Тогда
ПостроительОтчета.Установ� �тьНастройки(ТекНастройка);
КонецЕсли;
СтруктураСНастройками.Сво� �ство("ТаблицаНастройкиПол� �йПечать" , ТаблицаНастройкиПолейПеча ть);
СтруктураСНастройками.Сво� �ство("СписокСкладов" , СписокСкладов);
СтруктураСНастройками.Сво� �ство("ВыводитьЗаголовок" , ВыводитьЗаголовок);
СтруктураСНастройками.Сво� �ство("ПоказыватьФорму" , ПоказыватьФорму);
СтруктураСНастройками.Сво� �ство("ИспользоватьСвойств� �" , ИспользоватьСвойства);
СтруктураСНастройками.Сво� �ство("КоличествоУровнейМе� �тХранения" , КоличествоУровнейМестХран ения);
СтруктураСНастройками.Сво� �ство("ПредставленияПриори� �етовМестХранения", ПредставленияПриоритетовМ естХранения);
КонецФункции // ВосстановитьНастройкиИзСт руктуры()
Процедура СохранитьНастройки() Экспорт
Перем СохраненнаяНастройка;
СохраненнаяНастройка = Новый Структура;
СформироватьСтруктуруДляС охраненияНастроек(Сохране� �наяНастройка);
СтруктураНастройки = Новый Структура;
СтруктураНастройки.Встави� �ь("Пользователь", глЗначениеПеременной("глТе кущийПользователь"));
СтруктураНастройки.Встави� �ь("ИмяОбъекта", Строка(ЭтотОбъект));
СтруктураНастройки.Встави� �ь("НаименованиеНастройки", ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.Наимено� �аниеНастройки));
СтруктураНастройки.Встави� �ь("СохраненнаяНастройка", СохраненнаяНастройка);
СтруктураНастройки.Встави� �ь("ИспользоватьПриОткрыти� �", Ложь);
СтруктураНастройки.Встави� �ь("СохранятьАвтоматически" , Ложь);
Результат = УниверсальныеМеханизмы.Со� �ранениеНастроек(Структура Настройки);
Если Результат <> Неопределено Тогда
мТекущаяНастройка = Результат;
Иначе
мТекущаяНастройка = СтруктураНастройки;
КонецЕсли;
КонецПроцедуры // СохранитьНастройки()
// Процедура добавляет колонку в таблицу значений, если ее там нет.
// Параметры:
// ТЗ - таблица значений, в которую нужно добавить колонку;
// ИмяКолонки - имя колонки, которую нужно добавить.
Процедура ДобавитьКолонкуВТЗ(ТЗ, ИмяКолонки, ЗначениеПоУмолчанию = Неопределено)
Если ТЗ.Колонки.Найти(ИмяКолонк� �) = Неопределено Тогда
ТЗ.Колонки.Добавить(ИмяКол� �нки);
ТЗ.ЗаполнитьЗначения(Значе ниеПоУмолчанию, ИмяКолонки);
КонецЕсли;
КонецПроцедуры // ДобавитьКолонкуВТЗ()
// Процедура обновляет настройки после их восстановления.
//
Процедура ОбновитьСохраненныеНастро йки()
ДобавитьКолонкуВТЗ(Таблиц� �НастройкиПолейПечать, "Поле");
ДобавитьКолонкуВТЗ(Таблиц� �НастройкиПолейПечать, "Псевдоним");
ДобавитьКолонкуВТЗ(Таблиц� �НастройкиПолейПечать, "ВыводитьНаПечать");
ДобавитьКолонкуВТЗ(Таблиц� �НастройкиПолейПечать, "Положение");
ДобавитьКолонкуВТЗ(Таблиц� �НастройкиПолейПечать, "Имя");
ДобавитьКолонкуВТЗ(Таблиц� �НастройкиПолейПечать, "ПутьКДанным");
ДобавитьКолонкуВТЗ(Таблиц� �НастройкиПолейПечать, "Ширина");
ДобавитьКолонкуВТЗ(Таблиц� �НастройкиПолейПечать, "Выравнивание", ГоризонтальноеПоложение.А� �то);
ДобавитьКолонкуВТЗ(Предст� �вленияПриоритетовМестХра� �ения, "Приоритет");
ДобавитьКолонкуВТЗ(Предст� �вленияПриоритетовМестХра� �ения, "Псевдоним");
ОбновитьНастройкиПечати();
КонецПроцедуры // ОбновитьСохраненныеНастро йки()
// Обновляет таблицу с настройками вывода доп. полей на печать.
//
Процедура ОбновитьНастройкиПечати() Экспорт
КоличествоСтрок = ТаблицаНастройкиПолейПеча ть.Количество() - 1;
Для Тмп = 0 По КоличествоСтрок Цикл
СтрокаНастройки = ТаблицаНастройкиПолейПеча ть[КоличествоСтрок - Тмп];
Если ПостроительОтчета.Выбранн� �еПоля.Найти(СтрокаНастрой� �и.Имя) = Неопределено Тогда
ТаблицаНастройкиПолейПеча ть.Удалить(СтрокаНастройки );
КонецЕсли;
КонецЦикла;
Для Каждого Поле Из ПостроительОтчета.Выбранн� �еПоля Цикл
Если ТаблицаНастройкиПолейПеча ть.Найти(Поле.Имя, "Имя") = Неопределено Тогда
НоваяСтрока = ТаблицаНастройкиПолейПеча ть.Добавить();
НоваяСтрока.Поле = Поле.Представление;
НоваяСтрока.Псевдоним = Поле.Представление;
НоваяСтрока.ВыводитьНаПеч� �ть = Истина;
НоваяСтрока.Имя = Поле.Имя;
НоваяСтрока.ПутьКДанным = Поле.ПутьКДанным;
НоваяСтрока.Ширина = 14;
НоваяСтрока.Выравнивание = ГоризонтальноеПоложение.А� �то;
НоваяСтрока.Положение = мСписокПоложенийДляПечати[0].Значение;
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ОбновитьНастройкиПечати()
// Процедура формирует печатную форму в соответствии с заданными настройками.
//
// Параметры:
//
//
Процедура Печать(НаПринтер = Ложь) Экспорт
Отказ = Ложь;
ПроверитьКорректностьНаст роек(Отказ);
Если Отказ Тогда
ФормаНастройки = ПолучитьФорму();
Если Не ФормаНастройки.Открыта() Тогда
мИнициализироватьНастройк иПриОткрытии = Ложь;
ФормаНастройки.Открыть();
КонецЕсли;
КонецЕсли;
Если Отказ Тогда
Возврат;
КонецЕсли;
РезультатЗапроса = ВыполнитьЗапрос(Новый Структура("НоменклатураПре дставление, ЕдиницаИзмеренияПредставл ение, СкладПредставление"));
мТабДок = Новый ТабличныйДокумент;
мТабДок.ИмяПараметровПеча� �и = "Обработки.ПечатьРаскладки НоменклатурыПоМестамХране ния";
мМакет = ПолучитьМакет("Макет");
Если ВыводитьЗаголовок Тогда // выведем заголовок
Секция = мМакет.ПолучитьОбласть("За� �оловок");
Секция.Параметры.ТекстЗаго ловка = СокрЛП(Документ);
Секция.Параметры.Склад = СокрЛП(мСклад);
мТабДок.Вывести(Секция);
КонецЕсли;
ОбластьМакета = мМакет.ПолучитьОбласть("По� �упатель");
ПредставлениеПолучателя = ФормированиеПечатныхФорм.� �писаниеОрганизации("Полно� �Наименование,");
ОбластьМакета.Параметры.Пр едставлениеПолучателя = ПредставлениеПолучателя;
мТабДок.Вывести(ОбластьМак ета);
Секция = мМакет.ПолучитьОбласть("Вр� �мяПечати");
Секция.Параметры.ВремяПеча ти = "Дата и время печати: " + ТекущаяДата() + ". Пользователь: " + СокрЛП(глЗначениеПеременн� �й("глТекущийПользователь")) ;
мТабДок.Вывести(Секция);
Секция = мМакет.ПолучитьОбласть("Ша� �ка|Начало");
мТабДок.Вывести(Секция);
Секция = мМакет.ПолучитьОбласть("Ша� �ка|ДопПоле");
мКоличествоДопПолейДо = 0;
мСоответствиеДопПолейДо = Новый Соответствие;
// Выведем доп. поля, которые нужно выводить ДО номенклатуры, в шапку.
// Заодно посчитаем их количество и запомним соответствие имен.
ТекДопПоле = 0;
Для Каждого ДопПоле Из ТаблицаНастройкиПолейПеча ть Цикл
Если ДопПоле.ВыводитьНаПечать И ДопПоле.Положение = "До номенклатуры" Тогда
ТекДопПоле = ТекДопПоле + 1;
мСоответствиеДопПолейДо.В� �тавить(ТекДопПоле, ДопПоле.Имя);
мКоличествоДопПолейДо = мКоличествоДопПолейДо + ВывестиПолеВШапку(ДопПоле, РезультатЗапроса, Секция);
КонецЕсли;
КонецЦикла;
мКоличествоДопПолейВместе = 0;
мСоответствиеДопПолейВмес те = Новый Соответствие;
// Посчитаем количество доп. полей, которые должны выводиться вместе с номенклатурой
// и запомним соответствие имен.
Для Каждого ДопПоле Из ТаблицаНастройкиПолейПеча ть Цикл
Если ДопПоле.ВыводитьНаПечать И ДопПоле.Положение = "Вместе с номенклатурой" Тогда
мКоличествоДопПолейВместе = мКоличествоДопПолейВместе + 1;
мСоответствиеДопПолейВмес те.Вставить(мКоличествоДоп ПолейВместе, ДопПоле.Имя);
КонецЕсли;
КонецЦикла;
мКоличествоГруппировок = - 1;
мСоответствиеГруппировок = Новый Соответствие;
// Посчитаем группировок количество и запомним соответствие имен.
ТекстГруппировок = "";
Для Каждого ГруппировкаСтрок Из мИзмеренияСтроки Цикл
мКоличествоГруппировок = мКоличествоГруппировок + 1;
мСоответствиеГруппировок.� �ставить(мКоличествоГруппи ровок, ГруппировкаСтрок.Ключ);
КонецЦикла;
Секция = мМакет.ПолучитьОбласть("Ша� �ка|Номенклатура");
мТабДок.Присоединить(Секци я);
Секция = мМакет.ПолучитьОбласть("Ша� �ка|ДопПоле");
мКоличествоДопПолейПосле = 0;
мСоответствиеДопПолейПосл е = Новый Соответствие;
// Выведем доп. поля, которые нужно выводить ПОСЛЕ номенклатуры, в шапку.
// Заодно посчитаем их количество и запомним соответствие имен.
ТекДопПоле = 0;
Для Каждого ДопПоле Из ТаблицаНастройкиПолейПеча ть Цикл
Если ДопПоле.ВыводитьНаПечать И ДопПоле.Положение = "После номенклатуры" Тогда
ТекДопПоле = ТекДопПоле + 1;
мСоответствиеДопПолейПосл е.Вставить(ТекДопПоле, ДопПоле.Имя);
мКоличествоДопПолейПосле = мКоличествоДопПолейПосле + ВывестиПолеВШапку(ДопПоле, РезультатЗапроса, Секция);
КонецЕсли;
КонецЦикла;
мСписокНачало = мМакет.ПолучитьОбласть("Сп� �сок|Начало");
мСписокНоменклатура = мМакет.ПолучитьОбласть("Сп� �сок|Номенклатура");
мСписокДопПоле = мМакет.ПолучитьОбласть("Сп� �сок|ДопПоле");
мСписокГруппаНачало = мМакет.ПолучитьОбласть("Сп� �сокГруппа|Начало");
мСписокГруппаНоменклатура = мМакет.ПолучитьОбласть("Сп� �сокГруппа|Номенклатура");
мСписокГруппаДопПоле = мМакет.ПолучитьОбласть("Сп� �сокГруппа|ДопПоле");
мНомерСтроки = 0;
МетаданныеДокумента = Метаданные.Документы[ВидДокументов];
ЕстьСоставНабора = ОбщегоНазначения.ЕстьТабЧ� �стьДокумента("СоставНабор� �", МетаданныеДокумента);
мИтогВес = 0;
мВесВведенНеДляВсехТоваро в = Ложь;
ВывестиСтроку(РезультатЗа� �роса.Выбрать(ОбходРезульт� �таЗапроса.ПоГруппировкам, мСоответствиеГруппировок[0]), 0);
ШиринаНоменклатура = мМакет.ПолучитьОбласть("Но� �енклатура").ШиринаТаблицы;
ШиринаНачало = мМакет.ПолучитьОбласть("На� �ало").ШиринаТаблицы;
ТекКолонка = ШиринаНачало + 1;
Для Тмп = 1 По мСоответствиеДопПолейДо.К� �личество() Цикл
ТекКолонка = ТекКолонка + УстановитьШиринуПолей(мСо� �тветствиеДопПолейДо[Тмп], РезультатЗапроса, ТекКолонка);
КонецЦикла;
ТекКолонка = ШиринаНачало + 1 + ШиринаНоменклатура + мКоличествоДопПолейДо;
Для Тмп = 1 По мСоответствиеДопПолейПосл е.Количество() Цикл
ТекКолонка = ТекКолонка + УстановитьШиринуПолей(мСо� �тветствиеДопПолейПосле[Тмп], РезультатЗапроса, ТекКолонка);
КонецЦикла;
Секция = мМакет.ПолучитьОбласть("Ит� �гоВес");
Секция.Параметры.ИтогВес = "Общий вес товаров: " + мИтогВес + " " + мЕдиницаИзмеренияВеса + "."
+ ?(мВесВведенНеДляВсехТовар ов, " Вес введен не для всех товаров.", "");
мТабДок.Вывести(Секция);
УниверсальныеМеханизмы.На� �ечататьДокумент(мТабДок, , НаПринтер, "Бланк товарного наполнения");
КонецПроцедуры // Печать()
// Сохраняет настройки построителя, добавляет служебные поля, получает результат,
// восстанавливает настройки.
//
// Параметры:
// СлужебныеПоля - структура со служебными полями.
//
// Возвращаемое значение - РезультатЗапроса.
//
Функция ВыполнитьЗапрос(Служебные� �оля)
Настройки = ПостроительОтчета.Получит� �Настройки();
ЗаполнитьПостроительОтчет а();
ПостроительОтчета.Установ� �тьНастройки(Настройки);
Для Каждого Поле Из СлужебныеПоля Цикл
ПостроительОтчета.Доступн� �еПоля.Найти(Поле.Ключ).Поле = Истина;
ПостроительОтчета.Выбранн� �еПоля.Добавить(Поле.Ключ);
КонецЦикла;
ПостроительОтчета.Доступн� �еПоля.Склад.Измерение = Истина;
ПостроительОтчета.Доступн� �еПоля.Приоритет.Измерение = Истина;
ПостроительОтчета.Доступн� �еПоля.ЕдиницаИзмерения.Из� �ерение = Истина;
ПостроительОтчета.Измерен� �яКолонки.Очистить();
ПостроительОтчета.Измерен� �яКолонки.Добавить("Приорит ет" , ,ТипИзмеренияПостроителяО� �чета.Элементы);
ПостроительОтчета.Измерен� �яКолонки.Добавить("Склад" , ,ТипИзмеренияПостроителяО� �чета.Элементы);
ПостроительОтчета.Измерен� �яКолонки.Добавить("Единица Измерения", ,ТипИзмеренияПостроителяО� �чета.Элементы);
мИзмеренияСтроки = Новый Структура;
Для Каждого ИзмерениеСтроки Из ПостроительОтчета.Измерен� �яСтроки Цикл
мИзмеренияСтроки.Вставить( ИзмерениеСтроки.Имя);
КонецЦикла;
РезультатЗапроса = ПостроительОтчета.Результ� �т;
ПостроительОтчета.Установ� �тьНастройки(Настройки);
ПостроительОтчета.Доступн� �еПоля.Склад.Измерение = Ложь;
ПостроительОтчета.Доступн� �еПоля.Приоритет.Измерение = Ложь;
ПостроительОтчета.Доступн� �еПоля.ЕдиницаИзмерения.Из� �ерение = Ложь;
Для Каждого Поле Из СлужебныеПоля Цикл
ПостроительОтчета.Доступн� �еПоля.Найти(Поле.Ключ).Поле = Ложь;
КонецЦикла;
Возврат РезультатЗапроса;
КонецФункции // ВыполнитьЗапрос()
// Функция возвращает массив складов для вывода остатков товаров.
//
// Возвращаемое значение:
// Массив - Массив складов для вывода остатков товаров.
//
Функция ПолучитьМассивСкладов()
МассивСкладов = СписокСкладов.ВыгрузитьЗн� �чения();
Если МассивСкладов.Найти(мСклад ) = Неопределено Тогда
МассивСкладов.Добавить(мСк лад);
КонецЕсли;
Возврат МассивСкладов;
КонецФункции // ПолучитьМассивСкладов()
// Процедура заполняет построитель отчета.
//
// Параметры:
// ИмяМакета -Название макета, в который выводится печатная форма.
//
Процедура ЗаполнитьПостроительОтчет а(НеЗаполнятьНастройки = Ложь) Экспорт
МетаданныеДокумента = Метаданные.Документы[ВидДокументов];
ИмяДокумента = МетаданныеДокумента.Имя;
Если мИмяМакета = Неопределено И ОбщегоНазначения.ЕстьРекв� �зитДокумента("СкладОтправ� �тель", МетаданныеДокумента) Тогда
мИмяМакета = "БланкОтправитель";
КонецЕсли;
Если ОбщегоНазначения.ЕстьРекв� �зитДокумента("Склад", МетаданныеДокумента) Тогда
мИмяРеквизитаСклад = "Склад";
ИначеЕсли ОбщегоНазначения.ЕстьРекв� �зитДокумента("СкладОрдер", МетаданныеДокумента) Тогда
мИмяРеквизитаСклад = "СкладОрдер";
ИначеЕсли ОбщегоНазначения.ЕстьРекв� �зитДокумента("СкладГруппа" , МетаданныеДокумента) Тогда
мИмяРеквизитаСклад = "СкладГруппа";
ИначеЕсли мИмяМакета = "БланкОтправитель"
И ОбщегоНазначения.ЕстьРекв� �зитДокумента("СкладОтправ� �тель", МетаданныеДокумента) Тогда
мИмяРеквизитаСклад = "СкладОтправитель";
ИначеЕсли мИмяМакета = "БланкПолучатель"
И ОбщегоНазначения.ЕстьРекв� �зитДокумента("СкладПолуча� �ель", МетаданныеДокумента) Тогда
мИмяРеквизитаСклад = "СкладПолучатель";
КонецЕсли;
мСклад = Документ[мИмяРеквизитаСклад];
ЕстьСкладВТабЧасти = ОбщегоНазначения.ЕстьРекв� �зитТабЧастиДокумента("Скл� �д", МетаданныеДокумента, "Товары");
ЕстьСоставНабора = ОбщегоНазначения.ЕстьТабЧ� �стьДокумента("СоставНабор� �", МетаданныеДокумента);
Если ОбщегоНазначения.ЕстьРекв� �зитДокумента("Сделка", МетаданныеДокумента) Тогда
ДокументРезерва = Документ.Сделка;
Иначе
ДокументРезерва = Документы.ЗаказПокупателя. ПустаяСсылка();
КонецЕсли;
ПостроительОтчета.Парамет� �ы.Вставить("ТекДокумент" , Документ);
ПостроительОтчета.Парамет� �ы.Вставить("МассивСклады" , ПолучитьМассивСкладов());
ПостроительОтчета.Парамет� �ы.Вставить("ДокументРезерв а", ДокументРезерва);
// Текст запроса для отбора по номенклатуре.
ТекстЗапросаНоменклатура = "
|ВЫБРАТЬ РАЗЛИЧНЫЕ
|";
Если ЕстьСоставНабора Тогда
ТекстЗапросаНоменклатура = ТекстЗапросаНоменклатура + "
| ЕСТЬNULL(ДокСостав.Номенклат ура, Док.Номенклатура) КАК Номенклатура
|";
Иначе
ТекстЗапросаНоменклатура = ТекстЗапросаНоменклатура + "
| Док.Номенклатура КАК Номенклатура
|";
КонецЕсли;
ТекстЗапросаНоменклатура = ТекстЗапросаНоменклатура + "
|ИЗ
| Документ." + ИмяДокумента + ".Товары КАК Док
|";
Если ЕстьСоставНабора Тогда
ТекстЗапросаНоменклатура = ТекстЗапросаНоменклатура + "
|ЛЕВОЕ СОЕДИНЕНИЕ
| Документ." + ИмяДокумента + ".СоставНабора КАК ДокСостав
|ПО
| ДокСостав.Ссылка = Док.Ссылка
| И ДокСостав.КлючСтроки = Док.КлючСтроки
|";
КонецЕсли;
ТекстЗапросаНоменклатура = ТекстЗапросаНоменклатура + "
|ГДЕ
| Док.Ссылка = &ТекДокумент
| " + ?(ТолькоНеотсканированныйТ овар, "И Док.Количество <> Док.КоличествоОтсканирова� �ного", "") + "
|";
ТекстРодительМестаХранени я = "";
Для Тмп = 1 По КоличествоУровнейМестХран ения - 1 Цикл
ТекстРодительМестаХранени я = ТекстРодительМестаХранени я + ".Родитель";
КонецЦикла;
ДокументПроведен = Документ.Проведен;
ТекстЗапроса = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЗапросАдрес.*
|//СВОЙСТВА
|//ПРЕДСТАВЛЕНИЯ_СВОЙСТВА
|ИЗ
| (ВЫБРАТЬ
| ОсновнаяТаблица.Номенклат� �ра КАК Номенклатура,
| ОсновнаяТаблица.Номенклат� �ра.Наименование КАК НоменклатураПредставление ,
| ОсновнаяТаблица.ЕдиницаИз� �ерения КАК ЕдиницаИзмерения,
| ОсновнаяТаблица.ЕдиницаИз� �ерения.Наименование КАК ЕдиницаИзмеренияПредставл ение,
| ОсновнаяТаблица.ЕдиницаИз� �ерения.Вес * ОсновнаяТаблица.Количеств� � КАК Вес,
| ОсновнаяТаблица.Склад КАК СкладОтгрузкиОприходовани я,
| ОсновнаяТаблица.Количеств� � КАК Количество,
| ЕСТЬNULL(РегМестаХраненияОс� �овной.МестоХранения" + ТекстРодительМестаХранени я + ", """") КАК МестоХраненияРодитель,
| ЕСТЬNULL(РегМестаХранения.Ме стоХранения.Наименование, """") КАК МестоХранения,
| ЕСТЬNULL(РегМестаХранения.Пр иоритет, 0) КАК Приоритет,
| СпрСклады.Ссылка КАК Склад,
| СпрСклады.Наименование КАК СкладПредставление,
| ВЫРАЗИТЬ(((ЕСТЬNULL(ТоварыНаС кладах.КоличествоОстаток, 0)
| - ЕСТЬNULL(ТоварыВРезервеНаСк� �адах.КоличествоОстаток, 0)
| - ЕСТЬNULL(ТоварыКПередачеСоС� �ладов.КоличествоОстаток, 0)
| + ЕСТЬNULL(РезервыПоЗаказу.Кол ичествоОстаток, 0)
|" + ?(ДокументПроведен, "
// Движения по документу.
| + ЕСТЬNULL(ТоварыНаСкладахПоД� �кументу.Количество, 0)
| - ЕСТЬNULL(ТоварыВРезервеНаСк� �адахПоДокументу.Количеств о, 0)
| - ЕСТЬNULL(ТоварыКПередачеСоС� �ладовПоДокументу.Количест во, 0)", "") + "
| ) * ОсновнаяТаблица.Номенклат� �ра.ЕдиницаХраненияОстатко в.Коэффициент
| / ОсновнаяТаблица.ЕдиницаИз� �ерения.Коэффициент) КАК ЧИСЛО(15, 3)) КАК Остаток
| ИЗ
| (ВЫБРАТЬ
| ДокИсточникПервичный.Скла� � КАК Склад,
| ДокИсточникПервичный.Номе� �клатура КАК Номенклатура,
| ДокИсточникПервичный.Един� �цаИзмерения КАК ЕдиницаИзмерения,
| ДокИсточникПервичный.Коли� �ество КАК Количество,
| МИНИМУМ(ЕСТЬNULL(РегМестаХра нения.Приоритет, 0)) КАК МинПриоритет
| ИЗ
| (ВЫБРАТЬ
| " + ?(ЕстьСкладВТабЧасти, "ТЧТовары.Склад", "Документ." + мИмяРеквизитаСклад) + " КАК Склад,";
Если ЕстьСоставНабора Тогда
ТекстЗапроса = ТекстЗапроса + "
| ЕСТЬNULL(ТЧСоставНабора.Номе нклатура, ТЧТовары.Номенклатура) КАК Номенклатура,
| ЕСТЬNULL(ТЧСоставНабора.Един ицаИзмерения, ТЧТовары.ЕдиницаИзмерения) КАК ЕдиницаИзмерения,
| СУММА(ЕСТЬNULL(ТЧСоставНабор а.Количество * ТЧТовары.Количество"
+ ?(ТолькоНеотсканированныйТ овар, " - ТЧСоставНабора.Количество� �тсканированного", "")
+ ", ТЧТовары.Количество" + ?(ТолькоНеотсканированныйТ овар, " - ТЧТовары.КоличествоОтскан� �рованного", "") + ")) КАК Количество
|";
Иначе
ТекстЗапроса = ТекстЗапроса + "
| ТЧТовары.Номенклатура КАК Номенклатура,
| ТЧТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| СУММА(ТЧТовары.Количество" + ?(ТолькоНеотсканированныйТ овар, " - ТЧТовары.КоличествоОтскан� �рованного", "") + ") КАК Количество
|";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
| ИЗ
| Документ." + ИмяДокумента + " КАК Документ
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ." + ИмяДокумента + ".Товары КАК ТЧТовары
| ПО ТЧТовары.Ссылка = Документ.Ссылка";
Если ЕстьСоставНабора Тогда
ТекстЗапроса = ТекстЗапроса + "
| ЛЕВОЕ СОЕДИНЕНИЕ Документ." + ИмяДокумента + ".СоставНабора КАК ТЧСоставНабора
| ПО ТЧСоставНабора.Ссылка = Документ.Ссылка
| И ТЧСоставНабора.КлючСтроки = ТЧТовары.КлючСтроки
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
| ПО (СправочникНоменклатура.Сс ылка = ТЧТовары.Номенклатура)";
Иначе
ТекстЗапроса = ТекстЗапроса + "
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
| ПО (СправочникНоменклатура.Сс ылка = ТЧТовары.Номенклатура)";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
| ГДЕ
| Документ.Ссылка В(&ТекДокумент)
| " + ?(ТолькоНеотсканированныйТ овар, "И ТЧТовары.Количество <> ТЧТовары.КоличествоОтскан� �рованного", "") + "
|
| СГРУППИРОВАТЬ ПО
| " + ?(ЕстьСкладВТабЧасти, "ТЧТовары.Склад", "Документ." + мИмяРеквизитаСклад) + ",";
Если ЕстьСоставНабора Тогда
ТекстЗапроса = ТекстЗапроса + "
| ЕСТЬNULL(ТЧСоставНабора.Номе нклатура, ТЧТовары.Номенклатура),
| ЕСТЬNULL(ТЧСоставНабора.Един ицаИзмерения, ТЧТовары.ЕдиницаИзмерения) ) КАК ДокИсточникПервичный";
Иначе
ТекстЗапроса = ТекстЗапроса + "
| """",
| ТЧТовары.Номенклатура,
| ТЧТовары.ЕдиницаИзмерения) КАК ДокИсточникПервичный";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХран� �нияНоменклатуры КАК РегМестаХранения
| ПО РегМестаХранения.Номенкла� �ура = ДокИсточникПервичный.Номе� �клатура
| И РегМестаХранения.Склад = ДокИсточникПервичный.Скла� �
|
| СГРУППИРОВАТЬ ПО
| ДокИсточникПервичный.Скла� �,
| ДокИсточникПервичный.Номе� �клатура,
| ДокИсточникПервичный.Един� �цаИзмерения,
| ДокИсточникПервичный.Коли� �ество) КАК ОсновнаяТаблица
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХран� �нияНоменклатуры КАК РегМестаХранения
| ПО РегМестаХранения.Номенкла� �ура = ОсновнаяТаблица.Номенклат� �ра
| И РегМестаХранения.Склад = ОсновнаяТаблица.Склад
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХран� �нияНоменклатуры КАК РегМестаХраненияОсновной
| ПО РегМестаХраненияОсновной.� �оменклатура = ОсновнаяТаблица.Номенклат� �ра
| И РегМестаХраненияОсновной.� �клад = ОсновнаяТаблица.Склад
| И РегМестаХраненияОсновной.� �риоритет = ОсновнаяТаблица.МинПриори� �ет
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Склады КАК СпрСклады
| ПО (СпрСклады.Ссылка В (&МассивСклады))
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыН� �Складах.Остатки(, Склад В (&МассивСклады)
| И Номенклатура В (" + ТекстЗапросаНоменклатура + ")) КАК ТоварыНаСкладах
| ПО ТоварыНаСкладах.Склад = СпрСклады.Ссылка
| И ТоварыНаСкладах.Номенклат� �ра = ОсновнаяТаблица.Номенклат� �ра
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВ� �езервеНаСкладах.Остатки(, Склад В (&МассивСклады)
| И Номенклатура В (" + ТекстЗапросаНоменклатура + ")) КАК ТоварыВРезервеНаСкладах
| ПО ТоварыВРезервеНаСкладах.С� �лад = СпрСклады.Ссылка
| И ТоварыВРезервеНаСкладах.Н� �менклатура = ОсновнаяТаблица.Номенклат� �ра
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыК� �ередачеСоСкладов.Остатки(, Склад В (&МассивСклады)
| И Номенклатура В (" + ТекстЗапросаНоменклатура + ")) КАК ТоварыКПередачеСоСкладов
| ПО ТоварыКПередачеСоСкладов.� �клад = СпрСклады.Ссылка
| И ТоварыКПередачеСоСкладов.� �оменклатура = ОсновнаяТаблица.Номенклат� �ра
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВ� �езервеНаСкладах.Остатки(,
| ДокументРезерва = &ДокументРезерва) КАК РезервыПоЗаказу
| ПО РезервыПоЗаказу.Номенклат� �ра = ОсновнаяТаблица.Номенклат� �ра
| И РезервыПоЗаказу.Склад = СпрСклады.Ссылка
|" + ?(ДокументПроведен, "
// Движения по документу.
| ЛЕВОЕ СОЕДИНЕНИЕ
| (ВЫБРАТЬ
| ТоварыНаСкладах.Номенклат� �ра КАК Номенклатура,
| ТоварыНаСкладах.Склад КАК Склад,
| СУММА(ВЫБОР КОГДА ТоварыНаСкладах.ВидДвижен� �я = ЗНАЧЕНИЕ(ВидДвиженияНакоп� �ения.Приход) ТОГДА
| -ТоварыНаСкладах.Количеств� �
| ИНАЧЕ
| ТоварыНаСкладах.Количеств� �
| КОНЕЦ) КАК Количество
| ИЗ
| РегистрНакопления.ТоварыН� �Складах КАК ТоварыНаСкладах
| ГДЕ
| ТоварыНаСкладах.Регистрат� �р = &ТекДокумент
| СГРУППИРОВАТЬ ПО
| ТоварыНаСкладах.Номенклат� �ра,
| ТоварыНаСкладах.Склад
| ) КАК ТоварыНаСкладахПоДокумент у
| ПО ТоварыНаСкладахПоДокумент у.Склад = СпрСклады.Ссылка
| И ТоварыНаСкладахПоДокумент у.Номенклатура = ОсновнаяТаблица.Номенклат� �ра
| ЛЕВОЕ СОЕДИНЕНИЕ
| (ВЫБРАТЬ
| ТоварыВРезервеНаСкладах.Н� �менклатура КАК Номенклатура,
| ТоварыВРезервеНаСкладах.С� �лад КАК Склад,
| СУММА(ВЫБОР КОГДА ТоварыВРезервеНаСкладах.В� �дДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакоп� �ения.Приход) ТОГДА
| -ТоварыВРезервеНаСкладах.К� �личество
| ИНАЧЕ
| ТоварыВРезервеНаСкладах.К� �личество
| КОНЕЦ) КАК Количество
| ИЗ
| РегистрНакопления.ТоварыВ� �езервеНаСкладах КАК ТоварыВРезервеНаСкладах
| ГДЕ
| ТоварыВРезервеНаСкладах.Р� �гистратор = &ТекДокумент
| СГРУППИРОВАТЬ ПО
| ТоварыВРезервеНаСкладах.Н� �менклатура,
| ТоварыВРезервеНаСкладах.С� �лад
| ) КАК ТоварыВРезервеНаСкладахПо Документу
| ПО ТоварыВРезервеНаСкладахПо Документу.Склад = СпрСклады.Ссылка
| И ТоварыВРезервеНаСкладахПо Документу.Номенклатура = ОсновнаяТаблица.Номенклат� �ра
| ЛЕВОЕ СОЕДИНЕНИЕ
| (ВЫБРАТЬ
| ТоварыКПередачеСоСкладов.� �оменклатура КАК Номенклатура,
| ТоварыКПередачеСоСкладов.� �клад КАК Склад,
| СУММА(ВЫБОР КОГДА ТоварыКПередачеСоСкладов.� �идДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакоп� �ения.Приход) ТОГДА
| -ТоварыКПередачеСоСкладов.� �оличество
| ИНАЧЕ
| ТоварыКПередачеСоСкладов.� �оличество
| КОНЕЦ) КАК Количество
| ИЗ
| РегистрНакопления.ТоварыК� �ередачеСоСкладов КАК ТоварыКПередачеСоСкладов
| ГДЕ
| ТоварыКПередачеСоСкладов.� �егистратор = &ТекДокумент
| СГРУППИРОВАТЬ ПО
| ТоварыКПередачеСоСкладов.� �оменклатура,
| ТоварыКПередачеСоСкладов.� �клад
| ) КАК ТоварыКПередачеСоСкладовП оДокументу
| ПО ТоварыКПередачеСоСкладовП оДокументу.Склад = СпрСклады.Ссылка
| И ТоварыКПередачеСоСкладовП оДокументу.Номенклатура = ОсновнаяТаблица.Номенклат� �ра", "") + "
|) КАК ЗапросАдрес
|//СОЕДИНЕНИЯ
|УПОРЯДОЧИТЬ ПО
| МестоХраненияРодитель,
| Приоритет,
| МестоХранения
|ИТОГИ
//| МИНИМУМ(ЕдиницаИзмерения),
| СРЕДНЕЕ(Вес),
| СРЕДНЕЕ(Количество),
| МИНИМУМ(МестоХранения),
| СРЕДНЕЕ(Остаток),
| МИНИМУМ(НоменклатураПредс� �авление),
| МИНИМУМ(ЕдиницаИзмеренияП� �едставление),
| МИНИМУМ(СкладПредставлени� �)
|//ИТОГИ
|ПО
| СкладОтгрузкиОприходовани я,
| МестоХраненияРодитель,
| Номенклатура,
| Склад,
| Приоритет,
| ЕдиницаИзмерения
|//ОБЩИЕ_СВОЙСТВА
|АВТОУПОРЯДОЧИВАНИЕ";
// Соответствие имен полей в запросе и их представлений в отчете.
СтруктураПредставлениеПол ей = Новый Структура(
"Номенклатура, ЕдиницаИзмерения, Остаток, МестоХранения , МестоХраненияРодитель, СкладОтгрузкиОприходовани я",
"Номенклатура", "Ед. изм.", "Cвободный остаток", "Место хранения", "Родитель мест хранения", "Склад отгрузки (оприходования)");
Если ИспользоватьСвойства Тогда
ТекстПоляСвойств = "";
ТаблицаПолей = Новый ТаблицаЗначений;
ТаблицаПолей.Колонки.Добав ить("ПутьКДанным"); // описание поля запроса поля, для которого добавляются свойства. Используется в условии соединения с регистром сведений, хранящим значения свойств.
ТаблицаПолей.Колонки.Добав ить("Представление");// представление поля, для которого добавляются свойства.
ТаблицаПолей.Колонки.Добав ить("Назначение"); // назначение свойств объектов для данного поля.
ТаблицаПолей.Колонки.Добав ить("ТипЗначения"); // тип значения поля, для которого добавляются свойства. Используется, если не установлено назначение.
СтрокаТаблицы = ТаблицаПолей.Добавить();
СтрокаТаблицы.ПутьКДанным = "Номенклатура";
СтрокаТаблицы.Представлен� �е = "Номенклатура";
СтрокаТаблицы.Назначение = ПланыВидовХарактеристик.Н� �значенияСвойствКатегорий� �бъектов.Справочник_Номенк� �атура;
ТекСоответствиеНазначений = Новый Соответствие;
ДобавитьВТекстСвойстваЛок ально(ТаблицаПолей, ТекстЗапроса, СтруктураПредставлениеПол ей,
ТекСоответствиеНазначений , ПостроительОтчета.Парамет� �ы, , , ТекстПоляСвойств);
УправлениеОтчетами.Добави� �ьВТекстСВойстваОбщие(Текс тЗапроса, ТекстПоляСвойств, "//ОБЩИЕ_СВОЙСТВА");
КонецЕсли;
ПостроительОтчета.Текст = ТекстЗапроса;
Если НеЗаполнятьНастройки Тогда
Возврат;
КонецЕсли;
ПостроительОтчета.Заполни� �ьНастройки();
// Создадим список полей, доступных для выбора.
СоответствиеДоступныхПоле й = Новый Соответствие;
СоответствиеДоступныхПоле й.Вставить("ЕдиницаИзмерен� �я", 0);
СоответствиеДоступныхПоле й.Вставить("Остаток" , 0);
СоответствиеДоступныхПоле й.Вставить("МестоХранения" , 0);
СоответствиеДоступныхПоле й.Вставить("Количество" , 0);
СоответствиеДоступныхПоле й.Вставить("Вес" , 0);
СоответствиеДоступныхПоле й.Вставить("Номенклатура" , 0);
Для Каждого ДоступноеПоле Из ПостроительОтчета.Доступн� �еПоля Цикл
Если СоответствиеДоступныхПоле й[ДоступноеПоле.Имя] = Неопределено
И Найти(ДоступноеПоле.Имя, "Свойство") = 0 Тогда
ДоступноеПоле.Поле = Ложь;
Иначе
ДоступноеПоле.Поле = Истина;
КонецЕсли;
КонецЦикла;
ПостроительОтчета.Доступн� �еПоля.Склад.Измерение = Ложь;
ПостроительОтчета.Доступн� �еПоля.Приоритет.Измерение = Ложь;
ПостроительОтчета.Доступн� �еПоля.ЕдиницаИзмерения.Из� �ерение = Ложь;
ПостроительОтчета.Измерен� �яСтроки.Очистить();
ПостроительОтчета.Измерен� �яСтроки.Добавить("СкладОтг рузкиОприходования", ,ТипИзмеренияПостроителяО� �чета.Элементы);
ПостроительОтчета.Измерен� �яСтроки.Добавить("МестоХра ненияРодитель", ,ТипИзмеренияПостроителяО� �чета.Элементы);
ПостроительОтчета.Измерен� �яСтроки.Добавить("Номенкла тура", ,ТипИзмеренияПостроителяО� �чета.Элементы);
ПостроительОтчета.Выбранн� �еПоля.Очистить();
ПостроительОтчета.Выбранн� �еПоля.Добавить("Количество ");
ПостроительОтчета.Выбранн� �еПоля.Добавить("ЕдиницаИзм ерения");
ПостроительОтчета.Выбранн� �еПоля.Добавить("МестоХране ния");
ПостроительОтчета.Выбранн� �еПоля.Добавить("Остаток");
ПостроительОтчета.Выбранн� �еПоля.Добавить("Вес");
Если ИспользоватьСвойства Тогда
УправлениеОтчетами.Устано� �итьТипыЗначенийСвойствИК� �тегорийДляОтбора(Построит ельОтчета, , ТекстПоляСвойств, ТекСоответствиеНазначений , СтруктураПредставлениеПол ей);
КонецЕсли;
// Вызовем стандартную процедуру заполнения представлений.
УправлениеОтчетами.Заполн� �тьПредставленияПолей(Стру ктураПредставлениеПолей, ПостроительОтчета);
КонецПроцедуры // ЗаполнитьПостроительОтчет а()
мТекущаяНастройка = Новый Структура;
мТекущаяНастройка.Вставит� �("ИмяОбъекта" , Строка(ЭтотОбъект));
мТекущаяНастройка.Вставит� �("Пользователь" , глЗначениеПеременной("глТе кущийПользователь"));
мТекущаяНастройка.Вставит� �("НаименованиеНастройки" , "");
мТекущаяНастройка.Вставит� �("ИспользоватьПриОткрытии" , Ложь);
мТекущаяНастройка.Вставит� �("СохранятьАвтоматически" , Ложь);
мТекущаяНастройка.Вставит� �("СохраненнаяНастройка" , Неопределено);
мСпециальныеПоля = Новый Соответствие;
мСпециальныеПоля.Вставить( "МестоХранения", 0);
мСпециальныеПоля.Вставить( "Остаток" , 1);
мИнициализироватьНастройк иПриОткрытии = Истина;
мСписокПоложенийДляПечати = Новый СписокЗначений;
мСписокПоложенийДляПечати .Добавить("После номенклатуры");
мСписокПоложенийДляПечати .Добавить("До номенклатуры");
мСписокПоложенийДляПечати .Добавить("Вместе с номенклатурой");
мЕдиницаИзмеренияВеса = СокрЛП(Константы.ЕдиницаИз меренияВеса.Получить());
мПоляСПредставлениями = Новый Соответствие;
мПоляСПредставлениями.Вст� �вить("Номенклатура" , 0);
мПоляСПредставлениями.Вст� �вить("ЕдиницаИзмерения", 1);
мПоляСПредставлениями.Вст� �вить("Склад" , 2);
#КонецЕсли
-
17.01.2014, 15:08 #2
- Регистрация
- 21.05.2013
- Адрес
- Москва
- Сообщений
- 43
- Сказал(а) спасибо
- 4
- Поблагодарили 2 раз(а) в 2 сообщениях
что бы полностью разобраться во всем и перевести обработку на 8.3 необходимо значительное время. Могу заняться этим, но только в рамках своей профессиональной деятельности. Если интересно, то обращайтесь в личку.
-
20.01.2014, 16:17 #3
- Регистрация
- 19.09.2013
- Сообщений
- 4
- Сказал(а) спасибо
- 1
- Поблагодарили 0 раз(а) в 0 сообщениях
Похожие темы
-
Нужна помощь в создании отчета!!!!
от Poluk в разделе Конфигурирование, программирование 1С - ПредприятиеОтветов: 24Последнее сообщение: 30.09.2013, 13:54 -
Нужна помощь!)
от Дарина90 в разделе Железо (hardware)Ответов: 0Последнее сообщение: 30.03.2013, 19:36 -
Нужна помощь!!!
от kedyan в разделе Общие вопросыОтветов: 2Последнее сообщение: 17.01.2008, 01:52
Социальные закладки