Имя: Пароль:
1C
 
Внешняя печ форма
🠗 (Волшебник 15.07.2024 16:00)
,
0 Грюбус
 
15.07.24
13:34
Всем здравствуйте. Клиент попросил сделать в печатной форме по пересчёту остатков доработку сделать. Копирнул всё из типовой формы, а мне говорит, что метод ПараметрыПечати не определён. В типовой форме определения этого метода не нашёл. Не пойму на что ругается
1 Волшебник
 
15.07.24
13:38
>> в печатной форме по пересчёту остатков...

Гляньте вот тут, была похожая тема:
Автоматическое подставление емейла в впф
2 rphosts
 
15.07.24
13:39
Типовая тоже внешняя?
3 Грюбус
 
15.07.24
13:39
(1) Есть такое
4 Грюбус
 
15.07.24
13:39
(2) Нет, типовая внутренняя
5 rphosts
 
15.07.24
13:45
(4) в модуле менеджера тоже смотрел?
6 Грюбус
 
15.07.24
13:46
(5) Да, смотрел. Из модуля менеджера документа скопировал форму печати, сделал ей определение. А пытаюсь сохранить- ругается и говорит, что переменная ПараметрыПечати не определена. И где её брать- тоже не знаю, потому что в изначальном коде нет её
7 Волшебник
 
15.07.24
13:51
(6) Если ругается, что переменная ПараметрыПечати не определена, значит к ней идёт обращение. Ищите с фонариком
8 rphosts
 
15.07.24
13:53
так переменная а не метод оказывается
Есть требования к оформлению внешних обработок/печатных форм (специальные вызовы). Видимо копать туда
9 Волшебник
 
15.07.24
13:56
(8) ой, ну какая разница-то? Если номера строки нет, то чё гадать-то?
10 rphosts
 
15.07.24
14:00
(9) нумерация строк осталась с бейсиком, фотраном и фокалом
11 Волшебник
 
15.07.24
14:02
(10) Дядя Фёдор? Любой редактор показывает номер строки. В тексте ошибки есть номер строки. Ctrl-G — переход к строке по номеру
12 Serg_1960
 
15.07.24
14:24
(0) В типовых конфигурациях, как правило, параметры печати формируются (заполняются) "вне" самой внутренней печатной формы. Вот перво-попавшийся типовой алгоритм из общего модуля:

Процедура СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати,
	КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	// Получим менеджер печати
	МенеджерПечати = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяМенеджераПечати);
	
	// Подготовим коллекцию для формируемых печатных форм
	КоллекцияПечатныхФорм = ПодготовитьКоллекциюПечатныхФорм(ИменаМакетов);
	
	// Подготовим структуру параметров вывода
	ПараметрыВывода = ПодготовитьСтруктуруПараметровВывода();
	
	ОбъектыПечати = Новый СписокЗначений;
	
	// Сформируем печатные формы
	МенеджерПечати.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
13 Мультук
 
гуру
15.07.24
14:24
(0)

Ваше сообщение можно прочитать так:

===

Я что-то где-то написал.
А оно опа - не работает.

Что я написал - показывать не буду.
Где я написал тоже (вы сами должны догадаться)

Текст ошибки -- это вообще сакральная тайна.

===
14 Волшебник
 
15.07.24
14:25
(12) Кстати, вот пример плохого программного кода. Слишком много параметров процедуры, бессмысленные комментарии, которые по сути повторяют программный код и вполне могут быть удалены без потери смысла. Только место занимают
16 Serg_1960
 
15.07.24
14:31
(14) У меня иногда складывается мнение, что разработчики используют искусственный интеллект... или отключают свой при написании комментариев.

А по поводу параметров... чем больше параметров - тем гибче алгоритм.
17 Грюбус
 
15.07.24
15:05
(13) Ну я же объяснил) Хотел сделать впф, скопировал под чистую пф из документа нужного, пытаюсь сохранить- не работает. Просто пытаюсь понять откуда достаётся переменная ПараметрыПечати

СведенияОВнешнейОбработке
Если нужен, то вот:
Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.ПересчетТоваров"); //Указываем документ к которому делаем внешнюю печ. форму
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов...    
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", Метаданные().Синоним); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    ПараметрыРегистрации.Вставить("Информация", Метаданные().Синоним);
    ПараметрыРегистрации.Вставить("Версия", Метаданные().Комментарий);    
    
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, Метаданные().Синоним, "Основная", "ВызовСерверногоМетода", Истина);
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

    Возврат ПараметрыРегистрации;
КонецФункции

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

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;  
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры

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

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


Функция ПечатьЗадания(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)
    
    КолонкаКодов = ФормированиеПечатныхФорм.ДополнительнаяКолонкаПечатныхФормДокументов();
    ИмяКолонкиКодов = КолонкаКодов.ИмяКолонки;
    ПредставлениеКолонкиКодов = КолонкаКодов.ПредставлениеКолонки;
    
    ВыводитьКоды                = ЗначениеЗаполнено(ИмяКолонкиКодов);
    ВыводитьГрадацииКачества    = ПараметрыПечати.ВыводитьГрадацииКачества;
    ВыводитьРезультатыПересчета = ПараметрыПечати.ВыводитьРезультатыПересчета;
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.АвтоМасштаб = Истина;
    
    ТабличныйДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПересчетТоваров_ЗаданиеНаПересчетТоваров";
    
    ТекстЗапроса =
    "ВЫБРАТЬ
    |    ПересчетТоваров.Ссылка КАК Ссылка,
    |    ПересчетТоваров.Представление КАК ПредставлениеДокумента,
    |    ПересчетТоваров.Дата КАК Дата,
    |    ПересчетТоваров.Номер КАК Номер,
    |    ПересчетТоваров.Склад КАК Склад,
    |    ПересчетТоваров.Помещение КАК Помещение,
    |    ПересчетТоваров.ЯчейкаКонсолидацииИзлишковТоваров КАК ЯчейкаИзлишков,
    |    ПересчетТоваров.ЯчейкаКонсолидацииИспорченныхТоваров КАК ЯчейкаИспорченных,
    |    ПРЕДСТАВЛЕНИЕ(ПересчетТоваров.Склад) КАК СкладПредставление,
    |    ПРЕДСТАВЛЕНИЕ(ПересчетТоваров.Помещение) КАК ПомещениеПредставление,
    |    ПересчетТоваров.Исполнитель.ФизическоеЛицо КАК Исполнитель,
    |    ПересчетТоваров.ПечататьКоличествоПоУчету КАК ПечататьКоличествоПоУчету,
    |    ПересчетТоваров.Статус КАК Статус
    |ИЗ
    |    Документ.ПересчетТоваров КАК ПересчетТоваров
    |ГДЕ
    |    ПересчетТоваров.Ссылка В(&МассивОбъектов)
    |
    |УПОРЯДОЧИТЬ ПО
    |    ПересчетТоваров.Ссылка
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ПересчетТоваровТовары.НомерСтроки                                     КАК НомерСтроки,
    |    ПересчетТоваровТовары.Количество                                     КАК Количество,
    |    ПересчетТоваровТовары.КоличествоУпаковок                             КАК КоличествоУпаковок,
    |    &ТекстЗамены,
    |    ПересчетТоваровТовары.Номенклатура.НаименованиеПолное                 КАК НоменклатураПредставление,
    |    ПересчетТоваровТовары.Характеристика.НаименованиеПолное             КАК ХарактеристикаПредставление,
    |    ПересчетТоваровТовары.Номенклатура                                     КАК Номенклатура,
    |    ПересчетТоваровТовары.Характеристика                                 КАК Характеристика,
    |    ПересчетТоваровТовары.Серия                                         КАК Серия,
    |    ВЫБОР КОГДА ПересчетТоваровТовары.Упаковка.Наименование ЕСТЬ NULL
    |        ТОГДА ПРЕДСТАВЛЕНИЕ(ПересчетТоваровТовары.Номенклатура.ЕдиницаИзмерения)
    |        ИНАЧЕ ПересчетТоваровТовары.Упаковка.Наименование
    |    КОНЕЦ                                                                 КАК ЕдиницаИзмеренияПредставлениеУпаковка,
    |    ПересчетТоваровТовары.Серия.Наименование КАК СерияПредставление,
    |    ПРЕДСТАВЛЕНИЕ(ПересчетТоваровТовары.Номенклатура.ЕдиницаИзмерения) КАК ЕдиницаИзмеренияПредставлениеНоменклатура,
    |    ПРЕДСТАВЛЕНИЕ(ПересчетТоваровТовары.Ячейка) КАК ЯчейкаПредставление,
    |    ПересчетТоваровТовары.Номенклатура.Код КАК Код,
    |    ПересчетТоваровТовары.Номенклатура.Артикул КАК Артикул,
    |    ПересчетТоваровТовары.Ссылка КАК Ссылка
    |ИЗ
    |    Документ.ПересчетТоваров.Товары КАК ПересчетТоваровТовары
    |ГДЕ
    |    ПересчетТоваровТовары.Ссылка В(&МассивОбъектов)
    |
    |УПОРЯДОЧИТЬ ПО
    |    Ссылка,
    |    ПересчетТоваровТовары.НомерСтроки
    |ИТОГИ ПО
    |    Ссылка";
    
    Если ВыводитьРезультатыПересчета Тогда
        ТекстЗамены = "    ПересчетТоваровТовары.КоличествоФакт                                КАК КоличествоФакт,
        |    ПересчетТоваровТовары.КоличествоУпаковокФакт                        КАК КоличествоУпаковокФакт,
        |    ПересчетТоваровТовары.КоличествоУпаковокФакт - ПересчетТоваровТовары.КоличествоУпаковок КАК КоличествоУпаковокОтклонение,";
    Иначе
        ТекстЗамены = "    0                                                                   КАК КоличествоФакт,
        |    0                                                                   КАК КоличествоУпаковокФакт,
        |    0                                                                   КАК КоличествоУпаковокОтклонение,";
    КонецЕсли;
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗамены,", ТекстЗамены);

    Запрос = Новый Запрос;
    Запрос.Текст = ТекстЗапроса;
    Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
    
    Результаты = Запрос.ВыполнитьПакет();
    
    ВыборкаПоДокументам = Результаты[0].Выбрать();
    ВыборкаПоТабличнымЧастям = Результаты[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    ПервыйДокумент = Истина;
    
    Если ВыводитьРезультатыПересчета Тогда
        СинонимДокумента = НСтр("ru='Результаты пересчета товаров'", ОбщегоНазначения.КодОсновногоЯзыка());
    Иначе
        СинонимДокумента = НСтр("ru='Задание на пересчет товаров'", ОбщегоНазначения.КодОсновногоЯзыка());
    КонецЕсли;
    
    Пока ВыборкаПоДокументам.Следующий() Цикл
        РеквизитыДокумента = Новый Структура("Номер, Дата, Префикс");
        ЗаполнитьЗначенияСвойств(РеквизитыДокумента, ВыборкаПоДокументам);
        Заголовок = ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента, СинонимДокумента);
        
        Если ВыводитьРезультатыПересчета
            И Не ВыборкаПоДокументам.Статус = Перечисления.СтатусыПересчетовТоваров.Выполнено Тогда
            
            ТекстСообщения = НСтр("ru = 'Документ ""%ПредставлениеДокумента%"" находится в статусе ""%Статус%"". Печать результатов пересчета возможна только в статусе ""Выполнено""'");
            
            РеквизитыДокумента.Вставить("Представление",ВыборкаПоДокументам.ПредставлениеДокумента);
            ПредставлениеДокумента = ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента);
            
            ТекстСообщения = СтрЗаменить(ТекстСообщения,"%ПредставлениеДокумента%",ПредставлениеДокумента);
            ТекстСообщения = СтрЗаменить(ТекстСообщения,"%Статус%",ВыборкаПоДокументам.Статус);
            
            ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
            Продолжить;
        ИначеЕсли ВыборкаПоДокументам.Статус = Перечисления.СтатусыПересчетовТоваров.Подготовлено Тогда
            ТекстСообщения = НСтр("ru = 'Документ ""%ПредставлениеДокумента%"" находится в статусе ""%Статус%"". Печать заданий на пересчет возможна в статусах ""%ВРаботе%"", ""%ВнесениеРезультатов%"" и ""%Выполнено%"".'");
            
            РеквизитыДокумента.Вставить("Представление",ВыборкаПоДокументам.ПредставлениеДокумента);
            ПредставлениеДокумента = ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента);
            
            ТекстСообщения = СтрЗаменить(ТекстСообщения,"%ПредставлениеДокумента%",ПредставлениеДокумента);
            ТекстСообщения = СтрЗаменить(ТекстСообщения,"%Статус%",ВыборкаПоДокументам.Статус);
            ТекстСообщения = СтрЗаменить(ТекстСообщения,"%ВРаботе%", Перечисления.СтатусыПересчетовТоваров.ВРаботе);
            ТекстСообщения = СтрЗаменить(ТекстСообщения,"%ВнесениеРезультатов%", Перечисления.СтатусыПересчетовТоваров.ВнесениеРезультатов);
            ТекстСообщения = СтрЗаменить(ТекстСообщения,"%Выполнено%", Перечисления.СтатусыПересчетовТоваров.Выполнено);
            
            ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
            Продолжить;
        КонецЕсли;
        
        ВыводитьПоУчету = ВыборкаПоДокументам.ПечататьКоличествоПоУчету Или ВыводитьРезультатыПересчета;
        ПоАдресномуСкладу = СкладыСервер.ИспользоватьАдресноеХранение(
            ВыборкаПоДокументам.Склад, ВыборкаПоДокументам.Помещение, ВыборкаПоДокументам.Дата);
        Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ПересчетТоваров.ПФ_MXL_ЗаданиеПересчетТоваров");
            
        ОбластьЗаголовок         = Макет.ПолучитьОбласть("Заголовок");
        ОбластьСкладИсполнитель = Макет.ПолучитьОбласть("СкладИсполнитель");
        ОбластьЯчейкаИзлишков    = Макет.ПолучитьОбласть("ОбластьЯчейкаИзлишков");
        ОбластьЯчейкаИспорченных    = Макет.ПолучитьОбласть("ОбластьЯчейкаИспорченных");
        
        Если ПоАдресномуСкладу Тогда
            
            Если ВыводитьКоды Тогда
                ОбластьШапкаТаблицыНачало             = Макет.ПолучитьОбласть("ШапкаТаблицыЯчейкаКодУчет|НачалоСтроки");
                ОбластьСтрокаТаблицыНачало             = Макет.ПолучитьОбласть("СтрокаТаблицыЯчейкаКодУчет|НачалоСтроки");
                ОбластьПодвалТаблицыНачало             = Макет.ПолучитьОбласть("ПодвалТаблицыЯчейкаКодУчет|НачалоСтроки");
                ОбластьШапкаТаблицыКолонкаКодов     = Макет.ПолучитьОбласть("ШапкаТаблицыЯчейкаКодУчет|КолонкаКодов");
                ОбластьСтрокаТаблицыКолонкаКодов     = Макет.ПолучитьОбласть("СтрокаТаблицыЯчейкаКодУчет|КолонкаКодов");
                ОбластьПодвалТаблицыКолонкаКодов     = Макет.ПолучитьОбласть("ПодвалТаблицыЯчейкаКодУчет|КолонкаКодов");
                ОбластьШапкаТаблицыКолонкаТоваров     = Макет.ПолучитьОбласть("ШапкаТаблицыЯчейкаКодУчет|КолонкаТоваровКодЯчейка");
                ОбластьСтрокаТаблицыКолонкаТоваров     = Макет.ПолучитьОбласть("СтрокаТаблицыЯчейкаКодУчет|КолонкаТоваровКодЯчейка");
                ОбластьПодвалТаблицыКолонкаТоваров     = Макет.ПолучитьОбласть("ПодвалТаблицыЯчейкаКодУчет|КолонкаТоваровКодЯчейка");
            Иначе
                ОбластьШапкаТаблицыНачало             = Макет.ПолучитьОбласть("ШапкаТаблицыЯчейка|НачалоСтроки");
                ОбластьСтрокаТаблицыНачало             = Макет.ПолучитьОбласть("СтрокаТаблицыЯчейка|НачалоСтроки");
                ОбластьПодвалТаблицыНачало             = Макет.ПолучитьОбласть("ПодвалТаблицыЯчейка|НачалоСтроки");
                ОбластьШапкаТаблицыКолонкаТоваров     = Макет.ПолучитьОбласть("ШапкаТаблицыЯчейка|КолонкаТоваровБезКодовЯчейки");
                ОбластьСтрокаТаблицыКолонкаТоваров     = Макет.ПолучитьОбласть("СтрокаТаблицыЯчейка|КолонкаТоваровБезКодовЯчейки");
                ОбластьПодвалТаблицыКолонкаТоваров     = Макет.ПолучитьОбласть("ПодвалТаблицыЯчейка|КолонкаТоваровБезКодовЯчейки");
            КонецЕсли;
        Иначе
            ОбластьШапкаТаблицыНачало             = Макет.ПолучитьОбласть("ШапкаТаблицы|Номер");
            ОбластьСтрокаТаблицыНачало             = Макет.ПолучитьОбласть("СтрокаТаблицы|Номер");
            ОбластьПодвалТаблицыНачало             = Макет.ПолучитьОбласть("ПодвалТаблицы|Номер");
            
            Если ВыводитьКоды Тогда
                
                ОбластьШапкаТаблицыКолонкаКодов     = Макет.ПолучитьОбласть("ШапкаТаблицыКодУчет|КолонкаЯчейкаКод");
                ОбластьСтрокаТаблицыКолонкаКодов     = Макет.ПолучитьОбласть("СтрокаТаблицыКодУчет|КолонкаЯчейкаКод");
                ОбластьПодвалТаблицыКолонкаКодов     = Макет.ПолучитьОбласть("ПодвалТаблицыКодУчет|КолонкаЯчейкаКод");
                ОбластьШапкаТаблицыКолонкаТоваров     = Макет.ПолучитьОбласть("ШапкаТаблицыКодУчет|КолонкаТоваровБезКодовЯчейки");
                ОбластьСтрокаТаблицыКолонкаТоваров     = Макет.ПолучитьОбласть("СтрокаТаблицыКодУчет|КолонкаТоваровБезКодовЯчейки");
                ОбластьПодвалТаблицыКолонкаТоваров     = Макет.ПолучитьОбласть("ПодвалТаблицыКодУчет|КолонкаТоваровБезКодовЯчейки");
            Иначе
                ОбластьШапкаТаблицыКолонкаТоваров     = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаТоваров");
                ОбластьСтрокаТаблицыКолонкаТоваров     = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаТоваров");
                ОбластьПодвалТаблицыКолонкаТоваров     = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаТоваров");
            КонецЕсли;
        КонецЕсли;
        
        ОбластьШапкаТаблицыУпаковки     = Макет.ПолучитьОбласть(?(ПоАдресномуСкладу, "ШапкаТаблицыЯчейка|КолонкаУпаковок", "ШапкаТаблицы|КолонкаУпаковок"));
        ОбластьСтрокаТаблицыУпаковки     = Макет.ПолучитьОбласть(?(ПоАдресномуСкладу, "СтрокаТаблицыЯчейка|КолонкаУпаковок", "СтрокаТаблицы|КолонкаУпаковок"));
        ОбластьПодвалТаблицыУпаковки     = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаУпаковок");
                
        Если ВыводитьКоды Тогда
            
            ОбластьШапкаТаблицыКолонкаКодов.Параметры.ИмяКолонкиКодов = ПредставлениеКолонкиКодов;
            
        КонецЕсли;    
        
        Если Не ВыводитьПоУчету Тогда
            Если ВыводитьГрадацииКачества Тогда
                ОбластьШапкаТаблицыФакт     = Макет.ПолучитьОбласть("ШапкаТаблицыГрадацииКачества|ГрадацииКачества");
                ОбластьСтрокаТаблицыФакт     = Макет.ПолучитьОбласть("СтрокаТаблицыГрадацииКачества|ГрадацииКачества");
                ОбластьПодвалТаблицыФакт     = Макет.ПолучитьОбласть("ПодвалТаблицыГрадацииКачества|ГрадацииКачества");
            Иначе     
                ОбластьШапкаТаблицыФакт     = Макет.ПолучитьОбласть("ШапкаТаблицы|ФактБезКоличестваПоУчету");
                ОбластьСтрокаТаблицыФакт     = Макет.ПолучитьОбласть("СтрокаТаблицы|ФактБезКоличестваПоУчету");
                ОбластьПодвалТаблицыФакт     = Макет.ПолучитьОбласть("ПодвалТаблицы|ФактБезКоличестваПоУчету");
            КонецЕсли;    
        Иначе
            
            ОбластьШапкаТаблицыПоУчету         = Макет.ПолучитьОбласть("ШапкаТаблицыКодУчет|КолонкаПоУчету");
            ОбластьСтрокаТаблицыПоУчету     = Макет.ПолучитьОбласть("СтрокаТаблицыКодУчет|КолонкаПоУчету");
            ОбластьПодвалТаблицыПоУчету     = Макет.ПолучитьОбласть("ПодвалТаблицыКодУчет|КолонкаПоУчету");
            ОбластьШапкаТаблицыОтклонение    = Макет.ПолучитьОбласть("ШапкаТаблицыКодУчет|КолонкаОтклонение");
            ОбластьСтрокаТаблицыОтклонение     = Макет.ПолучитьОбласть("СтрокаТаблицыКодУчет|КолонкаОтклонение");
            ОбластьПодвалТаблицыОтклонение     = Макет.ПолучитьОбласть("ПодвалТаблицыКодУчет|КолонкаОтклонение");
            Если ВыводитьГрадацииКачества Тогда
                ОбластьШапкаТаблицыФакт     = Макет.ПолучитьОбласть("ШапкаТаблицыГрадацииКачества|ГрадацииКачества");
                ОбластьСтрокаТаблицыФакт     = Макет.ПолучитьОбласть("СтрокаТаблицыГрадацииКачества|ГрадацииКачества");
                ОбластьПодвалТаблицыФакт     = Макет.ПолучитьОбласть("ПодвалТаблицыГрадацииКачества|ГрадацииКачества");
            Иначе
                ОбластьШапкаТаблицыФакт     = Макет.ПолучитьОбласть("ШапкаТаблицыКодУчет|КолонкаФакт");
                ОбластьСтрокаТаблицыФакт     = Макет.ПолучитьОбласть("СтрокаТаблицыКодУчет|КолонкаФакт");
                ОбластьПодвалТаблицыФакт     = Макет.ПолучитьОбласть("ПодвалТаблицыКодУчет|КолонкаФакт");
            КонецЕсли;    
        КонецЕсли;        
            
        Если НЕ ВыборкаПоТабличнымЧастям.НайтиСледующий(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка)) Тогда
            Продолжить;
        КонецЕсли;
            
        ВыборкаПоСтрокамТЧ = ВыборкаПоТабличнымЧастям.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        
        Если Не ПервыйДокумент Тогда
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        
        ПервыйДокумент = Ложь;
        НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
        
        СтруктураДанныхЗаголовка = Новый Структура;
        СтруктураДанныхЗаголовка.Вставить("ТекстЗаголовка", Заголовок);
        ОбластьЗаголовок.Параметры.Заполнить(СтруктураДанныхЗаголовка);

        ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьЗаголовок, ВыборкаПоДокументам.Ссылка);
        ТабличныйДокумент.Вывести(ОбластьЗаголовок);
        
        ОбластьСкладИсполнитель.Параметры.ИсполнительПредставление    = ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ВыборкаПоДокументам.Исполнитель, ВыборкаПоДокументам.Дата);
        ОбластьСкладИсполнитель.Параметры.СкладПредставление        = СкладыСервер.ПолучитьПредставлениеСклада(ВыборкаПоДокументам.СкладПредставление,
                                                                                                            ВыборкаПоДокументам.ПомещениеПредставление);
        
        ТабличныйДокумент.Вывести(ОбластьСкладИсполнитель);
        
        Если ЗначениеЗаполнено(ВыборкаПоДокументам.ЯчейкаИзлишков) Тогда
            ЗаполнитьЗначенияСвойств(ОбластьЯчейкаИзлишков.Параметры, ВыборкаПоДокументам);
            ТабличныйДокумент.Вывести(ОбластьЯчейкаИзлишков);
        КонецЕсли;
        
        Если ЗначениеЗаполнено(ВыборкаПоДокументам.ЯчейкаИспорченных) Тогда
            ЗаполнитьЗначенияСвойств(ОбластьЯчейкаИспорченных.Параметры, ВыборкаПоДокументам);
            ТабличныйДокумент.Вывести(ОбластьЯчейкаИспорченных);
        КонецЕсли;
        
        ТабличныйДокумент.Вывести(ОбластьШапкаТаблицыНачало);
        
        Если ВыводитьКоды Тогда
            ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаКодов);
        КонецЕсли;
        ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаТоваров);
        ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыУпаковки);
        
        Если ВыводитьПоУчету Тогда
            ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыПоУчету);
        КонецЕсли;
        
        ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыФакт);
        Если ВыводитьПоУчету Тогда
            ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыОтклонение);
        КонецЕсли;
        
        Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл
            
            ОбластьСтрокаТаблицыНачало.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
            ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыНачало);
            
            Если ВыводитьКоды Тогда
                ОбластьСтрокаТаблицыКолонкаКодов.Параметры.Артикул = ВыборкаПоСтрокамТЧ[ИмяКолонкиКодов];
                ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаКодов);
            КонецЕсли;
            
            ДопПараметрыПредставлениеНоменклатуры = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати();
            ДопПараметрыПредставлениеНоменклатуры.КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
            
            ОбластьСтрокаТаблицыКолонкаТоваров.Параметры.Товар = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
                ?(ЗначениеЗаполнено(ВыборкаПоСтрокамТЧ.Номенклатура),
                        ВыборкаПоСтрокамТЧ.НоменклатураПредставление,
                        НСтр("ru = '<пустая ячейка>'", ОбщегоНазначения.КодОсновногоЯзыка())),
                ВыборкаПоСтрокамТЧ.ХарактеристикаПредставление,
                ,
                ВыборкаПоСтрокамТЧ.СерияПредставление,
                ДопПараметрыПредставлениеНоменклатуры);
            ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаТоваров);
            
            ОбластьСтрокаТаблицыУпаковки.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
            
            ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыУпаковки);    
            
            Если ВыводитьПоУчету Тогда
                ОбластьСтрокаТаблицыПоУчету.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
                ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыПоУчету);
            КонецЕсли;
            
            ОбластьСтрокаТаблицыФакт.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
            ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыФакт);
            
            Если ВыводитьПоУчету Тогда
                ОбластьСтрокаТаблицыОтклонение.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
                ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыОтклонение);
            КонецЕсли;
            
        КонецЦикла;
        
        ТабличныйДокумент.Вывести(ОбластьПодвалТаблицыНачало);
        Если ВыводитьКоды Тогда
            ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаКодов);
        КонецЕсли;
        
        ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаТоваров);
        ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыУпаковки);
        Если ВыводитьПоУчету Тогда
            ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыПоУчету);
        КонецЕсли;
        ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыФакт);
        Если ВыводитьПоУчету Тогда
            ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыОтклонение);
        КонецЕсли;
        
        УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаПоДокументам.Ссылка);
    КонецЦикла;
    
    Возврат ТабличныйДокумент;
    
КонецФункции
Функция ПолучитьДанныеДляПечатнойФормыОтборРазмещениеТоваров(ПараметрыПечати, МассивОбъектов) Экспорт
    
    УчитыватьУпаковки = Не ПараметрыПечати.Свойство("БезДопКолонки");
    
    ТекстЗапроса = ТекстЗапросаТоварыЗаданияОтборРазмещениеТоваров(УчитыватьУпаковки)
                    + ОбщегоНазначенияУТ.РазделительЗапросовВПакете() +
    "ВЫБРАТЬ
    |    ТаблицаТовары.Ссылка                    КАК Ссылка,
    |    ТаблицаТовары.Склад                        КАК Склад,
    |    ТаблицаТовары.Помещение                    КАК Помещение,
    |    МИНИМУМ(ТаблицаТовары.НомерСтроки)        КАК НомерСтроки,
    |    ТаблицаТовары.Номенклатура                КАК Номенклатура,
    |    ТаблицаТовары.Характеристика            КАК Характеристика,
    |    ВЫБОР
    |        КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
    |            ТОГДА ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
    |        ИНАЧЕ ТаблицаТовары.Серия
    |    КОНЕЦ                                    КАК Серия,
    |    ВЫБОР
    |        КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
    |                ИЛИ ТаблицаТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
    |            ТОГДА ТаблицаТовары.Номенклатура.ЕдиницаИзмерения
    |        ИНАЧЕ ТаблицаТовары.Упаковка
    |    КОНЕЦ                                    КАК Упаковка,
    |    СУММА(ТаблицаТовары.Количество)            КАК Количество,
    |    СУММА(ВЫБОР
    |        КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
    |            ТОГДА ТаблицаТовары.Количество
    |        ИНАЧЕ ТаблицаТовары.КоличествоУпаковок
    |    КОНЕЦ)                                    КАК КоличествоУпаковок
    |ПОМЕСТИТЬ ТаблицаТоваровСуммированная
    |ИЗ
    |    ТоварыЗадания КАК ТаблицаТовары
    |
    |СГРУППИРОВАТЬ ПО
    |    ТаблицаТовары.Ссылка,
    |    ТаблицаТовары.Склад,
    |    ТаблицаТовары.Помещение,
    |    ТаблицаТовары.Номенклатура,
    |    ТаблицаТовары.Характеристика,
    |    ВЫБОР
    |        КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
    |            ТОГДА ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
    |        ИНАЧЕ ТаблицаТовары.Серия
    |    КОНЕЦ,
    |    ВЫБОР
    |        КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
    |                ИЛИ ТаблицаТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
    |            ТОГДА ТаблицаТовары.Номенклатура.ЕдиницаИзмерения
    |        ИНАЧЕ ТаблицаТовары.Упаковка
    |    КОНЕЦ
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ДанныеЗадания.Ссылка                        КАК Ссылка,
    |    ПРЕДСТАВЛЕНИЕ(ДанныеЗадания.Ссылка)            КАК СсылкаПредставление,
    |    ДанныеЗадания.Номер                            КАК Номер,
    |    ДанныеЗадания.Дата                            КАК Дата,
    |    ДанныеЗадания.Склад                            КАК Склад,
    |    ПРЕДСТАВЛЕНИЕ(ДанныеЗадания.Склад)            КАК СкладПредставление,
    |    ПРЕДСТАВЛЕНИЕ(ДанныеЗадания.Помещение)        КАК ПомещениеПредставление,
    |    ЛОЖЬ                                        КАК ЭтоНакладная,
    |    ЛОЖЬ                                        КАК ИспользуетсяАдресноеХранение,
    |    ВЫБОР
    |        КОГДА ДанныеЗадания.Склад.ИспользоватьСкладскиеПомещения
    |                И ДанныеЗадания.Дата >= ДанныеЗадания.Склад.ДатаНачалаИспользованияСкладскихПомещений
    |            ТОГДА ВЫБОР
    |                    КОГДА ДанныеЗадания.Помещение.ИспользоватьАдресноеХранениеСправочно
    |                            И (НЕ ДанныеЗадания.Помещение.ИспользоватьАдресноеХранение
    |                                ИЛИ ДанныеЗадания.Дата < ДанныеЗадания.Помещение.ДатаНачалаАдресногоХраненияОстатков)
    |                        ТОГДА ИСТИНА
    |                    ИНАЧЕ ЛОЖЬ
    |                КОНЕЦ
    |        ИНАЧЕ ВЫБОР
    |                КОГДА ДанныеЗадания.Склад.ИспользоватьАдресноеХранениеСправочно
    |                        И (НЕ ДанныеЗадания.Склад.ИспользоватьАдресноеХранение
    |                            ИЛИ ДанныеЗадания.Дата < ДанныеЗадания.Склад.ДатаНачалаАдресногоХраненияОстатков)
    |                    ТОГДА ИСТИНА
    |                ИНАЧЕ ЛОЖЬ
    |            КОНЕЦ
    |    КОНЕЦ                                        КАК ИспользуетсяСправочноеХранение,
    |    ВЫБОР
    |        КОГДА ДанныеЗадания.Склад.ИспользоватьСкладскиеПомещения
    |                И ДанныеЗадания.Дата >= ДанныеЗадания.Склад.ДатаНачалаИспользованияСкладскихПомещений
    |            ТОГДА ДанныеЗадания.Помещение.ИспользованиеРабочихУчастков
    |        ИНАЧЕ ДанныеЗадания.Склад.ИспользованиеРабочихУчастков
    |    КОНЕЦ                                        КАК ИспользованиеРабочихУчастков,
    |    ЛОЖЬ                                        КАК ИспользуетсяОрдернаяСхема,
    |    ДанныеЗадания.Исполнитель.ФизическоеЛицо    КАК ИсполнительПредставление,
    |    ДанныеЗадания.ПечататьКоличествоПоУчету        КАК ВыводитьПоУчету
    |ИЗ
    |    Документ.ПересчетТоваров КАК ДанныеЗадания
    |
    |ГДЕ
    |    ДанныеЗадания.Ссылка В(&МассивОбъектов)
    |
    |УПОРЯДОЧИТЬ ПО
    |    Ссылка,
    |    Склад
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ТаблицаТоваров.Ссылка                                КАК Ссылка,
    |    ТаблицаТоваров.Склад                                КАК Склад,
    |    ЕСТЬNULL(ОсновныеЯчейки.Ячейка.РабочийУчасток, &РабочийУчастокПоУмолчанию)    КАК РабочийУчасток,
    |    ПРЕДСТАВЛЕНИЕ(ОсновныеЯчейки.Ячейка.РабочийУчасток)    КАК ПредставлениеРабочегоУчастка,
    |    ЕСТЬNULL(ОсновныеЯчейки.Ячейка.ПорядокОбхода, 0)    КАК ПорядокОбхода,
    |    ЕСТЬNULL(ОсновныеЯчейки.Ячейка, &ЯчейкаПоУмолчанию)    КАК ОсновнаяЯчейка,
    |    ЕСТЬNULL(ОсновныеЯчейки.Ячейка.Код, """")            КАК ОсновнаяЯчейкаПредставление,
    |    ЕСТЬNULL(ОстальныеЯчейки.Ячейка.ПорядокОбхода, 0)    КАК ПорядокОбходаДополнительнаяЯчейка,
    |    ЕСТЬNULL(ОстальныеЯчейки.Ячейка.Код, """")            КАК ЯчейкаПредставление,
    |    ТаблицаТоваров.НомерСтроки                            КАК НомерСтроки,
    |    ТаблицаТоваров.Номенклатура.Код                        КАК Код,
    |    ТаблицаТоваров.Номенклатура.Артикул                    КАК Артикул,
    |    ТаблицаТоваров.Номенклатура                            КАК Номенклатура,
    |    ТаблицаТоваров.Номенклатура.НаименованиеПолное        КАК ПредставлениеНоменклатуры,
    |    ТаблицаТоваров.Характеристика                        КАК Характеристика,
    |    ТаблицаТоваров.Характеристика.НаименованиеПолное    КАК ПредставлениеХарактеристики,
    |    Товары.ВидНоменклатуры.НастройкаИспользованияСерий    КАК НастройкаИспользованияСерий,
    |    ТаблицаТоваров.Серия                                КАК Серия,
    |    ТаблицаТоваров.Серия.Наименование                    КАК ПредставлениеСерии,
    |    ТаблицаТоваров.Упаковка                                КАК Упаковка,
    |    ПРЕДСТАВЛЕНИЕ(ТаблицаТоваров.Упаковка)                КАК ПредставлениеЕдиницыИзмеренияУпаковки,
    |    ПРЕДСТАВЛЕНИЕ(Товары.ЕдиницаИзмерения)                КАК ПредставлениеБазовойЕдиницыИзмерения,
    |    ВЫБОР
    |        КОГДА ЕСТЬNULL(Упаковки.ТипУпаковки, НЕОПРЕДЕЛЕНО) = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
    |            ТОГДА ИСТИНА
    |        ИНАЧЕ ЛОЖЬ
    |    КОНЕЦ                                                КАК ТоварноеМесто,
    |    ВЫБОР
    |        КОГДА &ЗаданиеПересчета
    |            ТОГДА 0
    |        ИНАЧЕ ТаблицаТоваров.Количество
    |    КОНЕЦ                                                КАК Количество,
    |    ТаблицаТоваров.КоличествоУпаковок                    КАК КоличествоУпаковок
    |ИЗ
    |    ТаблицаТоваровСуммированная КАК ТаблицаТоваров
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
    |        ПО ТаблицаТоваров.Номенклатура = Товары.Ссылка
    |        
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК Упаковки
    |        ПО ТаблицаТоваров.Упаковка = Упаковки.Ссылка
    |        
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК ОсновныеЯчейки
    |        ПО ТаблицаТоваров.Номенклатура = ОсновныеЯчейки.Номенклатура
    |            И ОсновныеЯчейки.ОсновнаяЯчейка
    |            И ТаблицаТоваров.Склад = ОсновныеЯчейки.Склад
    |            И ВЫБОР
    |                КОГДА ТаблицаТоваров.Склад.ИспользоватьСкладскиеПомещения
    |                        И ТаблицаТоваров.Ссылка.Дата >= ТаблицаТоваров.Склад.ДатаНачалаИспользованияСкладскихПомещений
    |                    ТОГДА ТаблицаТоваров.Помещение = ОсновныеЯчейки.Помещение
    |                ИНАЧЕ ОсновныеЯчейки.Помещение = ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)
    |            КОНЕЦ
    |        
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК ОстальныеЯчейки
    |        ПО ТаблицаТоваров.Номенклатура = ОстальныеЯчейки.Номенклатура
    |            И НЕ ОстальныеЯчейки.ОсновнаяЯчейка
    |            И ТаблицаТоваров.Склад = ОстальныеЯчейки.Склад
    |            И ВЫБОР
    |                КОГДА ТаблицаТоваров.Склад.ИспользоватьСкладскиеПомещения
    |                        И ТаблицаТоваров.Ссылка.Дата >= ТаблицаТоваров.Склад.ДатаНачалаИспользованияСкладскихПомещений
    |                    ТОГДА ТаблицаТоваров.Помещение = ОстальныеЯчейки.Помещение
    |                ИНАЧЕ ОстальныеЯчейки.Помещение = ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)
    |            КОНЕЦ
    |
    |УПОРЯДОЧИТЬ ПО
    |    Ссылка,
    |    Склад,
    |    РабочийУчасток,
    |    НомерСтроки,
    |    Номенклатура,
    |    Характеристика,
    |    Серия
    |
    |ИТОГИ ПО
    |    Ссылка,
    |    Склад,
    |    РабочийУчасток
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ТаблицаТоваров.Ссылка                КАК Ссылка,
    |    ТаблицаТоваров.Склад                КАК Склад,
    |    ЕСТЬNULL(ОсновныеЯчейки.Ячейка.РабочийУчасток, &РабочийУчастокПоУмолчанию)    КАК РабочийУчасток,
    |    ТаблицаТоваров.НомерСтроки            КАК НомерСтроки,
    |    ТаблицаТоваров.Номенклатура            КАК Номенклатура,
    |    ТаблицаТоваров.Характеристика        КАК Характеристика,
    |    ТаблицаТоваров.Серия.Наименование    КАК ПредставлениеСерии
    |ИЗ
    |    ТоварыЗадания КАК ТаблицаТоваров
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК ОсновныеЯчейки
    |        ПО ТаблицаТоваров.Номенклатура = ОсновныеЯчейки.Номенклатура
    |            И ОсновныеЯчейки.ОсновнаяЯчейка
    |            И ТаблицаТоваров.Склад = ОсновныеЯчейки.Склад
    |            И ВЫБОР
    |                КОГДА ТаблицаТоваров.Склад.ИспользоватьСкладскиеПомещения
    |                        И ТаблицаТоваров.Ссылка.Дата >= ТаблицаТоваров.Склад.ДатаНачалаИспользованияСкладскихПомещений
    |                    ТОГДА ТаблицаТоваров.Помещение = ОсновныеЯчейки.Помещение
    |                ИНАЧЕ ОсновныеЯчейки.Помещение = ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)
    |            КОНЕЦ
    |
    |ГДЕ
    |    ТаблицаТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
    |    И НЕ ТаблицаТоваров.Серия ЕСТЬ NULL
    |
    |УПОРЯДОЧИТЬ ПО
    |    Ссылка,
    |    Склад,
    |    РабочийУчасток,
    |    НомерСтроки,
    |    Номенклатура,
    |    Характеристика";
    
    ЗаданиеПересчета = (ПараметрыПечати.ТипЗадания = "ЗаданиеНаПересчет");
    
    Если ЗаданиеПересчета Тогда
        ТекстУсловияТоваровЗадания =
        "    И (ТоварыДокумента.Номенклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар),
        |                                                    ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))
        |        ИЛИ ТоварыДокумента.Номенклатура.ТипНоменклатуры ЕСТЬ NULL)";
    Иначе
        ТекстУсловияТоваровЗадания = "";
    КонецЕсли;
    
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ТекстУсловияТоваровЗадания", ТекстУсловияТоваровЗадания);
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
                                "&НастройкаИспользованияСерий",
                                "ЗНАЧЕНИЕ(Перечисление.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара)");
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
                                "&РабочийУчастокПоУмолчанию",
                                "ЗНАЧЕНИЕ(Справочник.РабочиеУчастки.ПустаяСсылка)");
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
                                "&ЯчейкаПоУмолчанию",
                                "ЗНАЧЕНИЕ(Справочник.СкладскиеЯчейки.ПустаяСсылка)");
    
    Запрос = Новый Запрос;
    Запрос.Текст = ТекстЗапроса;
    Запрос.УстановитьПараметр("МассивОбъектов",        МассивОбъектов);
    Запрос.УстановитьПараметр("ЗаданиеПересчета",    ЗаданиеПересчета);
    
    УстановитьПривилегированныйРежим(Истина);
    Результат = Запрос.ВыполнитьПакет();
    УстановитьПривилегированныйРежим(Ложь);
    
    МаксимальныйИндекс = Результат.ВГраница();
    
    ДанныеЗадания = Новый Структура;
    ДанныеЗадания.Вставить("РезультатПоОшибкам",        Неопределено);
    ДанныеЗадания.Вставить("РезультатПоРаспоряжениям",    Неопределено);
    ДанныеЗадания.Вставить("РезультатПоШапке",            Результат[МаксимальныйИндекс - 2]);
    ДанныеЗадания.Вставить("РезультатПоТабличнойЧасти",    Результат[МаксимальныйИндекс - 1]);
    ДанныеЗадания.Вставить("РезультатПоУпаковкам",        Неопределено);
    ДанныеЗадания.Вставить("РезультатПоСериям",            Результат[МаксимальныйИндекс]);
    
    Возврат ДанныеЗадания;
    
КонецФункции
Функция ТекстЗапросаТоварыЗаданияОтборРазмещениеТоваров(УчитыватьУпаковки)
    
    Если УчитыватьУпаковки Тогда
        
        ТекстЗапроса =
        "ВЫБРАТЬ
        |    ДанныеДокумента.Ссылка                        КАК Ссылка,
        |    ДанныеДокумента.Склад                        КАК Склад,
        |    ДанныеДокумента.Помещение                    КАК Помещение,
        |    МИНИМУМ(ТоварыДокумента.НомерСтроки)        КАК НомерСтроки,
        |    ТоварыДокумента.Номенклатура                КАК Номенклатура,
        |    ТоварыДокумента.Характеристика                КАК Характеристика,
        |    ТоварыДокумента.Серия                        КАК Серия,
        |    ТоварыДокумента.Упаковка                    КАК Упаковка,
        |    СУММА(ТоварыДокумента.Количество)            КАК Количество,
        |    СУММА(ТоварыДокумента.КоличествоУпаковок)    КАК КоличествоУпаковок
        |ПОМЕСТИТЬ ТоварыЗадания
        |ИЗ
        |    Документ.ПересчетТоваров.Товары КАК ТоварыДокумента
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПересчетТоваров КАК ДанныеДокумента
        |        ПО ТоварыДокумента.Ссылка = ДанныеДокумента.Ссылка
        |
        |ГДЕ
        |    ТоварыДокумента.Ссылка В(&МассивОбъектов)
        |    И &ТекстУсловияТоваровЗадания
        |
        |СГРУППИРОВАТЬ ПО
        |    ДанныеДокумента.Ссылка,
        |    ДанныеДокумента.Склад,
        |    ДанныеДокумента.Помещение,
        |    ТоварыДокумента.Номенклатура,
        |    ТоварыДокумента.Характеристика,
        |    ТоварыДокумента.Серия,
        |    ТоварыДокумента.Упаковка";
        
    Иначе
        
        ТекстЗапроса =
        "ВЫБРАТЬ
        |    ДанныеДокумента.Ссылка                        КАК Ссылка,
        |    ДанныеДокумента.Склад                        КАК Склад,
        |    ДанныеДокумента.Помещение                    КАК Помещение,
        |    МИНИМУМ(ТоварыДокумента.НомерСтроки)        КАК НомерСтроки,
        |    ТоварыДокумента.Номенклатура                КАК Номенклатура,
        |    ТоварыДокумента.Характеристика                КАК Характеристика,
        |    ТоварыДокумента.Серия                        КАК Серия,
        |    &УпаковкаПоУмолчанию                        КАК Упаковка,
        |    СУММА(ТоварыДокумента.Количество)            КАК Количество,
        |    СУММА(ТоварыДокумента.КоличествоУпаковок)    КАК КоличествоУпаковок
        |ПОМЕСТИТЬ ТоварыЗадания
        |ИЗ
        |    Документ.ПересчетТоваров.Товары КАК ТоварыДокумента
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПересчетТоваров КАК ДанныеДокумента
        |        ПО ТоварыДокумента.Ссылка = ДанныеДокумента.Ссылка
        |
        |ГДЕ
        |    ТоварыДокумента.Ссылка В(&МассивОбъектов)
        |    И ЕСТЬNULL(ТоварыДокумента.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
        |    И &ТекстУсловияТоваровЗадания
        |
        |СГРУППИРОВАТЬ ПО
        |    ДанныеДокумента.Ссылка,
        |    ДанныеДокумента.Склад,
        |    ДанныеДокумента.Помещение,
        |    ТоварыДокумента.Номенклатура,
        |    ТоварыДокумента.Характеристика,
        |    ТоварыДокумента.Серия,
        |    &УпаковкаПоУмолчанию
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |    ДанныеДокумента.Ссылка                    КАК Ссылка,
        |    ДанныеДокумента.Склад                    КАК Склад,
        |    ДанныеДокумента.Помещение                КАК Помещение,
        |    МИНИМУМ(ТоварыДокумента.НомерСтроки)    КАК НомерСтроки,
        |    ТоварыБезУпаковок.Номенклатура            КАК Номенклатура,
        |    ТоварыБезУпаковок.Характеристика        КАК Характеристика,
        |    ТоварыБезУпаковок.Серия                    КАК Серия,
        |    &УпаковкаПоУмолчанию                    КАК Упаковка,
        |    СУММА(ТоварыДокумента.Количество)        КАК Количество,
        |    СУММА(ТоварыДокумента.Количество)        КАК КоличествоУпаковок
        |ИЗ
        |    (ВЫБРАТЬ
        |        ТоварыДокумента.Ссылка                КАК Ссылка,
        |        ТоварыДокумента.Номенклатура        КАК Номенклатура,
        |        ТоварыДокумента.Характеристика        КАК Характеристика,
        |        ТоварыДокумента.Назначение            КАК Назначение,
        |        ТоварыДокумента.Серия                КАК Серия,
        |        МАКСИМУМ(ТоварыДокумента.Упаковка)    КАК Упаковка
        |    ИЗ
        |        Документ.ПересчетТоваров.Товары КАК ТоварыДокумента
        |    
        |    ГДЕ
        |        ТоварыДокумента.Ссылка В(&МассивОбъектов)
        |        И ЕСТЬNULL(ТоварыДокумента.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
        |        И &ТекстУсловияТоваровЗадания
        |    
        |    СГРУППИРОВАТЬ ПО
        |        ТоварыДокумента.Ссылка,
        |        ТоварыДокумента.Номенклатура,
        |        ТоварыДокумента.Характеристика,
        |        ТоварыДокумента.Назначение,
        |        ТоварыДокумента.Серия
        |    
        |    ) КАК ТоварыБезУпаковок
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПересчетТоваров.Товары КАК ТоварыДокумента
        |        ПО ТоварыБезУпаковок.Ссылка = ТоварыДокумента.Ссылка
        |            И ТоварыБезУпаковок.Номенклатура = ТоварыДокумента.Номенклатура
        |            И ТоварыБезУпаковок.Характеристика = ТоварыДокумента.Характеристика
        |            И ТоварыБезУпаковок.Назначение = ТоварыДокумента.Назначение
        |            И ТоварыБезУпаковок.Серия = ТоварыДокумента.Серия
        |            И ТоварыБезУпаковок.Упаковка = ТоварыДокумента.Упаковка
        |        
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПересчетТоваров КАК ДанныеДокумента
        |        ПО ТоварыБезУпаковок.Ссылка = ДанныеДокумента.Ссылка
        |
        |СГРУППИРОВАТЬ ПО
        |    ДанныеДокумента.Ссылка,
        |    ДанныеДокумента.Склад,
        |    ДанныеДокумента.Помещение,
        |    ТоварыБезУпаковок.Номенклатура,
        |    ТоварыБезУпаковок.Характеристика,
        |    ТоварыБезУпаковок.Серия,
        |    &УпаковкаПоУмолчанию";
        
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
                                    "&УпаковкаПоУмолчанию",
                                    "ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)");
        
    КонецЕсли;
    
    Возврат ТекстЗапроса;
    
КонецФункции
18 Грюбус
 
15.07.24
14:48
Функция ПечатьЗадания(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)
Конкретно в этой строчке он ругается. Хотя всё 1 в 1 как в типовой из конфига
19 Pprog151713
 
15.07.24
14:59
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
20 Грюбус
 
15.07.24
15:08
(19) Не помогло
21 Волшебник
 
15.07.24
15:09
(18) В этой строчке он не может ругаться, потому что там нет обращения к переменной ПараметрыПечати
22 Волшебник
 
15.07.24
15:10
Ругается где-то тут:

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    ТабДок = ПечатьЗадания(МассивОбъектов, ОбъектыПечати, ПараметрыПечати);
23 Грюбус
 
15.07.24
15:11
(21) Извиняюсь, перегрелся маленько
ТабДок = ПечатьЗадания(МассивОбъектов, ОбъектыПечати, ПараметрыПечати); Вот эта строка
24 Грюбус
 
15.07.24
15:12
(22) А почему? Вот у меня в чём вопрос
25 Волшебник
 
15.07.24
15:12
наверное ПараметрыПечати = ПараметрыВывода или наоборот
26 Волшебник
 
15.07.24
15:12
(24) Потому что нельзя обращаться к необъявленной переменной, это ж очевидно
27 Мультук
 
гуру
15.07.24
15:15
(18)

Ну так уберите этот параметр.


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

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


Функция ПечатьЗадания(МассивОбъектов, ОбъектыПечати)
28 Грюбус
 
15.07.24
15:19
(27) ВыводитьКоды                = ЗначениеЗаполнено(ИмяКолонкиКодов);
    ВыводитьГрадацииКачества    = ПараметрыПечати.ВыводитьГрадацииКачества;
    ВыводитьРезультатыПересчета = ПараметрыПечати.ВыводитьРезультатыПересчета
А это тогда не будет работать
29 Грюбус
 
15.07.24
15:36
(28) А из этого не будет работать вообще половина кода
30 maxab72
 
15.07.24
15:41
(28) выкиньте все что не работает. оставьте только то, что должно работать.
31 Грюбус
 
15.07.24
15:46
(30) В том то и дело, что должно работать всё. Если не всё будет работать- ничего вообще не будет работать. Я просто пытаюсь понять почему у меня не определяется переменная и как её определить
32 Волшебник
 
15.07.24
15:49
(31) Переменная сама не определится, её надо определить вручную:

Перем а;
а = 10;


У вас это вообще параметр функции
Функция ф(а)


сделайте ей вызов
ф(б)

где значение переменной "б" внутри функции будет доступно через "а"
33 Грюбус
 
15.07.24
15:54
(32) Я не настолько продвинутый, чтоб понимать это. Я только начинаю программировать и мне бы конкретный пример, а не какие-то уравнения)
34 Волшебник
 
15.07.24
16:00
(33) Здесь нет уравнений
35 Волшебник
 
15.07.24
16:00
(33) Кстати, Ваша фраза говорит о том, что Вы взялись не за своё дело. Закрой конфигуратор, мальчик, и позови взрослых
36 maxab72
 
15.07.24
16:19
Любопытно, прошлый пост был три месяца назад. За три месяца можно подготовиться к сертификату... если есть желание.
37 Волшебник
 
15.07.24
20:39
(36) Какие желания у бота? Ему приказывают. Или ждут желаний...
Независимо от того, куда вы едете — это в гору и против ветра!