V82.ОбщиеМодули.РегламентноеФормированиеДокументов.РегламентФормированияДокументовПоОрдерам_СформироватьДокументы C# (CSharp) Method

РегламентФормированияДокументовПоОрдерам_СформироватьДокументы() public method

        public object РегламентФормированияДокументовПоОрдерам_СформироватьДокументы(/*Настройка, ДатаНачала, ДатаОкончания, 
	    Ошибка = "", СформированныеДокументы = Неопределено, УчтенныеДокументы = Неопределено*/)
        {
            /*//На основании указанных в настройке параметров будут созданы документы "ПТиУ" или "РТиУ".
            */
            //СформированныеДокументы	=	Новый Массив;
            //УчтенныеДокументы		=	Новый Массив;
            //МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
            /*//используется для всех запросов функции
            */
            /*//Получим перечень документов для обработки в соответствии с фильтрами
            */
            //Запрос = Новый Запрос();
            /*//Определим аргумент функции КонецПериода в зависимости от периодичности
            */
            //ОписаниеПериодаДетализации = Строка(Настройка.ПериодДетализации);
            /*//Получим список обрабатываемых ордеров в соответствии с отбором в настройке и поместим его в массив
            */
            //СхемаКомпоновкиДанных 				= Справочники.НастройкиФормированияДокументовПоОрдерам.ПолучитьМакет("Настройка");
            //КомпоновщикМакетаКомпоновкиДанных 	= Новый КомпоновщикМакетаКомпоновкиДанных;
            //МакетКомпоновкиДанных 				= КомпоновщикМакетаКомпоновкиДанных.Выполнить(СхемаКомпоновкиДанных, Настройка.НастройкиКомпоновщика.Получить());
            //Запрос 								= Новый Запрос(МакетКомпоновкиДанных.НаборыДанных.СписокОрдеров.Запрос);
            //ОписаниеПараметровЗапроса = Запрос.НайтиПараметры();
            //Запрос.УстановитьПараметр("ДатаНачала", 	ДатаНачала);
            //Запрос.УстановитьПараметр("ДатаОкончания", 	КонецДня(ДатаОкончания));
            if(true/*ТаблицаОрдеров.Количество() = 0*/)
            {
                //Ошибка = "Не обнаружены данные для обработки";
            }
            /*//Запрос обрабатывает данные ордеров для создания документов ПТиУ или РТиУ
            */
            //Запрос = Новый Запрос();
            //Запрос.УстановитьПараметр("ТаблицаОрдеров", ТаблицаОрдеров);
            //Запрос.УстановитьПараметр("ГраницаНачала", 		ДатаНачала);
            //Запрос.УстановитьПараметр("ГраницаОкончания", 	КонецДня(ДатаОкончания));
            //Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
            /*//	Порядок запросов в пакете важен, так как потом выполняем его методом ВыполнитьПакет()
            */
            /*Запрос.Текст = "
            |ВЫБРАТЬ *
            |ПОМЕСТИТЬ ВременнаяТаблицаОрдеров
            |ИЗ
            |	&ТаблицаОрдеров КАК ТаблицаОрдеров
            |;
            |////////////////////////////////////////////////////////////////////////////////
            |ВЫБРАТЬ
            |	ВременнаяТаблицаОрдеров.СкладскойОрдер.Ссылка КАК Ссылка,
            |	ВременнаяТаблицаОрдеров.СкладскойОрдер.Организация КАК Организация,
            |	ВременнаяТаблицаОрдеров.СкладскойОрдер.Склад КАК Склад,
            |	ВременнаяТаблицаОрдеров.СкладскойОрдер.Контрагент КАК Контрагент,
            |	НАЧАЛОПЕРИОДА(ВЫБОР
            |			КОГДА КОНЕЦПЕРИОДА(ВременнаяТаблицаОрдеров.СкладскойОрдер.Дата, "+ОписаниеПериодаДетализации+") > &ГраницаОкончания
            |				ТОГДА &ГраницаОкончания
            |			КОГДА КОНЕЦПЕРИОДА(ВременнаяТаблицаОрдеров.СкладскойОрдер.Дата, "+ОписаниеПериодаДетализации+") > КОНЕЦПЕРИОДА(ВременнаяТаблицаОрдеров.СкладскойОрдер.Дата, МЕСЯЦ)
            |				ТОГДА КОНЕЦПЕРИОДА(ВременнаяТаблицаОрдеров.СкладскойОрдер.Дата, МЕСЯЦ)
            |			ИНАЧЕ КОНЕЦПЕРИОДА(ВременнаяТаблицаОрдеров.СкладскойОрдер.Дата, "+ОписаниеПериодаДетализации+")
            |		КОНЕЦ, ДЕНЬ) КАК Дата,
            |	ВЫБОР
            |		КОГДА ВременнаяТаблицаОрдеров.СкладскойОрдер ССЫЛКА Документ.ПриходныйОрдерНаТовары ТОГДА
            |			ВременнаяТаблицаОрдеров.СкладскойОрдер.ЗаказПоставщику
            |		КОГДА ВременнаяТаблицаОрдеров.СкладскойОрдер ССЫЛКА Документ.РасходныйОрдерНаТовары
            |			И ВременнаяТаблицаОрдеров.СкладскойОрдер.ДокументПередачи ССЫЛКА Документ.ЗаказПокупателя ТОГДА
            |			ВременнаяТаблицаОрдеров.СкладскойОрдер.ДокументПередачи
            |		ИНАЧЕ ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
            |	КОНЕЦ КАК Заказ
            |ПОМЕСТИТЬ ДокументыИсточники
            |ИЗ
            |	ВременнаяТаблицаОрдеров КАК ВременнаяТаблицаОрдеров
            |ИНДЕКСИРОВАТЬ ПО
            |	Ссылка,
            |	Дата
            |;
            |
            |////////////////////////////////////////////////////////////////////////////////
            |ВЫБРАТЬ РАЗЛИЧНЫЕ
            |	ДокументыИсточники.Ссылка 	КАК Документ,
            |	ДокументыИсточники.Дата 	КАК Дата
            |ИЗ
            |	ДокументыИсточники КАК ДокументыИсточники
            |УПОРЯДОЧИТЬ ПО Дата
            |;
            |
            |////////////////////////////////////////////////////////////////////////////////
            |ВЫБРАТЬ РАЗЛИЧНЫЕ
            |	ДокументыИсточники.Дата 							КАК Дата,
            |	ДокументыИсточники.Организация 						КАК Организация,
            |	ДокументыИсточники.Склад 							КАК Склад,
            |	ДокументыИсточники.Контрагент 						КАК Контрагент,
            |	ДокументыИсточники.Заказ 							КАК Заказ
            |
            |ИЗ
            |	ДокументыИсточники КАК ДокументыИсточники
            |УПОРЯДОЧИТЬ ПО Дата
            |;";*/
            /*//Третий запрос пакета содержит выборку документов-источников заполнения
            */
            /*//Запоминаем документы, на основании которых проводим заполнение.
            */
            //УчтенныеДокументы = РезультатыЗапросов[2].Выгрузить().ВыгрузитьКолонку("Документ");
            /*//Четвертый запрос пакета содержит выборку по ключевым полям создаваемых документов
            */
            //ВыборкаКлючейДокументов = РезультатыЗапросов[3].Выбрать();
            /*//Получим не зависящие от результатов запросов данные
            */
            //ОсновнойОтветственный 			= УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойОтветственный");
            //мВалютаРегламентированногоУчета = глЗначениеПеременной("ВалютаРегламентированногоУчета");
            //ВидДокумента 					= Настройка.ВидРегулярногоДокумента;
            //МетаданныеДокумента 			= Метаданные.Документы[ВидДокумента];
            //ШаблонДокумента 				= Настройка.ШаблонРегулярногоДокумента;
            if(true/*ВидДокумента = "ПоступлениеТоваровУслуг"*/)
            {
                //СтруктураПараметровДляПолученияДоговора = ЗаполнениеДокументов.ПолучитьСтруктуруПараметровДляПолученияДоговораПокупки();
            }
            /*// Структура реквизитов для заполнения цен.
            */
            //СтруктураРеквизитовДокументаДляЦенообразования = Новый Структура;
            //СтруктураРеквизитовДокументаДляЦенообразования.Вставить("ТипЦен");
            //СтруктураРеквизитовДокументаДляЦенообразования.Вставить("ВалютаДокумента");
            //СтруктураРеквизитовДокументаДляЦенообразования.Вставить("КурсВзаиморасчетов");
            //СтруктураРеквизитовДокументаДляЦенообразования.Вставить("КратностьВзаиморасчетов");
            //СтруктураРеквизитовДокументаДляЦенообразования.Вставить("УчитыватьНДС");
            //СтруктураРеквизитовДокументаДляЦенообразования.Вставить("СуммаВключаетНДС");
            if(true/*ВидДокумента = "ПоступлениеТоваровУслуг"*/)
            {
                //СтруктураРеквизитовДокументаДляЦенообразования.Вставить("НДСВключенВСтоимость");
                //СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатурыКонтрагентов;
                //ИмяРегистраЦен 		= "ЗаказыПоставщикам";
                //ИмяИзмеренияОтбора 	= "ЗаказПоставщику";
            }
            /*//Подготовим пакет запросов для получения данных о номенклатуре указанной в ордерах
            */
            /*//Данные для заполнения формируемых документов выбираются запросом с индексом [2]
            */
            //ЗапросТовары = Новый Запрос();
            //ЗапросТовары.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
            /*ЗапросТовары.Текст =
            "ВЫБРАТЬ
            |	ОстаткиЗаказов.Номенклатура,
            |	ОстаткиЗаказов.ХарактеристикаНоменклатуры,
            |	МИНИМУМ(ВЫРАЗИТЬ(ОстаткиЗаказов.Цена * ОстаткиЗаказов.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ЕСТЬNULL(ОстаткиЗаказов.ЕдиницаИзмерения.Коэффициент, 1) КАК ЧИСЛО(15, 2))) КАК Цена
            |ПОМЕСТИТЬ ВТЦеныНоменклатуры
            |ИЗ
            |	РегистрНакопления." + ИмяРегистраЦен + ".Остатки(, " + ИмяИзмеренияОтбора + " = &Заказ) КАК ОстаткиЗаказов
            |
            |СГРУППИРОВАТЬ ПО
            |	ОстаткиЗаказов.Номенклатура,
            |	ОстаткиЗаказов.ХарактеристикаНоменклатуры
            |;
            |
            |////////////////////////////////////////////////////////////////////////////////
            |ВЫБРАТЬ
            |	ПриходныйОрдерТовары.Номенклатура КАК Номенклатура,
            |	ПриходныйОрдерТовары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
            |	ПриходныйОрдерТовары.СерияНоменклатуры КАК СерияНоменклатуры,
            |	ПриходныйОрдерТовары.Коэффициент КАК Коэффициент,
            |	ПриходныйОрдерТовары.Количество КАК Количество
            |ПОМЕСТИТЬ ВТНоменклатураОрдеров
            |ИЗ
            |	Документ.ПриходныйОрдерНаТовары.Товары КАК ПриходныйОрдерТовары
            |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДокументыИсточники КАК ДокументыИсточники
            |		ПО ПриходныйОрдерТовары.Ссылка = ДокументыИсточники.Ссылка
            |ГДЕ
            |	ДокументыИсточники.Дата = &Дата
            |	И ДокументыИсточники.Склад = &Склад
            |	И ДокументыИсточники.Организация = &Организация
            |	И ДокументыИсточники.Контрагент = &Контрагент
            |	И ДокументыИсточники.Заказ = &Заказ
            |
            |ОБЪЕДИНИТЬ ВСЕ
            |
            |ВЫБРАТЬ
            |	РасходныйОрдерТовары.Номенклатура,
            |	РасходныйОрдерТовары.ХарактеристикаНоменклатуры,
            |	РасходныйОрдерТовары.СерияНоменклатуры,
            |	РасходныйОрдерТовары.Коэффициент,
            |	РасходныйОрдерТовары.Количество
            |ИЗ
            |	Документ.РасходныйОрдерНаТовары.Товары КАК РасходныйОрдерТовары
            |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДокументыИсточники КАК ДокументыИсточники
            |		ПО РасходныйОрдерТовары.Ссылка = ДокументыИсточники.Ссылка
            |ГДЕ
            |	ДокументыИсточники.Дата = &Дата
            |	И ДокументыИсточники.Склад = &Склад
            |	И ДокументыИсточники.Организация = &Организация
            |	И ДокументыИсточники.Контрагент = &Контрагент
            |	И ДокументыИсточники.Заказ = &Заказ
            |;
            |
            |////////////////////////////////////////////////////////////////////////////////
            |ВЫБРАТЬ
            |	ВТНоменклатураОрдеров.Номенклатура,
            |	ВТНоменклатураОрдеров.ХарактеристикаНоменклатуры,
            |	ВТНоменклатураОрдеров.СерияНоменклатуры,
            |	ВТНоменклатураОрдеров.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
            |	ВТНоменклатураОрдеров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Коэффициент,
            |	ВТНоменклатураОрдеров.Номенклатура.СтавкаНДС КАК СтавкаНДС,
            |	ЕСТЬNULL(ВТЦеныНоменклатуры.Цена, 0) КАК Цена,
            |	СУММА(ВТНоменклатураОрдеров.Количество * ВТНоменклатураОрдеров.Коэффициент / ВТНоменклатураОрдеров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент) КАК Количество
            |ИЗ
            |	ВТНоменклатураОрдеров КАК ВТНоменклатураОрдеров
            |		ЛЕВОЕ СОЕДИНЕНИЕ ВТЦеныНоменклатуры КАК ВТЦеныНоменклатуры
            |		ПО ВТНоменклатураОрдеров.Номенклатура = ВТЦеныНоменклатуры.Номенклатура
            |			И ВТНоменклатураОрдеров.ХарактеристикаНоменклатуры = ВТЦеныНоменклатуры.ХарактеристикаНоменклатуры
            |
            |СГРУППИРОВАТЬ ПО
            |	ВТНоменклатураОрдеров.СерияНоменклатуры,
            |	ВТНоменклатураОрдеров.ХарактеристикаНоменклатуры,
            |	ВТНоменклатураОрдеров.Номенклатура,
            |	ВТНоменклатураОрдеров.Номенклатура.ЕдиницаХраненияОстатков,
            |	ВТНоменклатураОрдеров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент,
            |	ВТНоменклатураОрдеров.Номенклатура.СтавкаНДС,
            |	ЕСТЬNULL(ВТЦеныНоменклатуры.Цена, 0)
            |
            |ИМЕЮЩИЕ
            |	СУММА(ВТНоменклатураОрдеров.Количество * ВТНоменклатураОрдеров.Коэффициент / ВТНоменклатураОрдеров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент) > 0
            |;
            |
            |////////////////////////////////////////////////////////////////////////////////
            |УНИЧТОЖИТЬ ВТЦеныНоменклатуры
            |;
            |
            |////////////////////////////////////////////////////////////////////////////////
            |УНИЧТОЖИТЬ ВТНоменклатураОрдеров";*/
            /*//Если документов больше двух, то покажем индикатор процесса
            */
            if(true/*ВыборкаКлючейДокументов.Количество()>2*/)
            {
                //ФормаИндикатора = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных");
                //ФормаИндикатора.МаксимальноеЗначение		= ВыборкаКлючейДокументов.Количество();
                //ФормаИндикатора.КомментарийОбработкиДанных	= "Формирование документов";
                //ФормаИндикатора.НаименованиеОбработкиДанных	= "Формирование документов";
                //ФормаИндикатора.Открыть();
            }
            while(true/*ВыборкаКлючейДокументов.Следующий()*/)
            {
                /*//Получим исходные данные для заполнения документа.
            */
                /*//Параметрами запросов будут значения ключа формируемого документа.
            */
                //КлючДокумента = Новый Структура("Дата,Организация,Склад,Контрагент,Заказ");
                //ЗаполнитьЗначенияСвойств(КлючДокумента, ВыборкаКлючейДокументов);
                //ЗаполнитьЗначенияПараметровЗапроса(ЗапросТовары, КлючДокумента);
                //ДанныеТовары = ЗапросТовары.ВыполнитьПакет().Получить(2);
                /*//ДОКУМЕНТ "ПТиУ" / "РТиУ"
            */
                //НовыйДокумент = Документы[ВидДокумента].СоздатьДокумент();
                /*//По ключам документа заполняем реквизиты шапки
            */
                //ЗаполнитьЗначенияСвойств(НовыйДокумент, КлючДокумента);
                /*//Если в настройке указан шаблон - реквизиты шапки возьмем из шаблона
            */
                if(true/*ЗначениеЗаполнено(ШаблонДокумента)*/)
                {
                }
                /*//Признаки отражения в учете берем из настройки
            */
                //ЗаполнитьЗначенияСвойств(НовыйДокумент, Настройка, "ОтражатьВУправленческомУчете,ОтражатьВБухгалтерскомУчете,ОтражатьВНалоговомУчете");
                //НовыйДокумент.Дата = КлючДокумента.Дата;
                if(true/*ЗначениеЗаполнено(КлючДокумента.Заказ) И НЕ ЗначениеЗаполнено(НовыйДокумент.Сделка)*/)
                {
                    //НовыйДокумент.Сделка = КлючДокумента.Заказ;
                }
                //НовыйДокумент.Ответственный = ОсновнойОтветственный;
                //НовыйДокумент.Комментарий	= "Заполнено по ордерам";
                /*//Заполняем реквизиты, специфические для вида документа
            */
                if(true/*ВидДокумента = "ПоступлениеТоваровУслуг"*/)
                {
                    //НовыйДокумент.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад;
                    //НовыйДокумент.СкладОрдер 	 = КлючДокумента.Склад;
                    //НовыйДокумент.ВидОперации 	 = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ПокупкаКомиссия;
                }
                /*//Заполняем реквизиты шапки, зависимые от других реквизитов
            */
                if(true/*ЗначениеЗаполнено(НовыйДокумент.Сделка)*/)
                {
                    //ЗаполнитьЗначенияСвойств(НовыйДокумент, НовыйДокумент.Сделка, "Контрагент, ДоговорКонтрагента, ВалютаДокумента, ТипЦен, Организация, УчитыватьНДС, СуммаВключаетНДС");
                }
                if(true/*ЗначениеЗаполнено(НовыйДокумент.ДоговорКонтрагента)*/)
                {
                    if(true/*НЕ ЗначениеЗаполнено(НовыйДокумент.ВалютаДокумента)*/)
                    {
                        //НовыйДокумент.ВалютаДокумента = НовыйДокумент.ДоговорКонтрагента.ВалютаВзаиморасчетов;
                    }
                    //СтруктураКурсаВзаиморасчетов 			= МодульВалютногоУчета.ПолучитьКурсВалюты(НовыйДокумент.ДоговорКонтрагента.ВалютаВзаиморасчетов, НовыйДокумент.Дата);
                    //НовыйДокумент.КурсВзаиморасчетов 		= СтруктураКурсаВзаиморасчетов.Курс;
                    //НовыйДокумент.КратностьВзаиморасчетов 	= СтруктураКурсаВзаиморасчетов.Кратность;
                }
                //НовыйДокумент.Товары.Загрузить(ДанныеТовары.Выгрузить());
                /*//Заполнение цен
            */
                if(true/*ЗначениеЗаполнено(НовыйДокумент.Сделка)*/)
                {
                    /*//Цены в табличной части заполняются по заказу. Необходимо рассчитать сумму и сумму НДС
            */
                }
                if(true/*НовыйДокумент.ОтражатьВБухгалтерскомУчете*/)
                {
                    /*//счета учета номенклатуры в ТЧ
            */
                    //НовыйДокумент.ЗаполнитьСчетаУчетаВТабЧасти(НовыйДокумент.Товары, "Товары", НовыйДокумент.ОтражатьВБухгалтерскомУчете, НовыйДокумент.ОтражатьВНалоговомУчете);
                    /*//счета в шапке
            */
                    //ЗаполнитьЗначенияСвойств(НовыйДокумент, НовыйДокумент.ЗаполнитьСтруктуруСчетовУчетаШапки(НовыйДокумент.ОтражатьВБухгалтерскомУчете, НовыйДокумент.ОтражатьВНалоговомУчете));
                }
                /*//Сохраняем документ
            */
                //Сообщение = "Ошибка при записи документа " + НовыйДокумент.Метаданные().Синоним + ": ";
                /*//Запоминаем созданный документ
            */
                //СформированныеДокументы.Добавить(НовыйДокумент.Ссылка);
                /*//Обновим индикатор выполнения
            */
                if(true/*ФормаИндикатора <> Неопределено*/)
                {
                    //ФормаИндикатора.КомментарийЗначения = "" + НовыйДокумент.Ссылка;
                    //ФормаИндикатора.Значение 			= ФормаИндикатора.Значение + 1;
                    //ОбработкаПрерыванияПользователя();
                }
            }
            if(true/*ФормаИндикатора <> Неопределено*/)
            {
                //ФормаИндикатора.Закрыть();
            }
            return null;
        }
РегламентноеФормированиеДокументов