Имя: Пароль:
1C
1С v8
СКД. Срез последних(но не совсем) для каждого поля в отдельности
0 Wefast
 
20.07.17
08:11
Есть отчет. Формируется на какой то месяц.
Показывает кол-во произведенного товара и сколько он стоит.

Я делю одно на другое и получаю себестоимость товара ед.

Но бывает так, что в этом месяце продукция не производилась, а производилась в любой другой месяц.

Мне нужно если за текущий месяц ничего не производилось, найти ближайший месяц в котором эта продукция выводилась и посчитать себестоимость.

Такое вообще возможно?

Да данные я получаю из регистра накопления, обороты.
1 mehfk
 
20.07.17
08:15
Возможно.
2 Wefast
 
20.07.17
08:26
(1) как?
3 catena
 
20.07.17
08:27
Отдельным запросом.
4 Wefast
 
20.07.17
08:40
Я правлю типовой отчет. Вот его вывод. В какой момент я могу отловить результат скд, перебрать его рассчитав значение поля где пусто и подсунуть компоновщику этот резульат?


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    ПриКомпоновкеРезультатаУНФ(КомпоновщикНастроек, СхемаКомпоновкиДанных, ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка);
    
КонецПроцедуры

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

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

    //Обозначим начало вывода
    ПроцессорВывода.НачатьВывод();
    ТаблицаЗафиксирована = Ложь;

    ДокументРезультат.ФиксацияСверху = 0;
    
    //Основной цикл вывода отчета
    ОбластиКУдалению = Новый Массив;
    
    Пока Истина Цикл
        //Получим следующий элемент результата компоновки
        ЭлементРезультата = ПроцессорКомпоновки.Следующий();

        Если ЭлементРезультата = Неопределено Тогда
            //Следующий элемент не получен - заканчиваем цикл вывода
            Прервать;
        Иначе
            // Зафиксируем шапку
            Если  Не ТаблицаЗафиксирована
                  И ЭлементРезультата.ЗначенияПараметров.Количество() > 0
                  И ТипЗнч(КомпоновщикНастроек.Настройки.Структура[0]) <> Тип("ДиаграммаКомпоновкиДанных") Тогда

                ТаблицаЗафиксирована = Истина;
                ДокументРезультат.ФиксацияСверху = ДокументРезультат.ВысотаТаблицы;

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

    ПроцессорВывода.ЗакончитьВывод();
    
    Если (ПараметрыОтчета.Свойство("ВыводитьЗаголовок") И ПараметрыОтчета.ВыводитьЗаголовок) Тогда
        ДокументРезультат.ФиксацияСверху = 0;
    КонецЕсли;
    
    Если (ДополнительныеСвойства.Свойство("ФиксироватьКолонки") И ДополнительныеСвойства.ФиксироватьКолонки) Тогда
        ДокументРезультат.ФиксацияСлева = ОтчетыУНФ.СтрокФиксироватьСлева(КомпоновщикНастроек);
    КонецЕсли;
    
    Для каждого Область Из ОбластиКУдалению Цикл
        ДокументРезультат.УдалитьОбласть(Область, ТипСмещенияТабличногоДокумента.ПоВертикали);
    КонецЦикла;
    
    ОтчетыУНФ.ВыполнитьОперацииПослеФормирования(ДокументРезультат, ПараметрыФормирования);
    
КонецПроцедуры
5 catena
 
20.07.17
08:46
(4)вариант исправить схему не рассматривается?
6 mehfk
 
20.07.17
08:47
(2) Написать запрос.
7 Wefast
 
20.07.17
09:01
(5) рассматировается. В любом случае встает вопрос как.
Прицепить еще один регистр но с другими параметрами периода я понимаю как. Но как сделать так, чтобы если в предыдущем месяце нет данных он брать из пред предущего и так далее не понимаю. А ведь для одной позиции это может быть в прошлом месяце, а для другой - в начале года
8 Wefast
 
20.07.17
09:01
(6) в каком месте и какой? Зачем ты это пишешь, если это не помогает?
9 mehfk
 
20.07.17
09:02
(8) Что тебе не помогает? Давая я за тебя напишу запрос.
10 catena
 
20.07.17
09:12
(7)Не надо период. Надо максимальную дату движения.
11 Wefast
 
20.07.17
09:25
(10) не понимаю. Ну не укажу я период - он возьмет все данные(или скорее подставит стандартный период что используется в СКД). Как для каждой строчки получить свое значение?
В ресурсах может написать что то вроде выбор когда поле есть null тогда выбор запрос.сумма из регистр(какие то параметры) Конец

Но вроде такое не работает. В любом случае как узнать последнее движение и взять обороты за месяц?

(9) какой запрос то? в скд то? ну у меня и вопрос конкретный. Как для каждого поля получить данные за разный период. И куда этот запрос который эти данные получает - вставить? Как новый набор, соединением\объединением, или в какое то условие.
Или после вывода какой то запрос делать, тогда где какой и что с ним потом делать.
12 Wefast
 
20.07.17
09:28
https://drive.google.com/file/d/0B_qmjl0rbxwceU1DaGt3M3MwX0k/view?usp=sharing
вот ссылка на отчет если вдруг что
13 mehfk
 
20.07.17
10:13
Пригласи программиста 1с.
14 Wefast
 
20.07.17
10:38
(13) я он и есть.
15 mehfk
 
20.07.17
11:03
Это ошибочное мнение.
16 catena
 
20.07.17
11:10
(12)Сколько платишь?
17 Wefast
 
20.07.17
11:34
(15) Если тебе нечего написать по делу, то я бы попросил показывать всем свое непомерное эго в другом месте. Спасибо.

(16) ни сколько конечно же. Если бы я хотел чтобы за меня сделали, я бы пошел на соответствующий сайт. Мне же нужна помощь, направление.

А советы вроде возьми и сделай. Или пригласи какого то специалиста в вакууме, будто специалист рождается со всеми знаниями мне не нужны.
18 catena
 
20.07.17
11:37
(17)Тебе дали направление - берешь максимальную дату движения и от нее пляшешь.
19 mehfk
 
20.07.17
11:42
(17) по делу в (13)
20 Wefast
 
20.07.17
12:01
(18) да, вроде то что нужно.

Сначала получаю последнюю запись.
Выбор
МАКСИМУМ(Рег.Период),
Рег.Номенклатура
ИЗ Регистр.МойРегистр как Рег
Сгруппировать по
Рег.Номенклатура

Потом соединяю с этим же регистром и делаю связь по периоду и номенклатуре. Тем самым я получаю значение ресурсов.

В итоге я получаю последние значения номенклатуры из регистра.

(19) см (14)