Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 10:07

Дополнительные сведения в печатной форме

Автор Anto_Mink, 04 апр 2023, 18:12

0 Пользователей и 1 гость просматривают эту тему.

Anto_Mink

Здравствуйте! Хочу сделать внешнюю обработку для печатной формы списание ОС с драгметаллами. В Бухгалтерии 3.0 макет приложен. Короче, информация о содержании драгметаллов находится в дополнительных сведениях ОС. Не получается их оттуда вытащить и засунуть в таблицу

alexandr_ll

Anto_Mink, А что вы делали и что не получилось? Приведите код вашей обработки.

LexaK

Anto_Mink, а зачем вы завели повторяющиеся доп.свойства
по нескольку золото, серебро, как вы их собираетесь в дальнейшем различать,
или у вас одно изделие может содержать 3-4 свойства золото с разным содержанием?
если помогло нажмите: Спасибо!

Anto_Mink

LexaK, Это уже заведено до меня. Почему-не знаю...

LexaK

смотря какая у вас БСП, можно использовать общий модуль
лкЗначения = УправлениеСвойствами.ЗначенияСвойств(...);
если помогло нажмите: Спасибо!

Anto_Mink


Anto_Mink


#Область ПрограммныйИнтерфейс

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

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

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


Функция ПолучитьДопСведения(Знач МассивОбъектов, Знач МассивДопСведений)

    Запрос =Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                  |    ДополнительныеСведения.Объект КАК Объект,
                  |    ДополнительныеСведения.Свойство КАК ДопСведение
              |ИЗ
                  |    РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
                  |ГДЕ
                  |    ДополнительныеСведения.Объект В(&Объект)
              |  И  ДополнительныеСведения.Свойство В(&Свойство)";
    Запрос.УстановитьПараметр("Объект",МассивОбъектов);
   Запрос.УстановитьПараметр("Свойство",МассивДопСведений);

    Возврат запрос.Выполнить().Выгрузить();

КонецФункции



Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "Акт о списании ОС с ДМ", "Акт о списании ОС с ДМ",
   СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати));
КонецПроцедуры
Функция СформироватьПечатнуюФорму(МассивОбъектов,ОбъектыПечати)
   
   Перем ПодразделениеОтветственныхЛиц;
      УстановитьПривилегированныйРежим(Истина);
    ТабличныйДокумент = Новый ТабличныйДокумент;
   ТабличныйДокумент.АвтоМасштаб = Истина;
   ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
   ТабличныйДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_АктСписанияОСсДМ";
   КоличествоОС4б = 0;
   МакетОС4б = ПолучитьМакет("ПФ_MXL_ОС4б");
   Шапка0 = МакетОС4б.ПолучитьОбласть("Шапка0");
   Шапка1 = МакетОС4б.ПолучитьОбласть("Шапка1");
   Шапка2 = МакетОС4б.ПолучитьОбласть("Шапка2");
   Строка1 = МакетОС4б.ПолучитьОбласть("Строка1"); 
   МВТ = Новый МенеджерВременныхТаблиц;
   СоздатьВременныеТаблицыРегистров(МВТ, МассивОбъектов);

   Запрос = Новый Запрос();
   Запрос.МенеджерВременныхТаблиц = МВТ;

   Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);

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

   Результат = Запрос.Выполнить();
   Если Результат.Пустой() Тогда

      ТабличныйДокумент.Вывести(Шапка0);
      ТабличныйДокумент.АвтоМасштаб = Истина;
      ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
      Возврат ТабличныйДокумент;

   КонецЕсли;

   ВыборкаДокументов = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

   ПервыйДокумент = Истина;

   // Цикл по документам
   Пока ВыборкаДокументов.Следующий() Цикл

      // Выборка по табличной части
      ВыборкаСтрок = ВыборкаДокументов.Выбрать(ОбходРезультатаЗапроса.Прямой);

      Если НЕ ПервыйДокумент Тогда
         ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
      КонецЕсли;
      ПервыйДокумент = Ложь;

      НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;

      СведенияОбОрганизации    = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(ВыборкаДокументов.Организация, ВыборкаДокументов.Дата);
      ПредставлениеОрганизации = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОбОрганизации, "НаименованиеДляПечатныхФорм");

      ПодразделениеОтветственныхЛиц = ВыборкаДокументов.ПодразделениеОрганизации;

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

            АмортизацияОС = ?(ВыборкаСтрок.ПорядокПогашенияСтоимости = Перечисления.ПорядокПогашенияСтоимостиОС.СписаниеПриПринятииКУчету,
               0,
               ВыборкаСтрок.НачАмортизация);

            Строка1.Параметры.НачСтоимость = СтоимостьОС;
            Строка1.Параметры.НачАмортизация = АмортизацияОС;
            Строка1.Параметры.ОстСтоимость = ?(ВыборкаСтрок.ПорядокПогашенияСтоимости = Перечисления.ПорядокПогашенияСтоимостиОС.СписаниеПриПринятииКУчету,
               0,СтоимостьОС - АмортизацияОС);
                Строка1.Параметры.Причина = ВыборкаСтрок.ПричинаСписания;
                ДокументПринятияКУчету     = "";
            ДокументВводаВЭксплуатацию = "";
            ПринятоКУчету              = "";
            ВведеноВЭксплуатацию       = "";   
                           
МассивДопСведений= Новый Массив;
МассивДопСведений.Добавить(ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Серебро"));
МассивДопСведений.Добавить(ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Золото"));
МассивДопСведений.Добавить(ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Платина"));
ТаблицаДопСвойств = ПолучитьДопСведения(МассивОбъектов,МассивДопСведений);
ДопСведение =ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Серебро");
ДопСведение =ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Золото");
ДопСведение =ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Платина");
НоваяСтруктура= Новый Структура;

НоваяСтруктура.Вставить("ДопСведение",ДопСведение);

МассивЗначения= ТаблицаДопСвойств.НайтиСтроки(НоваяСтруктура);

Если МассивЗначения.Количество() <> 0 тогда

    ЗначениеДопСведения = МассивЗначения[0].Значение;

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

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

         КонецЦикла;

         ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
         Шапка2.Параметры.Заполнить(ВыборкаСтрок);
         Шапка2.Параметры.ГлавБух = ОтветственныеЛица.ГлавныйБухгалтерПредставление;
         ТабличныйДокумент.Вывести(Шапка2);
         
         Если Не ПерваяИтерация Тогда
            КоличествоОС4б = КоличествоОС4б + 1;
         КонецЕсли;


      УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаДокументов.Ссылка);

   КонецЦикла;
   ИмяМакета = "ПФ_MXL_ОС4б";
    СтатистикаПоПоказателямКлиентСервер.ДобавитьСобытие("ТаблицаОС.Печать.ОС4б");
   Возврат ТабличныйДокумент;
 КонецФункции   
Процедура СоздатьВременныеТаблицыРегистров(МВТ, МассивОбъектов)

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

   Результат = Запрос.ВыполнитьПакет();
   // 1.1. Интервал дат
   Выборка = Результат[0].Выбрать(ОбходРезультатаЗапроса.Прямой);
   Выборка.Следующий();
   ДатаОТ = Выборка.ДатаОТ;
   ДатаДО = Выборка.ДатаДО;

   // 1.2. Список организаций
   МассивОрганизаций = Результат[1].Выгрузить(ОбходРезультатаЗапроса.Прямой).ВыгрузитьКолонку("Организация");

   // 1.3. Список ОС
   МассивОС = Результат[2].Выгрузить(ОбходРезультатаЗапроса.Прямой).ВыгрузитьКолонку("ОсновноеСредство");

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

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

#КонецОбласти

LexaK

Anto_Mink, вы такой большой код выложили! и наверно он не работает?
если помогло нажмите: Спасибо!

Kvark5d

Мысли вслух...
1. Необходимо разобраться почему наименования доп. сведений повторяются.
Предполагаю, что таким образом имели в виду что первое Золото это ссылка на номенклатуру золото, а второе его вес. Хотя тип значения Доп. значение говорит о другом.
2. Необходимо понимать, что НайтиПоНаименованию("Серебро") вернет ссылку на первый попавшийся элемент, а их с именем серебро два.
3.
ДопСведение =ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Серебро");
ДопСведение =ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Золото");
ДопСведение =ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Платина");
Этими строками Вы переменной ДопСведения просто изменяете значение. В конце ее значение Платина, а другие строки не имеют значения.
4. Функция ПолучитьДопСведения(Знач МассивОбъектов, Знач МассивДопСведений)
возвращает таблицу Объект | ДопСведение, т.е. просто доп. сведения объектов без их значений
5. ТаблицаДопСвойств.НайтиСтроки(НоваяСтруктура);
возвращает массив строк таблицы значений, соответствующих условиям поиска.
таким образом МассивЗначения[0].Значение - вообще непонятно что.
6. Вероятно стоит поискать более квалифицированного исполнителя для этой задачи.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск