Вход | Регистрация

  1  2   

Вот два куска аналогичного по фукционалу кода. Чей лучший?

Вот два куска аналогичного по фукционалу кода. Чей лучший?
Я
   bizon2008
 
19.10.16 - 08:15
Пару товарищам было выдано - задание было простое, внешняя печатная форма к доку реализация товаров и услуг. Максимально упрощенная.
Просьба дать оценку. Причем, как мне кажется первый пытался списывать у второго.

Код 1.
Функция Печать() Экспорт
    
    ТабДокумент = ПечатьДокумента();
    
    Возврат ТабДокумент;
КонецФункции




Функция ПечатьДокумента() экспорт
// запрос на Заголовок    

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
    Запрос.Текст =
    "выбрать
    |    РеализацияТоваровУслуг.Номер,
    |    РеализацияТоваровУслуг.Дата,
    |    РеализацияТоваровУслуг.Контрагент как Покупатель,
    |   РеализацияТоваровУслуг.Организация,
    |    РеализацияТоваровУслуг.Организация как Поставщик
    |из
    |    Документ.РеализацияТоваровУслуг как РеализацияТоваровУслуг
    |где
    |    РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент";

    Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();    
    
    
// запрос на товары


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

    ТабДокумент = Новый ТабличныйДокумент;

    Макет = ПолучитьМакет("РасходнаяНакладная");
    
    //шапка накладной

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

    //покупатель

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

    ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
    ТабДокумент.Вывести(ОбластьМакета);
    
    // товары

     ОбластьМакета = Макет.ПолучитьОбласть("Строка");
     КоличествоСтрокТовары = ЗапросТовары.Количество();
     ИтогоМест = 0;
     ИтогоКоличество = 0;
     Для НомерСтрокиВыборки = 0 По КоличествоСтрокТовары-1 Цикл
        ВыборкаСтрок =  ЗапросТовары[НомерСтрокиВыборки];
        ИтогоМест = ИтогоМест + ВыборкаСтрок.Мест;
        ИтогоКоличество = ИтогоКоличество + ВыборкаСтрок.Количество;
        ОбластьМакета.Параметры.Заполнить(ВыборкаСтрок);
        ОбластьМакета.Параметры.НомерСтроки = НомерСтрокиВыборки + 1;
             Если  Окр(ВыборкаСтрок.Мест,0,0) <> ВыборкаСтрок.Мест тогда 
                  ОбластьМакета.Параметры.Примечание = "Ящик неполный";
                  
            КонецЕсли;
     ТабДокумент.Вывести(ОбластьМакета);        
     КонецЦикла;        
            
    // итоги        

     ОбластьМакета = Макет.ПолучитьОбласть("Итоги");
     ОбластьМакета.Параметры.ИтогоМест = ИтогоМест;
     ОбластьМакета.Параметры.ИтогоКоличество = ИтогоКоличество;
     ТабДокумент.Вывести(ОбластьМакета);

    
    
    
    
    Возврат ТабДокумент;
 КонецФункции    

Код 2.

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

    Запрос.УстановитьПараметр("Док", СсылкаНаОбъект);
    ДанныеТовара = Запрос.Выполнить().Выгрузить();
    
    Возврат ДанныеТовара
КонецФункции    

// Внешняя функция печати

// Параметры
//  ИмяМакета  – Строка – имя формы печати

//
// Возвращаемое значение:

//   Булево   –Печать прошла успешно - Истина, иначе - Ложь
//

Функция Печать() Экспорт
    ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("Макет");
    ОбластьЗаголовок   = Макет.ПолучитьОбласть("Заголовок");
    Док = СсылкаНаОбъект.ПолучитьОбъект();
    НомерДок  = Док.Номер; 
    ДатаДок = Формат(Док.Дата,"ДЛФ=DD");
    ОбластьЗаголовок.Параметры.ЗаголовокПредставление = "Расходная накладная № " + НомерДок + " от " + ДатаДок; 
    ОбластьЗаголовок.Параметры.Контрагент = Док.Контрагент.НаименованиеПолное;
    ТабДок.Вывести(ОбластьЗаголовок);
    
    ОбластьЗаголовокТаблицы   = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
    ТабДок.Вывести(ОбластьЗаголовокТаблицы);
    ДанныеНоменклатуры = ПолучитьТовары();
    нс = 1;
    Для Каждого СтрТовар Из ДанныеНоменклатуры Цикл
            ОбластьСтрока   = Макет.ПолучитьОбласть("Строка");
            ОбластьСтрока.Параметры.Заполнить(СтрТовар); 
            ОбластьСтрока.Параметры.нс = нс;
            Если  Окр(СтрТовар.Мест,0,0) <> СтрТовар.Мест тогда 
                ОбластьСтрока.Параметры.Примечание = "Ящик неполный"
            КонецЕсли;
            ТабДок.Вывести(ОбластьСтрока);
            нс = нс + 1;
    КонецЦикла;    
    
    ОбластьИтого   = Макет.ПолучитьОбласть("Итого");
    ОбластьИтого.Параметры.ИтогоМест = ДанныеНоменклатуры.Итог("Мест") ;
    ОбластьИтого.Параметры.ИтогоКолво  = ДанныеНоменклатуры.Итог("Количество") ;
    ТабДок.Вывести(ОбластьИтого);


            
    Возврат ТабДок

КонецФункции// Печать()



Спасибо.
 
 
   bizon2008
 
1 - 19.10.16 - 08:15
От же криво вставилось.
   rifat
 
2 - 19.10.16 - 08:17
Зачем это все?
   bizon2008
 
3 - 19.10.16 - 08:24
(2) Я не силен. Но мне надо дать оценку соискателям.
   SadrArt
 
4 - 19.10.16 - 08:32
Имхо первый код более читабелен. И он "стандартный"
   4St
 
5 - 19.10.16 - 08:33
Запрос по товарам  некорректный и неоптимальный в обоих вариантах.

В коде варианта 2 присутствуют неявные запросы при заполнении шапки (Док.Контрагент.НаименованиеПолное), описание функции в комментариях не соответствует действительности (возвращает ТабличныйДокумент, а не Булево). Но код при этом чуть лучше структурирован, чем в портянке из 1. В варианте 1
непонятно, зачем нужна функция Печать() без параметров (рекомендуется к прочтению подход YAGNI).
   АНДР
 
6 - 19.10.16 - 08:33
Первый.

Во втором
// Параметры

//  ИмяМакета  – Строка – имя формы печати

//

// Возвращаемое значение:

//   Булево   –Печать прошла успешно - Истина, иначе - Ложь

//

Функция Печать() Экспорт




    Док = СсылкаНаОбъект.ПолучитьОбъект();
    НомерДок  = Док.Номер; 
    ДатаДок = Формат(Док.Дата,"ДЛФ=DD");
   igorP
 
7 - 19.10.16 - 08:34
Первый вариант получше, т.к. второй получает параметры шапки через точку от Документа - лишнии запросы к бд. Но данный тест не показателен.
   bizon2008
 
8 - 19.10.16 - 08:39
(5) Запрос по товарам  некорректный и неоптимальный в обоих вариантах.

Можете более подробно расписать? Спасибо.

В коде варианта 2 присутствуют неявные запросы при заполнении шапки (Док.Контрагент.НаименованиеПолное)

Это уже не допустимо так писать в восьмой версии?
   Остап Сулейманович
 
9 - 19.10.16 - 08:40
(3) "Я не силен. Но мне надо дать оценку соискателям."
Я немножко в осадке. Бывший зема : где гарантия, что оценка будет хоть что-то отражать?
   zva
 
10 - 19.10.16 - 08:41
(3) Не силен в чем?
Первый получает данные шапки одним запросом и работает с результатом выборки, второй каждый раз обращается Док.Номер, Док.Контрагент.НаименованиеПолное и т.д. - кто лучше очевидно. Далее работая с ТЧ оба зачем-то выгружают результат запроса в ТЗ вместо того, чтоб работать с выборкой запроса.
Комментарии к функции у второго тоже доставляют:
// Возвращаемое значение:

//   Булево   –Печать прошла успешно - Истина, иначе - Ложь
а в самой функции:
Возврат ТабДок
 
 Рекламное место пустует
   bizon2008
 
11 - 19.10.16 - 08:41
(4) А где критерии стандартности можно посмотреть, заинтересовало.
   bizon2008
 
12 - 19.10.16 - 08:42
(9) Поэтому я у вас народ и спрашиваю. Вот лично мне код 2 понравился больше, а оно эвоно как, код 1 то лучше однако.
   igorP
 
13 - 19.10.16 - 08:45
Тест не показателен, первый мог содрать структуру печатной формы с типовой, немного переделав,второй написал сам, хоть и чуть хуже
   bizon2008
 
14 - 19.10.16 - 08:46
(10) второй каждый раз обращается Док.Номер, Док.Контрагент.НаименованиеПолное

Интересно, но там типа выше получен объект. А получается при Док.Номер, Док.Контрагент.НаименованиеПолное это отдельные запросы которые 1с сама генерирует однако? Думал ПолучитьОбъект сразу все притаскивает.
   Остап Сулейманович
 
15 - 19.10.16 - 08:47
(12) Код 1 более привычен. Получается из-под конструктора печати, затем допиливается, если нужно, напильником.
По большому счету код 2 ничем не хуже. Замечание по поводу "Док.Контрагент.НаименованиеПолное" в данном случае необоснованно. Если бы нужно было получать несколько полей элемента справочника - тогда все так. Поскольку поле одно - количество обращений к базе будет одно. Хоть запросом, хоть через точку.
   bizon2008
 
16 - 19.10.16 - 08:48
(13) Коли Вам не в тягость, может у Вас есть более показательный тест? Заранее благодарен.
   IlyaSR
 
17 - 19.10.16 - 08:49
У второго больше косяков, например
каждый раз зачем-то получает ОбластьСтрока   = Макет.ПолучитьОбласть("Строка");
также зачем-то получает объект Док = СсылкаНаОбъект.ПолучитьОбъект();


Теперь осталось первому дать написанное вторым и наоборот, чтобы нашли и объяснили ошибки, вот тут сразу станет все понятно с пониманием написания кода
   АНДР
 
18 - 19.10.16 - 08:50
(8) Писать допустимо, но не оптимально. А вот получать объект - явно лишнее.

P.S. И комментарии не соответствующие коду - совсем не хорошо.
   Dotoshin
 
19 - 19.10.16 - 08:50
(8) + В первом варианте, вместо обхода результатов запроса зачем-то используется цикл со счетчиком, кроме этого зачем-то два раза выбирается Организация, это было логично, если бы использовался метод - Заполнить для области табличного документа.
Во втором варианте тоже вместо обхода результата выборки она зачем-то выгружается  в ТЗ.
Ну остальное уже в других постах описали...
   igorP
 
20 - 19.10.16 - 08:51
(15) В данном случае вообще неоптимально получать объект, т.к. изменять его не планируем. Нужно было запросом получить нужные поля для шапки
   HawkEye
 
21 - 19.10.16 - 08:51
(0) бери обоих на испытательный срок... без вводных такие тесты - не показательны...
   Dotoshin
 
22 - 19.10.16 - 08:53
(8) >>Это уже не допустимо так писать в восьмой версии?
Так писать не оптимально, такая форма записи порождает запрос к БД. Если у вас будет реализована групповая печать этих документов, то такой код будет совсем "не айс".
   Лефмихалыч
 
23 - 19.10.16 - 08:53
первый лучше - косвенных запросов нет и запросами получается то и только то, что необходимо.

ПолучитьОбъект() читает и табличные части тоже, то есть данные по товарам читаются два раза. Да и обращение через точку - это плюс запрос.

Которого из них брать, по этому коду не скажешь. Вообще по коду такое решение нельзя принимать. Кто умнее, того и бери.
   FIXXXL
 
24 - 19.10.16 - 08:55
(14) Док.Контрагент.НаименованиеПолное получает неявно по ссылке весь объект Контрагент, от которого в Док только ссылка
   ks_83
 
25 - 19.10.16 - 09:01
Оба г., потому что писать отчеты надо на СКД. И объясните мне что там делает левое соединение справочника ЕдиницыИзмерения с табличной частью?
   АНДР
 
26 - 19.10.16 - 09:03
(25) Похоже оба соискателя решили топикстартера проверить на "левое соединение". ;)
   igorP
 
27 - 19.10.16 - 09:03
(16)Тестовое мини-задание.



Есть справочники:

- Номенклатура

- Склады (содержит реквизит ТипРозничныхЦен(СправочникСсылка.ТипыЦенНосенклатуры))

- ТипыЦенНоменклатуры

 

Регистр Сведений: ЦеныНоменклатуры (Периодический, подчинен регистратору)

- Измерения:   Номенклатура, ТипЦен

- Ресурс: Цена

 

Регистр накопления: ТоварыНаСкладах(Остатки)

- Измерения: Склад, Номенклатура

- Ресурс: Количество

 

Задача: Написать запрос(отчет), который бы показывал остатки и цены номенклатуры в разрезе складов и номенклатуры. Так же необходимо, чтобы в этом отчете выводились нулевые остатки и цены.
   АНДР
 
28 - 19.10.16 - 09:03
(26) + Об этом в (8) написано.
   bizon2008
 
29 - 19.10.16 - 09:05
(21) Они оба на испытательном, который подходит к концу. Аборигены в 1С как в апельсинах. Я так типа вообще гуру однако. Вот такой вариант придумал. Первый чисто на програ претендует, второй очень неплохой сисадмино, прог он так побочно. Если берем первого на прога, то второй в админы перейдет. Но первый УПП не знает, второй более - менее шарит.
   aleks_default
 
30 - 19.10.16 - 09:07
(29)У вас весь отдел уволить надо
   bizon2008
 
31 - 19.10.16 - 09:08
(25) Это не отчет, это внешняя печатная форма. Там СКД вроде не работает.
Узнают сколько бутылок в ящике, это коэффициент в единицах измерения.
   bizon2008
 
32 - 19.10.16 - 09:09
(30) А нет отдела. ИТ инфраструктура в зачаточном состоянии, как-то работает и ладно.
   FIXXXL
 
33 - 19.10.16 - 09:10
(31) левое то соединение нафига? из Справочник.ЕдиницыИзмерения как ЕдиницыИзмерения никаких данных не используется

они похоже скопипастили запрос откуда-то
 
 
   aleks_default
 
34 - 19.10.16 - 09:11
РеализацияТоваровУслугТовары.Ссылка.Ссылка
РеализацияТоваровУслугТовары.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка
   Dotoshin
 
35 - 19.10.16 - 09:11
(31) ЛВЗ?
   bizon2008
 
36 - 19.10.16 - 09:14
(27) Чето просто как-то, СКД один запрос. Вы если не против я попробу, а потом Вас позову глянуть чего это я сварганил.

Такая интересная тема получилась. Спасибо всем. Большое такое.
   scanduta
 
37 - 19.10.16 - 09:14
(0) Сравнивать код в печатной форме, да вам заняться больше нечем
   PLUT
 
38 - 19.10.16 - 09:15
(31) чой-то? СКД везде работает, даже с внешними источникам данных и с вызовом экспортных функций
   bizon2008
 
39 - 19.10.16 - 09:15
(35)Нет, типовая УПП. Причем нафуя ее брали, им БП с головой. Работает с десяток бухов. Смотрят только проводки, где не сходится тупо операциями колбасят, и потом классика программа плохая.
   bizon2008
 
40 - 19.10.16 - 09:16
(37) Ну первое что в голову пришло. Можете предложить что-то лучше?
   Дарлок
 
41 - 19.10.16 - 09:17
(0)
это писал один и тот же человек
   FIXXXL
 
42 - 19.10.16 - 09:18
(41) или сдернуто с одного места и переделано, как курсовик с инета :)
   Дарлок
 
43 - 19.10.16 - 09:18
+(41) либо второй писал видя первый код
   Дарлок
 
44 - 19.10.16 - 09:19
(42) ;)) бинго
   bizon2008
 
45 - 19.10.16 - 09:21
(33) Коэффициент получить.
Вот тута.   РеализацияТоваровУслугТовары.Количество/ЕдиницыИзмерения.Коэффициент как Мест,
   bizon2008
 
46 - 19.10.16 - 09:21
(43) Второй написан раньше.
   bizon2008
 
47 - 19.10.16 - 09:23
(38) Это как 1С далеко ушла та. Я в типовых такое не видел. На СКД печатаные формы доков еще не попадались. Надо будем в новых поискать однако.
   Дарлок
 
48 - 19.10.16 - 09:24
(46) не существенно. в обоих вариантах одни и те же генетические ошибки. А если по мелочам, то в втором варианте, тоже свои плюсы есть
   ks_83
 
49 - 19.10.16 - 09:24
(31) Во-первых слева должна быть табличная часть, а во вторых соединение вообще там не нужно, ибо коэффициент и так уже есть в ЕдиницаИзмеренияМест.
 
 Рекламное место пустует
   Dotoshin
 
50 - 19.10.16 - 09:30
(47) Лучше в интернете поищи, вот например: https://helpf.pro/faq/view/1400.html
   bizon2008
 
51 - 19.10.16 - 09:31
(48)Вы же дружно зафукали второй.
   laeg
 
52 - 19.10.16 - 09:35
(0) Оба варианта криво написаны. Дать еще одно контрольное задание.
   FIXXXL
 
53 - 19.10.16 - 09:35
(49) +1
   igorP
 
54 - 19.10.16 - 09:39
(36) Тест простой, но в запросе будет видна работа с виртуальными таблицами, правильностью соединений, конструкция ЕстьNull и т.д.
   bizon2008
 
55 - 19.10.16 - 09:39
(49)Так?
ВЫБРАТЬ
    Товары.Номенклатура.Артикул КАК Артикул,
    Товары.Номенклатура.НаименованиеПолное КАК Товар,
    Товары.Номенклатура.ЕдиницаИзмеренияМест КАК ЕдиницаИзмеренияМест,
    Товары.Количество КАК Количество,
    Товары.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    Товары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент КАК Коэффициент,
    Товары.Количество / Товары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент КАК Мест 
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК Товары
ГДЕ
    Товары.Ссылка.Ссылка = &Док
   bizon2008
 
56 - 19.10.16 - 09:40
(54) Отлично. Спасибо.
   FIXXXL
 
57 - 19.10.16 - 09:41
(55) типа того
НО на больших объемах выборки, по феншую, надо все-таки левое соединение, план запроса оптимальнее получится
   mkalimulin
 
58 - 19.10.16 - 09:41
(0) Второй лучше.
   bizon2008
 
59 - 19.10.16 - 09:43
(57) Дык сказали хрено оно тама.
   Dotoshin
 
60 - 19.10.16 - 09:45
(40) Устрой им экзамен. Скачай билеты по 1с, выбери из них вопросы в которых сам шаришь и протестируй своих подопечных.
   igorP
 
61 - 19.10.16 - 09:46
(56) Для усложнения, можно попросить добавить отбор по номенклатуре и склада.
   mkalimulin
 
62 - 19.10.16 - 10:17
Не надо ничего усложнять. Из приведенного в (0) ясно, что второй код писал более опытный человек.
   Dmitrii
 
63 - 19.10.16 - 10:22
(0) Оба фигню написали, так как не соответсвует требованиям продсистемы Печать БСП:
http://its.1c.ru/db/bspdoc#content:446:1:issogl2_разработка_процедуры_печать
Для того, чтобы их поделку можно было использовать, как внешнюю печатную форму, эти требования должны выполняться.

Если выбирать из двух вариантов, то первый лучше.
Но оба почему-то делают отдельные запросы к шапке и к табличной части.
То есть групповая печать ими не рассматривается вообще? При печати сотни накладных будет выполнено 200 запросов.
За запросы в цикле вроде как бы расстрел без права переписки полагается.
Второй еще и объект тянет из базы зачем-то.

Если выбирать не из чего, то оставлять первого. Ибо второй вообще не понимает что делает.

(11) >> А где критерии стандартности можно посмотреть, заинтересовало.
http://its.1c.ru/db/bspdoc#content:427:1:issogl3_пример_внешняя_печатная_форма
http://its.1c.ru/db/bspdoc#content:446:1:issogl2_разработка_процедуры_печать
   Мойдодыр
 
64 - 19.10.16 - 10:26
по 3 балла из 5 каждому
   Timon1405
 
65 - 19.10.16 - 10:26
(0) задача делается очень быстро с помощью v8: Конструктор внешних печатных форм NEW (обычные и управляемые приложения)
считаю, что задача программиста в том числе уметь найти оптимальное решение по-максимуму используя имеющиеся в т.ч. чужие наработки.
решение в данном случае - погуглить, подумать, сделать
   Dmitrii
 
66 - 19.10.16 - 10:28
+ к (63) Ссылки почему-то криво вставились. Хвосты определились просто как кусок текста.
   Dmitrii
 
67 - 19.10.16 - 10:30
(27) >> чтобы в этом отчете выводились нулевые остатки и цены

Ну с нулевыми ценами понятно.
А что такое нулевые остатки? То есть предполагается, что вся номенклатура как она там есть в справочнике может присутствовать на каждом из складов? Какой в этом сокральный смысл? В 90% случаев набор номенклатуры обритающейся на каждом из складов довольно разный.

В любом случае ничего особо сложного в этом отчете нет.
Если группировку по номенклатуре сделать в строках, а по складам - в колонках, то даже симпатичненько может получиться (если только складов не слишком много).
   Господин ПЖ
 
68 - 19.10.16 - 10:30
> что задача программиста в том числе уметь найти оптимальное решение по-максимуму используя имеющиеся в т.ч. чужие наработки.

чужие проверять надо сверху донизу. на это тоже время надо. иногда сопоставимое с собственной писаниной
   bizon2008
 
69 - 19.10.16 - 10:39
(63) Но оба почему-то делают отдельные запросы к шапке и к табличной части.

А как один засунуть? Сходу что не соображу.

Да вообще запрос в шапке возвращает одну строку. Ее так и гонять как выборку что ли?
   Dmitrii
 
70 - 19.10.16 - 10:39
(65) В топку такой конструктор. Ибо результат его работы не вписывается в актуальные версии БСП. А раз так, то чем он лучше встроенного в конфигуратор конструктора? Только наличием шаблона?
   bizon2008
 
71 - 19.10.16 - 10:39
(69) Мне вот это сосем не нравится.
Шапка = Запрос.Выполнить().Выбрать();
ДанныеШапки = Шапка.Следующий();
   Timon1405
 
72 - 19.10.16 - 10:41
(70) так-то у ТС УПП, так что шаблоны БСП для них неактуальны
   Господин ПЖ
 
73 - 19.10.16 - 10:43
>у ТС УПП

тогда накуа вообще вся эта затея с "конструкторами"

для обычных форм требований всего два - реквизит и экспортная функция. шаблон с авторегистрацией - добавить по вкусу
   ks_83
 
74 - 19.10.16 - 10:44
Может ТС нас разводит? Ему дали тестовое задание, а мы теперь ему решения предлагаем.
   Мойдодыр
 
75 - 19.10.16 - 10:47
(71) ты что, это же стандарт от 1с во всех типовых
   bizon2008
 
76 - 19.10.16 - 10:48
(74) Нет. Слово офицера. Я блин в коли веки, тут выполз в Интернете посидеть, да вот озадачили. Но я столько нового узнал. Спасибо.
Могу подписку притащить.
   Vladal
 
77 - 19.10.16 - 10:48
(10) Хм.. посмотрите в типовой отчет по отпускам или печать ведомости отпусков...  Цикли Если Истина ... ... прерва иначе выборка = запрос.выполнить; КонецЦикла
   bizon2008
 
78 - 19.10.16 - 10:50
(75) Нихрена себе а в не 1С за это рукам бьют.
Линейкой.
Я вот наваял.
Функция ПолучитьШапку()
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    РеализацияТоваровУслуг.Номер КАК Номер,
    |    РеализацияТоваровУслуг.Дата КАК Дата,
    |    РеализацияТоваровУслуг.Контрагент.НаименованиеПолное КАК Контрагент
    |ИЗ
    |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |ГДЕ
    |    РеализацияТоваровУслуг.Ссылка = &Док";
    
    Запрос.УстановитьПараметр("Док", СсылкаНаОбъект);
    Шапка = Запрос.Выполнить().Выбрать();
    ДанныеШапки = Шапка.Следующий();
    
    Возврат ДанныеШапки

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

Потом к ней пытаюсь обратится.
ДанныеШапки = ПолучитьШапку();
    НомерДок  = ДанныеШапки.Номер; 
    ДатаДок = Формат(ДанныеШапки.Дата,"ДЛФ=DD");
    ОбластьЗаголовок.Параметры.ЗаголовокПредставление = "Расходная накладная № " + НомерДок + " от " + ДатаДок; 
    ОбластьЗаголовок.Параметры.Контрагент = ДанныеШапки.Контрагент;
    ТабДок.Вывести(ОбластьЗаголовок);

И получаю облом.
Значение не является значением объектного типа (Номер)
НомерДок  = ДанныеШапки.Номер;
   spock
 
79 - 19.10.16 - 10:52
Обоих не брать :)
   bizon2008
 
80 - 19.10.16 - 10:53
(79) Дык больше вариантов нету.
   spock
 
81 - 19.10.16 - 10:56
+79 чисто с практической стороны, ведь может быть такое, что в табличной части документа не будет указана ед.изм. в какой-нибудь строке. Тогда оба эти примера выведут на печать макеты без этих строк, т.к. левое соединение не сработает.
   spock
 
82 - 19.10.16 - 10:56
+81 а претенденты, явно видно, не умеет писать запросы без конструктора.
   Мойдодыр
 
83 - 19.10.16 - 10:57
(82) Умение писать без конструктора - это уже почти сеньор
   spock
 
84 - 19.10.16 - 10:58
+82 в обоих случаях "РеализацияТоваровУслугТовары.Ссылка.Ссылка" - wtf.

Выгнать обоих на склад кладовщиками работать :)
   ptiz
 
85 - 19.10.16 - 10:58
(78) ДанныеШапки = Шапка.Следующий();
возвращает булево вообще-то :)
   Мойдодыр
 
86 - 19.10.16 - 10:58
(78) Ты левй код написал. Следующий() возвращает булево
   bizon2008
 
87 - 19.10.16 - 10:58
(82) Второй умеет, но ленится. Да и простой запрос быстрей мышкой наклацать.
   Мойдодыр
 
88 - 19.10.16 - 10:59
(87) не умеет, по тексту запроса это выидно
   bizon2008
 
89 - 19.10.16 - 11:00
(85) (86) Я догадаться. Вопрос как оно тама должно быть. В таблицу значений вы сами запретили выгружать однако.
   Dotoshin
 
90 - 19.10.16 - 11:00
(78) Вместо Возврат ДанныеШапки
напиши Возврат Шапка
   bizon2008
 
91 - 19.10.16 - 11:02
(90) Дык это выборка будет. Потом опять. Шапка.Следующий(), но уже в основном коде.
   spock
 
92 - 19.10.16 - 11:02
(87) оба наклацали - ошибки детские.
   bizon2008
 
93 - 19.10.16 - 11:03
Вы мне народ попроще, я полгода по другой специализации работал, плюс побили немного. Так что где-то туго на поворотах соображаю. Спасибо.
   bizon2008
 
94 - 19.10.16 - 11:04
(92) Второй наклацал  - первый списал.
   Dotoshin
 
95 - 19.10.16 - 11:04
Интересно, те товарищи, которым было дадено задание наиписать ВПФ, мисту читают?
Вот будет прикольно если в эту ветку зайдут :)
   singlych
 
96 - 19.10.16 - 11:04
Очевидно, что первый скопипастил код второго, но исправил некоторые косяки, типа сделал запрос к шапке вместо ПолучитьОбъект, вынес получение области макета за цикл. Даже, возможно, пытался сделать что-то (безуспешно, правда) с ужасным запросом к табличной части, судя по тому, что "выбрать" и "Левое соединение" маленькими буквами. Так что я за первого.
   Dmitrii
 
97 - 19.10.16 - 11:04
(69) Например, так:

 ВЫБРАТЬ
  РеализацияТоваровУслугТовары.Ссылка КАК Накладная,
  РеализацияТоваровУслугТовары.Ссылка.Номер КАК Номер,
  РеализацияТоваровУслугТовары.Ссылка.Дата КАК Дата,
  РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент,
  РеализацияТоваровУслугТовары.Ссылка.Организация КАК Организация,
  РеализацияТоваровУслугТовары.НомерСтроки,
  РеализацияТоваровУслугТовары.Номенклатура,
  РеализацияТоваровУслугТовары.Количество,
  РеализацияТоваровУслугТовары.Цена,
  РеализацияТоваровУслугТовары.Сумма
 ИЗ
  Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
 ИТОГИ
  МАКСИМУМ(Номер),
  МАКСИМУМ(Дата),
  МАКСИМУМ(Контрагент),
  МАКСИМУМ(Организация)
 ПО 
  Накладная

Потом делаем иерархическую выборку 

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

    //Потом строки

    ОбходПоСтрокам = Шапка.Выбрать();
    Пока ОбходПоСтрокам.Следующий() Цикл
      //Выводим строки;

    КонецЦикла;
    //Выводим подвал;

  КонецЦикла;
   bizon2008
 
98 - 19.10.16 - 11:05
(95) Второй точно, это мой племяшь. Под мной иногда вопросы задает.
   Курцвейл
 
99 - 19.10.16 - 11:05
(81) За такие запросы надо обеих по рукам линейкой
   4St
 
100 - 19.10.16 - 11:05
(8) я смотрю, тут уже ответили ))
Лично я бы оставил второго за то, что он получение таблицы товаров вынес отдельной функцией. И долго учил, учил, учил.
  1  2   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует