Имя: Пароль:
1C
1С v8
Конструктор Запросов или Язык Запросов Печатная ф документа списание с выводом цены из РС
0 Дина88
 
24.09.19
07:41
Печатная форма документа списание с выводом таблицы с колонками номенклатура, количество, вид цены из самого списания и колонкой цены из Регистра Сведений(как вытащить Цену из Регистра Сведений Цены Номенклатуры на дату документа Списание недостач)?
Вот так было:
&НаСервере
Функция СформироватьТекущиеЦеныСервер(СсылкаНаДокумент)
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    ТекОбработка = РеквизитФормыВЗначение("Объект");
    Макет = ТекОбработка.ПолучитьМакет("МакетЦен");
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
        |    ЦеныНоменклатуры.Характеристика КАК Характеристика,
        |    ЦеныНоменклатуры.ВидЦены КАК ВидЦены,
        |    ЦеныНоменклатуры.Цена КАК Цена
        |ИЗ
        |    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        |ГДЕ
        |    ЦеныНоменклатуры.ВидЦены = &ВидЦены
        |    И ЦеныНоменклатуры.Период = &Период
        |
        |СГРУППИРОВАТЬ ПО
        |    ЦеныНоменклатуры.Номенклатура,
        |    ЦеныНоменклатуры.Характеристика,
        |    ЦеныНоменклатуры.ВидЦены,
        |    ЦеныНоменклатуры.Цена
        |
        |УПОРЯДОЧИТЬ ПО
        |    Номенклатура,
        |    Характеристика";
Запрос.УстановитьПараметр("ВидЦены", Объект.ВидЦены);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
            
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
    
    Для Каждого ТекущаяСтрока Из СсылкаНаДокумент.Товары Цикл
    ЗаполнитьЗначенияСвойств(ОбластьДетальныхЗаписей.Параметры, ТекущаяСтрока);
        ТабДок.Вывести(ОбластьДетальныхЗаписей);
    КонецЦикла;

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
        ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
    КонецЦикла;
    
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    ТабДок.Вывести(ОбластьПодвал);
    Возврат ТабДок;
КонецФункции
    
&НаСервере
Функция СформироватьНаСервере(СсылкаНаДокумент)

&НаКлиенте
Процедура Сформировать(Команда)
    СформироватьНаСервере(Объект.ПоДокументу).Показать();
КонецПроцедуры

&НаКлиенте
Процедура СформироватьТекущиеЦены(Команда)
    СформироватьТекущиеЦеныСервер(Объект.ПоДокументу).Показать();
КонецПроцедуры
1 Дина88
 
24.09.19
07:42
Добрый день. Помогите, пожалуйста!
2 vicof
 
24.09.19
07:45
почитай про СрезПоследних
3 shuhard
 
24.09.19
08:04
(2) +1 [на дату документа] =  любимая всеми статья срез на произвольную дату
4 ДенисЧ
 
24.09.19
09:01
(3) Зачем? У него одна дата - дата собственно печатаемого документа...
5 Дина88
 
24.09.19
09:25
|ВЫБРАТЬ Номенклатура, Цена
      |ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ВыбДата, ВидЦены=&ВыбВидЦены);
6 Дина88
 
24.09.19
09:26
"ВЫБРАТЬ
//|    ДокументЦеныНоменклатурыПериод.Документ,
//|    ДокументЦеныНоменклатурыПериод.Документ.Дата КАК Дата,
//|    ДокументЦеныНоменклатурыПериод.Документ.ВидЦены КАК ВидЦены,
//|    ДокументЦеныНоменклатурыПериод.Номенклатура,
//|    ЦеныНоменклатуры.Цена
//|ИЗ
//|    (ВЫБРАТЬ
//|        СписаниеНедостачТоваровТовары.Ссылка КАК Документ,
//|        СписаниеНедостачТоваровТовары.Номенклатура КАК Номенклатура,
//|        МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период
//|    ИЗ
//|        Документ.СписаниеНедостачТоваров.Товары КАК СписаниеНедостачТоваровТовары
//|            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
//|            ПО СписаниеНедостачТоваровТовары.Номенклатура = ЦеныНоменклатуры.Номенклатура
//|                И СписаниеНедостачТоваровТовары.Ссылка.Дата >= ЦеныНоменклатуры.Период
//|                И СписаниеНедостачТоваровТовары.Ссылка.ВидЦены = ЦеныНоменклатуры.ВидЦены
//|    
//|    СГРУППИРОВАТЬ ПО
//|        СписаниеНедостачТоваровТовары.Ссылка,
//|        СписаниеНедостачТоваровТовары.Номенклатура) КАК ДокументНоменклатураПериод
//|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
//|        ПО ДокументНоменклатураПериод.Номенклатура = ЦеныНоменклатуры.Номенклатура
//|            И ДокументНоменклатураПериод.Документ.ВидЦены = ЦеныНоменклатуры.ВидЦены
//|            И ДокументНоменклатураПериод.Период = ЦеныНоменклатуры.Период";
7 Дина88
 
24.09.19
09:27
Что не так?
8 vicof
 
24.09.19
10:22
Все не так. Для начала четко сформулируй задачу.
9 Дина88
 
25.09.19
06:14
&НаСервере
Функция СформироватьТекущиеЦеныСервер(СсылкаНаДокумент)
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    ТекОбработка = РеквизитФормыВЗначение("Объект");
    Макет = ТекОбработка.ПолучитьМакет("МакетЦен");
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
        |    ЦеныНоменклатуры.Характеристика КАК Характеристика,
        |    ЦеныНоменклатуры.ВидЦены КАК ВидЦены,
        |    ЦеныНоменклатуры.Цена КАК Цена
        |ИЗ
        |    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        |ГДЕ
        |    ЦеныНоменклатуры.ВидЦены = &ВидЦены
        |    И ЦеныНоменклатуры.Период = &Период
        |   И ЦеныНоменклатуры.Номенклатура = &Номенклатура
        |СГРУППИРОВАТЬ ПО
        |    ЦеныНоменклатуры.Номенклатура,
        |    ЦеныНоменклатуры.Характеристика,
        |    ЦеныНоменклатуры.ВидЦены,
        |    ЦеныНоменклатуры.Цена
        |
        |УПОРЯДОЧИТЬ ПО
        |    Номенклатура,
        |    Характеристика";
    
     Запрос.УстановитьПараметр("ВидЦены", Объект.ВидЦены);
     Запрос.УстановитьПараметр("Период", СсылкаНаДокумент.Дата);    
     Запрос.УстановитьПараметр("Номенклатура", СсылкаНаДокумент.Номенклатура);
     РезультатЗапроса = Запрос.Выполнить();
    
     ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
     ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
     ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
     ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
            
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
    
    Для Каждого ТекущаяСтрока Из СсылкаНаДокумент.Товары Цикл
    ЗаполнитьЗначенияСвойств(ОбластьДетальныхЗаписей.Параметры, ТекущаяСтрока);
        ТабДок.Вывести(ОбластьДетальныхЗаписей);
    КонецЦикла;

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
        ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
    КонецЦикла;
    
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    //ТабДок.Вывести(ОбластьПодвал);
    Возврат ТабДок;
КонецФункции

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

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        НужнаяЦена = ВыборкаДетальныеЗаписи.Цена;
//        ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
//        ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
    КонецЦикла;
    
///    ТабДок.ЗакончитьАвтогруппировкуСтрок();
//    ТабДок.Вывести(ОбластьПодвалТаблицы);
//    ТабДок.Вывести(ОбластьПодвал);
//    Возврат ТабДок;
    Возврат НужнаяЦена;
КонецФункции

&НаСервере
Функция СформироватьНаСервере(СсылкаНаДокумент)
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТекОбработка = РеквизитФормыВЗначение("Объект");
////    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СписаниеНедостачТоваров";

    МакетОбработки = ТекОбработка.ПолучитьМакет("Макет");

    //заполняем шапку
    ОбластьШапка = МакетОбработки.ПолучитьОбласть("Шапка");
    ТабличныйДокумент.Вывести(ОбластьШапка);

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

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

    ТабличныйДокумент.АвтоМасштаб = Истина;
    Возврат ТабличныйДокумент;
    ТабличныйДокумент.Вывести(Макет);
    ТабличныйДокумент.Показать(Макет ПФ);

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

&НаКлиенте
Процедура Сформировать()
    СформироватьНаСервере(Объект.ПоДокументу).Показать();
КонецПроцедуры

&НаКлиенте
Процедура СформироватьТекущиеЦены(Команда)
    СформироватьТекущиеЦеныСервер(Объект.ПоДокументу).Показать();
КонецПроцедуры
10 Дина88
 
25.09.19
06:19
Здравствуйте. Пока закомментировала период в двух местах, так как без нее выходят все колонки, но цена произвольная :
//|    И ЦеныНоменклатуры.Период = &Период
//Запрос.УстановитьПараметр("Период", Объект.ПоДокументу.Дата);
  
Нужно найти ошибку, связанную с периодом. Период идет как одна из колонок в регистре сведений Цены Номенклатуры. Ее нужно соотнести с датой документа Списание недостач товаров. И тогда получится цена на опр период.
11 Мимохожий Однако
 
25.09.19
06:41
Замени таблицу РегистрСведений.ЦеныНоменклатуры на РегистрСведенийСрезПоследних.ЦеныНоменклатуры
Об этом уже дважды до меня подсказывали.
..
Есть такая обработка как консоль запросов с ней потренируйся.
...
Сформулируй заново, что ты хочешь.
12 catena
 
25.09.19
07:20
(10)Гугли "Срез последних на каждую дату"
13 Консультант Баранов
 
25.09.19
07:28
(10) > Ее нужно соотнести с датой документа Списание недостач товаров.

Сколько дат?

Одна дата документа или есть некий список дат?
14 Дина88
 
25.09.19
09:55
Мне нужно сделать внешнюю печатную форму документа Списание недостач товаров посредством внешней обработки. Дата документа Списание недостач товаров соответственно будет сравниваться с регистром сведений Цены номенклатуры.
15 Дина88
 
25.09.19
09:57
Срез последних на каждую дату смотрела, а подставить не могу
16 Ёпрст
 
25.09.19
10:06
(12) ей это не надо
17 Ёпрст
 
25.09.19
10:06
(15) он не нужен вам.
ваш ответ в (5) не понятно, на чем у вас затык с этим.
18 Дина88
 
25.09.19
11:25
ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатуры
//        |    И ЦеныНоменклатуры.Период = &Период
19 Дина88
 
25.09.19
11:30
Вот в таком виде сработало, а теперь как это распечатать? В Печатной форме документа Списание Недостач Товаров №8 в поле выбора документа Списание Недостач Товаров автоматически должен сидеть текущий документ №8, мне приходиться выбирать из списка всех списаний. В подобном документе есть похожий код, но он в моем документе не срабатывает, а в своем срабатывает:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Перем ОбъектыНазначения;
    
    Если Параметры.Свойство("ОбъектыНазначения", ОбъектыНазначения) Тогда
        Если ТипЗнч(ОбъектыНазначения) = Тип("Массив") Тогда
            Объект.СсылкаНаОбъект = ОбъектыНазначения[0].Ссылка;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
20 Дина88
 
26.09.19
03:19
И как вообще забивать название этой процедуры в поисковике, чтобы найти код?
21 Дина88
 
26.09.19
03:52
Пришлось поменять на предопределенный код и она сработала. Не надо
22 Chameleon1980
 
26.09.19
04:03
Тс вы зачем в код полезли?от безысходности, для себя?
23 Chameleon1980
 
26.09.19
04:04
Чтобы понять Дину88 думай, как Дина88
24 Дина88
 
26.09.19
06:20
Сменить сферу деятельности, я самостоятельно учусь по видео и книгам. 3 недели только. Каждый человек имеет право учиться)
25 ДенисЧ
 
26.09.19
07:21
Интересно, а как девочка 8 дней от роду могла 3 недели уже учиться? В пренатальном периоде мать читала вслух книжки?
26 Simod
 
26.09.19
07:36
(24) Дело не в том, что ты учишься, а в том, что абсолютно не умеешь выражать свои мысли. Тебя никто не понимает.
27 Дина88
 
26.09.19
09:51
Поле дня рождения автоматически заполнилось на момент регистрации, видимо. Буду стараться яснее изъясняться)
28 Fish
 
26.09.19
09:55
(27) Многие на этом форуме обладают телепатическим даром. Но для его активации требуется заполнить третье поле в личной карточке :)
29 Дина88
 
26.09.19
09:57
Не успела. Загружу обязательно.