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


1С:Предприятие ::

Метки:

Кто сдавал на сертификацию ТиС: поясните задание 1

Я
   Таня
 
02.01.04 - 19:02
Расходная накладная:
списание товара делать по цене приобретения?
если списываю по цене продажи, то остается отрицательный остаток по ресурсу Стоимость.
тогда вопрос, где отражается цена продажи, если списание делать по цене приобретения?
 
  Рекламное место пустует
   skunk
 
1 - 03.01.04 - 00:45
Может лучше ты все задание целиком приведешь, а то что-то не понятно причем тут списание и цена продажи.
   Таня
 
2 - 03.01.04 - 01:52
Необходимо разработать конфигурацию, которая позволяет вести партионный учет товаров:

-    Справочник товаров с дополнительным периодическим реквизитом «ЦенаПродажи», значение которого может изменяться только документом «РасхНакл»;
-    Перечисление «Порядок» со значениями «FIFO», «LIFO», «вручную»;
-    Периодическую константу «ПорядокСписания» с типом данных – перечис-ление «Порядок»;
-    Документ «ПрихНакл», который служит для отражения в системе факта прихода товаров, введенных в табличной части, по ценам закупки;
-    Документ «РасхНакл», который списывает товары, введенные в табличной части, со склада;

Структура регистра остатков «ТоварыНаСкладе» должна обеспечивать ве-дение количественного и стоимостного учета товаров на складе в разрезе партий (поставок). Признаком партии является сам документ
«ПрихНакл», по которому пришел товар.

Многовалютный и многоскладской учет не ведется, НДС и другие виды на-логов в документах не указываются и не рассчитываются.

В табличной части накладных необходимо иметь возможность вводить цену и количество товара, сумма строки должна рассчитываться автоматически. В рас-ходной накладной при выборе товара в графу «цена» должно заноситься значение из реквизита «ЦенаПродажи» справочника на дату документа. Если  в накладной значение цены продажи изменяется, то новое значение должно быть записано в периодический реквизит «ЦенаПродажи».

При проведении документа «РасхНакл» необходимо обеспечить контроль нали-чия товара на складе, списание для одного товара в общем случае более одной партии товара по цене этих партий по одному из трех правил, в зависимости от установленного значения периодической константы «ПорядокСписания»: «FIFO» (первой списывается партия, которая оприходована раньше других) \ «LIFO» (в обратном порядке) \ «вручную» (пользователь сам указывает пар-тии, которые необходимо списать).

В структуре табличной части расходной накладной кроме реквизитов «Товар», «Цена», «Количество» и «Сумма», необходимо иметь реквизит «Партия», кото-рый будет недоступен для редактирования, и скрытый реквизит
«ЦенаЗакупки». Если константа «ПорядокСписания» установлена в значения «FIFO» или «LIFO», то реквизит «Партия» остается пустым.
Если константа «ПорядокСписания» установлена в значение «вручную», то в форме документа становятся видимыми и доступными дополнительные реквизи-ты диалога «ТоварДляВыбора» типа справочник «Товары»,
«СписокПартий» типа таблица значений и кнопка «Сформировать список пар-тий». В этом случае работа с накладной должна проводиться так:
-    Выбрать в реквизите «ТоварДляВыбора» нужный товар;
-    Нажать на кнопку «Сформировать список партий». При этом в таблице значений должен появится список несписанных партий указанного това-ра с указанием количества каждой партии, которое есть в остатках на складе. Алгоритм формирования списка партий необходимо построить с использованием метода выгрузки итогов регистра в таблицу значений с предварительно установленным фильтром по виду товара;
-    Щелчком мыши выбираются партии для списания, при этом добавляют-ся новые строки в табличную часть, в которые заносится «Товар», «Пар-тия»,  «Количество», а в скрытый реквизит табличной части «ЦенаЗакупки» заносится цена выбранной партии;
-    «Количество» и «цену продажи» можно изменить, что приводит к пере-счету «суммы».
   skunk
 
3 - 03.01.04 - 02:46
Тогда регистр остатков у тебя должен имееть такую структуру

ОстаткиТМЦ
 Товар
 Склад
 ЦенаПродажи
Ресурс
 Количество
 Стоимость
   Spoofy
 
4 - 03.01.04 - 12:38
А где можно приобресть эти задания?
   gr13
 
5 - 03.01.04 - 15:40
по мойму на мисте где то видел
   GrayT
 
6 - 03.01.04 - 15:48
Мне кажется структура регистра другая
Измерения:
Товар - Спр.Товар
Партия - Док.ПРиходнаяНакладная
Ресурсы:
Количество
Стоимость
---------
Склад не нужен, в задании сказано об отсутствии многоскладского учета
(0)А цена продажи отражается в РАсходнойНакладной
   skunk
 
7 - 03.01.04 - 15:53
Док.ПРиходнаяНакладная - или иначе Док.ВыполнившиДвижениеРегистра уже есть зачем дуплить? А вообщето я привел пример из стандартной ТиС где уже реализованн партиный учет. Зачем изобретать велосипед
   Таня
 
8 - 03.01.04 - 16:00
4) скачать задания можно на сайте 1С.ру
6) - прав, структура регистра должна быть именно такая (это я точно знаю)
7) стандартную ТиС нельзя брать в качестве примера, так как условия задачи определены конкретно.

Просто мне не понятно по какой цене делать расход товара в регистре по расходной накладной - если делать по цене прихода, то в регистре остаток по стоимость не висит, тогда возникает вопрос: цену продажи указывать только для перезаписи реквизита ЦенаПродажи справочника.Товары?
   GrayT
 
9 - 03.01.04 - 16:01
"Структура регистра остатков «ТоварыНаСкладе» должна обеспечивать ве-дение количественного и стоимостного учета товаров на складе в разрезе партий (поставок). Признаком партии является сам документ
«ПрихНакл», по которому пришел товар.
"
Документ делающий движения по регистру в одном случае ПРихНакл, а в другом РасхНакл. Но учет должен вестись в разрезе партий - прихНакл.
Знатаком ТиС себя не считаю сейчас конфу загружу - посмотрю.
   GrayT
 
10 - 03.01.04 - 16:09
(8) Расход по цене прихода.
(7) В Торговле партионный учет сделан на регистре "ПартииНаличие" и там совсем другая структура чем в Рег.ОстаткиТМЦ. и партионный учет завязан на СПРАВОЧНИКЕ.ПАРТИИ
Вообще сертификационные задачи расчитаны на написание с нуля и копироваь ни чего не надо, а то в 4 часа можно не успеть скопировать всю ТиС :))
 
 
   Таня
 
11 - 03.01.04 - 16:12
Товарищи, еще вопрос по тому же заданию:
Skunk, ты мне вчера по поводу подбора посоветовал проверять типЗначения на = 12 (документ)
Я написала вот что:

Процедура Подбор()
ОткрытьПодбор("Спр-к.Товары","ДляПодбора",Контекст,1,);
// Это в документе


Процедура ПоказатьОстатки()
СЗ = Форма.Параметр;
Если ТипЗначения(СЗ.ТЕКУЩИйДОКУМЕНТ())=12 Тогда
ДатаАкт = СЗ.ДатаДок;
// Это в модуле формы справочника дляПодбора

Как еще из СЗ достать тип Документ, что-то мне кажется, что такой вариант тоже будет ругаться если форму подбора открыть не из документа, а из формы например Обработки или Отчета.
   GrayT
 
12 - 03.01.04 - 16:18
Попробуй так:
Процедура ПоказатьОстатки() 
СЗ = Форма.Параметр; 
Если ТипЗначения(СЗ.ТЕКУЩИйДОКУМЕНТ())=12 Тогда 

ДатаАкт = СЗ.ТекущийДокумент().ДатаДок;
   GrayT
 
13 - 03.01.04 - 16:20
А на момент подбора документ записан?
   skunk
 
14 - 03.01.04 - 16:29
(10)Я не сдавал на сертификацию, незнаю правил и прочей шняги для этого. Просто спросили. Я показал как это бы сделал я. Я не утверждал, что это решение правильно. А у вас явное дублирование информации. Ну 1С с этой строны понять трудно. У них там вообще много чего не понятного.

(11)Я не так советовал

СЗ = Форма.Параметр;
Если ТипЗначения(СЗ) = 12 Тогда
 и далее что тебе надо если это документ.

СЗ может содержать, как пустое значение так и и совершено другое смотря что ему передали из обработки, отчета, или еще откуда.

Поэтому можешь добавить

ИначеЕсли ТипЗначения(СЗ) = 0 Тогда
 это если в качестве параметра передали либо пустое значение либо значение не определенного ввида.
   GrayT
 
15 - 03.01.04 - 16:36
Да почему дублирование?
   skunk
 
16 - 03.01.04 - 16:38
Потому что информация о документе выполневшем движение регистра уже сохраняется. по умолчанию.
   GrayT
 
17 - 03.01.04 - 16:43
(16) Это да, но учитывать товар нужно в разрезе партий, т.е. партия должна быть измерением, а партией является док.ПрихНакл
   skunk
 
18 - 03.01.04 - 16:51
(17)Блин, я не спорю. Тем более человек который поставил вопрос сказал, что ваше решение правильное.
   GrayT
 
19 - 03.01.04 - 16:57
(11) Я там глупость сморозил по поводу ТекущегоДокумента() - не разобрался в сути вопроса. Действительно ТипЗначения(Форма.Параметр) всегда вернет 100 если вызывать подбор с контекстом. Попробуй вместо контекста передавать список значения, одним из значений будет как раз то, от куда вызываешь подбор:
В документе:
сз = СоздатьОбъект("СписокЗначений");    
сз.ДобавитьЗначение("Документ", "ОткудаВызвали");
сз.ДобавитьЗначение(Контекст, "Контекст");
ОткрытьПодбор("Справочник...","ФормаТакаяТо", сз);
В Подборе
Если Форма.Параметр.Получить("ОткудаВызвали")= "Документ" Тогда
 //Вызов из документа


Для красоты можно предварительно проверить что форма.Параметр является списком значений
   skunk
 
20 - 03.01.04 - 17:11
И если параметр пустое значение получишь по рукам.
А если сз передан из другого места где не указан параметр "ОткудаВызывали" - просто забыли, опять грабли.

(19)Я не спорил по сертификату, ну здесь ты не прав.
   GrayT
 
21 - 03.01.04 - 17:17
"Защита от дурака" может быть многоуровневой (и должна быть). Я отвечал на вопрос и давал идеи, а писать полностью заканченые куски программ не хочу - люди должны сами шишки набивать и учиться.
   Таня
 
22 - 03.01.04 - 17:17
Чиво вы ругаетесь?
GrayT был прав в отношении структуры регистра, а вот то что
написано в (19) я так пробовала - это первоначальный вариант
- со списком значений, просто я решила упростить код и вместо
спискаЗначений поставила просто Контекст

Skunk, если я пишу ТипЗначения(СЗ) = 12, тогда он выдает
что это вовсе не 12 а 100 ! Так как СЗ в этом случае -
Групповой контекст.
   skunk
 
23 - 03.01.04 - 17:22
Тогда ты пишешь

ЕслиИначе ТипЗначение(СЗ) = 100 Тогда
 и делаешь то что тебе надо делать если передали из обработки или откуда там.
   GrayT
 
24 - 03.01.04 - 17:30
В том то и дело, что вызывая ОткрытьПодбор("","", КОНТЕКСТ);
Форма.Параметр всегда вернет 100 - групповой контекст. Таня в топике про групповой контекст Вы спрашивали как передать дату. А так не годится
ОткрытьПодбор("","",ДатаДок);
   Таня
 
25 - 03.01.04 - 17:31
Skunk, ведь если я так напишу, то он всегда будет попадать
именно на =100 а <> 100 будет в любом случае проходить
мимо, так как СЗ = 100 и больше ничему другому
Может написать так:  
Если ПустоеЗначение(СЗ.ДатаДок) <> 0 Тогда?
   Таня
 
26 - 03.01.04 - 17:33
24) нет так оно ругается, вроде как на переменную, когда
пытаешься это в справочнике достатать
   Таня
 
27 - 03.01.04 - 17:34
Ладно я пошла в винды проверять
   GrayT
 
28 - 03.01.04 - 17:36
Т.е. как это ругается? В качестве параметра в форму можно передать все что угодно.
ПриОткрытии()
предупреждение(Форма.Параметр)// Окошко с датой документа
   345
29 - 03.01.04 - 18:14
//Со структурой регистра вроде разобрались

   //

   //

   //

   //с подборами и обработкой

   //

   //

    
    
   //====================================

   //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

   //\\\\\\\   Подбор                \\\\

   //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

   //====================================

    procedure Подбор()
        Сз=CreateObject("ValueList");        
        Сз.AddValue(Context, "Контекст");
        Сз.AddValue(Склад, "МестоХранения"); 
        Сз.AddValue(ДатаДок, "ДатаДок");
        OpenPermanentChoice  ("Reference.Номенклатура", "ДляПодбора", СЗ);
    EndProcedure //Подбор

    
                
//=============================

//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//\\\\\\\   ПриОткрытии        

//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//=============================

procedure OnOpen()
              
   // обработка параметров при открытии формы подбора 

   //

   // хе-хе - а есть еще процедура  OnReopen

    
    if ValueTypeStr(Form.Parameter) = "СписокЗначений"  then 
        Док = Form.Parameter.Get("Контекст");
        МестоХранения = Form.Parameter.Get("МестоХранения");    
        
        if ValueTypeStr(Док) ="Документ" then
            if Док.Kind() = "ПродажаВРозницу"  then 
               Нужные действия при вызове из дока РОЗНИЦА
               
           elsIf Док.Kind() = "ПеремещениеТоваров"  then
               нужные действия при вызове из Дока на перемещение
            endIf;
        
        else
           // а если СЗ не содержит документа - да пошло оно все

           // хотя можно сделать и по своему - так, как надо

            DoMessageBox ("Попытка вызвать подбор не из документа!"); 
            ReturnStatus(0); 
            Return; 
        endIf; 
    endIf;
    
    
EndProcedure //ПриОткрытии
   skunk
 
30 - 03.01.04 - 18:18
Блин, народ приношу извинения не контекст надо пердовать а ТекущийДокумент()

то бишь

в доке пишешь
ОткрытьПодбор("Справочник.КакойНада", "ФормаСписка", ТекущийДокумент())
   skunk
 
31 - 03.01.04 - 18:31
(29)Pit сделал как ты сказал и получал только     DoMessageBox ("Попытка вызвать подбор не из документа!");
   Таня
 
32 - 03.01.04 - 18:35
Люди, спасибо за помощь в решении вопроса подбора, я его решила, как в (25)

У меня другой вопрос возник:
ТаблицуЗначений можно загружать в табличную часть документа, а можно ли как нибудь ее в табличную часть формы списка справочника?
   skunk
 
33 - 03.01.04 - 18:39
в продолжение 29 я кстати тоже на этом пар поймал, думал в контексте при подборе пердается документ, а там передается форма документа.
 
 
   345
35 - 03.01.04 - 19:02
(29) Не понял...
Ты как создаешь СЗ перед вызовом?

попробуй в форму подбора вставить нижеприведенную процедуру и скажи, что пишет...

!!! в СЗ перед вызовом нужно положить строку
Сз.AddValue(Context, "Контекст"); 


procedure OnOpen() 
   // обработка параметров при открытии формы подбора 

   // 

   // хе-хе - а есть еще процедура  OnReopen 

    Message ("Тип параметра = "+ValueTypeStr(Form.Parameter));
    if ValueTypeStr(Form.Parameter) = "СписокЗначений"  then 
        Message ("Получен список значений");
        Док = Form.Parameter.Get("Контекст"); 
        if EmptyValue(Док) = 1 then
            Message ("Док - Пустоезначение");
        else
            Message ("Тип переменной ДОК = "+ValueTypeStr(Док));
        endIf;  
        if ValueTypeStr(Док) ="Документ" then 
            Message ("Документ в переменной ДОК = "+ValueTypeStr(Док));
        else 
           // а если СЗ не содержит документа - да пошло оно все 

           // хотя можно сделать и по своему - так, как надо 

            DoMessageBox ("Попытка вызвать подбор не из документа!"); 
            ReturnStatus(0); 
            Return; 
        endIf; 
    endIf;          
   // просто отменим открытие формы подбора

    ReturnStatus(0); 
    Return; 
EndProcedure //ПриОткрытии
   345
36 - 03.01.04 - 19:03
Вообще то это кусок работающей процедуры ... правда, в бухии, но какая разница ....
   Таня
 
37 - 03.01.04 - 20:02
Это вы уже между собой что-то решаете, или мне помочь пытаетесь?
   skunk
 
38 - 03.01.04 - 20:26
(36)Я не передаю списокзначений я отправляю передаю сам документ. Реально твой код проверил, ошибка что и у меня (Контекст здесь не сам документ а форма документа) все работает как с документом, но также через контекст есть доступ ко всем другим значениям на форме, то бищь закладкам, кнопкам и прочей дряни. Поэтому конеткст не равен типу значения "документ".

сообщает твоя прога вот это:
Тип параметра = СписокЗначений
Получен список значений
Тип переменной ДОК = ГрупповойКонтекст
   skunk
 
39 - 03.01.04 - 20:27
(37)Да все еще пытаемся. Уловила суть ошибки.
   345
40 - 03.01.04 - 20:49
Ошибка, ИМХО, в том, что вместо СЗ в параметр в документе заталкивается ТекущийДокумент.

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

Вот немного переделанная на лету процедура - д. брать и СЗ и ТекущийДокумент


procedure OnOpen() 
  // обработка параметров при открытии формы подбора 

  // 

  // хе-хе - а есть еще процедура  OnReopen 


   Message ("Тип параметра = "+ValueTypeStr(Form.Parameter)); 
   if ValueTypeStr(Form.Parameter) = "СписокЗначений"  then 
       Message ("Получен список значений"); 
       Док = Form.Parameter.Get("Контекст"); 
       if EmptyValue(Док) = 1 then 
           Message ("Док - Пустоезначение"); 
       else 
           Message ("Тип переменной ДОК = "+ValueTypeStr(Док)); 
       endIf;   
       if ValueTypeStr(Док) ="Документ" then 
           Message ("Документ в переменной ДОК = "+ValueTypeStr(Док)); 
       else 
          // а если СЗ не содержит документа - да пошло оно все 

          // хотя можно сделать и по своему - так, как надо 

           DoMessageBox ("Попытка вызвать подбор не из документа!"); 
           ReturnStatus(0); 
           Return; 
       endIf; 
   
    ИНАЧЕЕСЛИ ValueTypeStr(Form.Parameter) = "Документ"  then 
   // в параметр втолкали текущийДокумент

   // далее соответствующая обработка 

   // полученного дока для извлечения нужной инфы

    Сообщить ("Полученный параметр = "+ValueTypeStr(Form.Parameter);
    Сообщить ("Получен документ = "+Form.Parameter.kind());

   endIf;           
  // просто отменим открытие формы подбора 

   ReturnStatus(0); 
   Return; 
EndProcedure //ПриОткрытии 
Хотя как частный способ - тоже можно... Но тогда форма подбора должна учитывать все особенности структуры каждого дока ...
   Таня
 
41 - 03.01.04 - 20:50
Если честно, нет :(
а чем мой вариант через проверку ПустоеЗначение(СЗ.ДатаДок) не подходит?
   Таня
 
42 - 03.01.04 - 20:51
У меня от большого количества иностранных словов глаза в кучу собираются
   skunk
 
43 - 03.01.04 - 21:05
Их бин pit ты опять не прав. СписокЗначенй только грузит обработку, и если кроме информации о документе тебе ни чего передовать не надо создает кучу лишних телодвижений. Хотя бы сравни свою проверку и мою

Если ТипЗначения(ЧтоПередали) = 12 Тогда
 //Обрабатываем документ

Иначе
 //Пошло все на фиг
КонецЕсли.

А структуру документа тебе по всякому придеться проверять как бы ты его не передал.

(41)Потоу что можно нарваться на такое:
Если ПустоеЗначение(СЗ.ДатаДок) <> 0 Тогда
{Справочник.Новый.ФормаСписка.ФормаСписка.Модуль(3)}: Значение не представляет агрегатный объект (ДатаДок)
   345
44 - 03.01.04 - 21:27
вообще в таких случаях лучьше всего использовать СЗ для передачи параметров, в которые толкать надо толко то, что используется в вызываемой программной единице...

Тогда при модификации доков или их структуры не надо лазить в вызываемую единицу и вносить правки туда... Только в вызывающей ....
   skunk
 
45 - 03.01.04 - 21:41
(44)pit это все свернется к частному и повлечет за собой опять немерено длиный список состоящий из Если.
Типа проверить откуда МеняВызвали и если меня вызвали отуда то проверить предалили мне это или то или все это сразу. Я лично считаю, что это не есть гуд. Для того чтобы проверить все, когда один фиг при возрате мы получаем элемент справочника и уже вызываемой единице его обрабатываем.
   345
46 - 03.01.04 - 21:44
skunk не прав... Он смотрит с точки зрения написания кода.... я - с точки зрения сопровождения... Затраты на сопровождения и модификацию - больше, следовательно, если пишешь как разработчик - лучше чуть потратить на этапе разработки и сэкономить на сопровождении ...

Второе - skunk все равно не прав, ибо времеННые затраты процессора на разбор СЗ мизерны, и, учитывая, что этот блок отрабатывает однократно ПриОткрытии ... поэтому этими затратами можно пренебречь...

Разбор структуры дока при передачего в качестве параметра ТекущегоДока (особенно если несколько доков разной структуры используют одну форму подбора) - это гемор еще тот...

При этом надо не забывать, что если изменили структуру дока - надо залезть в форму подбора и внести изменения туда ... 121% - не будет сразу сделано....

Если же в СЗ загонять нужные параметры отдельными строками - форму подбора вообще менять не нужно...

Контроль параметров на достоверность и значимость - нужно и можно выполнять именно в форме списка при разборе СЗ ... Проверка программируется однократно и только нужных параметров - не надо повторять в каждом доке...

Все это называется культурой и технологией программирования ... Вообще методик и их названий много... Но их цель одна - снизить затраты на этапе сопровождения, ибо эти затраты весьма существенны и на порядки превышают покупную цену продукта типа 1С....

Типовые от 1С идеальными примерами такого такого подхода не служат ... Хотя надо признать - за последние два года типовые сильно причесали в этом плане .....
   skunk
 
47 - 03.01.04 - 21:54
pit не прав ибо все выше сказаное можно отнести и к СпискуЗначений плюс к нему добовляется геморр при открытии формы не из документа а из другой програмной единицы где кроме как СЗ передовать нечего.
pit все равно не прав потому что я как раз и смотрю с точки зрения сопроваждения. И глобальное изменение документа, которое может привести к изменению обработки открытия формы, в моем случае затронут только документ и вызываемую единицу, в случае с СЗ также и другие единицы в которых в качестве параметра передается списокзначений.
   345
48 - 03.01.04 - 22:15
Нет, не прав ты... Каждая программная единица имеет задокументированный список параметров, которые ей надо подать на вход... Тогда изменения в одной программной единице не коснутся тех, которые она вызывает... ибо ты ОБЯЗАН подать ей нужное для работы.

На примере подбора номенклатуры
-- на вход нужно подать дату показа остатков (обычно это дата документа). Если дата не задана - тогда при разборе выясняется отсутствие даты и показ на рабочую дату...
-- на вход нужно подать склад, по которому показывать остатки... Не задан - по всем ...
-- на вход нужно подать тип номенклатуры.. Не указана - по всем.

При соблюдении этих правил - вообще то глубоко плевать, откуда вызван подбор - из дока или отчета/обработки.

Если аналогичные требования наложить на возвращаемые параметры - тогда подбор формирует некое множество выбранных элементов справочника и возвращает его... Ему глубоко плевать, кто будет принимать параметры .... Дело принимающего - разобрать полученное множество ... струкьура которого известна ..

При таких подходах прогр единицы максимально независимы друг от друга и допускают независимое изменение ....

"И глобальное изменение документа, которое может привести к изменению обработки открытия формы, в моем случае затронут только документ и вызываемую единицу"
--- В моем подходе изменения затронут только документ... но никоим боком - форму подбора... котрая работает на стандартном множестве параметров .... Разница есть ...

"в случае с СЗ также и другие единицы в которых в качестве параметра передается списокзначений" -- каким боком, если структура списка оговорена ?...

именно на этих принципах строится коллективная разработка ...
   skunk
 
49 - 03.01.04 - 22:32
pit a теперь скажи какое из трех твоих правил при подборе номеклатуры нарушается передачей форме не списка значений а документа.

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

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

Допустим фирма вела учет по одному юридическому лицу. Через пару лет она объяденилась с дугим юр. лицом и завела себе один общий склад. На котором надо учитывать остатки разных фирм. То бишь при открытии данной формы требуется показ по дате, юр. лицу, складу, типу.
И не много усложним задачу те программеры котрые разрабатывали систему и знают о согласовании уволились или умерли. Да скажешь кометь надо. Конечно будешь прав. Но была какая-то малозначительная обработка, про которую новые программеры просто забыли, или не знали, что она там открывает справочник подбора, и не впарили в нее изменения. Что получаем в итоге. Когда зверь вызывает обработку и открывает из нее подбор. По моему он получит сообщение об ошибки. Или я здесь тоже не прав.
 
  Рекламное место пустует
   Таня
 
50 - 03.01.04 - 22:39
А как можно проверить наличие элемента диалога в форме?
   skunk
 
51 - 03.01.04 - 22:54
Попытка
  ПустоеЗначение(Форма.ПолучитьАтрибут("кн2"));
Исключение
  Сообщить("Нет атрибута кн2");
КонецПопытки;

можно так.
   345
52 - 03.01.04 - 23:14
(50) штатно - никак.. Нештатно - Либо внешними компонентами (ВК)... Либо извратом ... типа
try
except
endTry

(49)
при передаче в форму вместо списка парамтров ссылки на документ надо предусматривать обработку всех доков в форме для правильной выборки это параметра .. из дока .. который может просто по разному называться ...

 добавление новой аналитики в систему - серьезная операция... кстати, не факт, что в данном случае подбор будет падать с ошибкой ... он может работать ... но не давать разворота по новой аналитике (юр лицу)... Все зависит от того, как построены запросы для разворачивания... опять таки пример - можно заложиться на порядок следования ресурсов (субконто) и обращаться по номеру Ресурс(1)...Ресурс(и)  Субконто(1)...Субконто (и)
А можно по имени.... тогда не упадет .... но может быть не оптимально ... по быстродействию...

Правка же нужна в любом случае во всех доках - НО! можно ее и не делать - если в форме подбора сделать анализ доп параметра и в случае его пустого значения разрешать выбор аналитики прямо в форме подбора ... Работать будет ... но неудобно ....

В случае же новой аналитики надо все равно править все доки для учета новой аналитики... и форму подбора - для обработки нового параметра и его использования в новых запросах .. Но в моем варианте объем правок менее объемный и четко локализован рамками каждого дока ...

Вообще я рекомендовал бы посмотреть последние бухии и торговли .... разные группы разработчиков явно ... и немного разные подходы....  В ТиС разработчики делают попытку разрулить ситуацию через написание универсальных процедур и сильное использование Метаданных ... Вроде ничего получается... но громоздко и много вроде бы лишних проверок ... Плюют разработчики на эти проверки (и правильно делают....) Ибо таже процедура глЗаполнитьРеквизитыШапки .... выполняется при вводе нового дока один раз .... а сам документ готовится человеком много минут ....

Мозги у железа кремневые - вот пусть ими и шевелит ....

А вообще пример надуманный и непоказательный ...
Гораздо жизненнее пример - добавление нового дока в систему .... это чаще делается ....

P.S. наш с тобой спор переходит в русло 2-х подходов в написании программ -
где делать проверки передаваемых параметров ... на вызывающей и ли вызываемой стороне ... Каждый подход имеет свои плюсы и минусы ...
   skunk
 
53 - 03.01.04 - 23:52
Давай разберем твой пример. Добавление нового документа в уже существующую конфигурацию.

Мое решение.

Если ТипЗначения(ЧтоПередали)  = 12 Тогда
//обработка документа

Если ЕстьРеквизит(ЧтоПередали, «склад»)  = 1 Тогда
//Смотрим и делаем склад

КонецЕсли
КонецПроцедуры

Тогда при создании нового документа мне для вызова обработки справочника номенклатуры надо добавить только строчку
ОбработкаПодбора(«Справочник», «Форма», ТекущийДокумент);

Твое решение (или около того) просто твой второй тоже не работает. :(

Если ТипЗначенияСтр(ЧтоПередали) = «СписокЗначений» Тогда
Если ЧтоПередали.ПолучитьЗначение(«Склад») <> ПустоеЗначение(«Справочник.Склады») Тогда
//Смотрим и делаем склад

КонецЕсли
КонецПроцедуры

Тогда при создании нового документа тебя для вызова обработки справочника номенклатуры надо добавить следующее
СЗ = СоздатьОбъект(«СписокЗначений»);
СЗ.ДобавитьЗначение(Склад, «Склад»);
ОбработкаПодбора(«Справочник», «Форма», СЗ);

А теперь прикинь, если тебе надо будет передать не один а четыре. А теперь добавь сюда еще мой надуманный пример, или хотя бы его часть, когда добавление документа будет делать программист не участвовавший в разработке продукта.

С постскриптумом твоим я тоже согласен.  Наш спор перешел именно в это русло. Пусть человек сам решит, что ему лучше.

Вдобавок еще вот это: "Вообще сертификационные задачи расчитаны на написание с нуля и копироваь ни чего не надо, а то в 4 часа можно не успеть скопировать всю ТиС :))"
   345
54 - 04.01.04 - 00:05
К сертификации наш спор - никоим боком...

Если добавление будет делать программист сторонний - ему придется рыть 2 прогр модуля - док и форму подбора - не есть гуд. Что бы передать 4 склада -
создатьСЗ
добавить (склад1
добавить (склад2
добавить (склад3
добавить (склад4
открытьформу

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

Вся 1с - это решение частных задач в частных случаях ...
   skunk
 
55 - 04.01.04 - 00:17
Все pit я устал. Сойдемся на товем ps каждый делает как хочет. Что ему лучше он решит сам для себя. А сейчас наш спор вылился в то какой конец у палки громче бъет по барабану.
   345
56 - 04.01.04 - 00:27
Каждая палка имеет 3 конца ...
   skunk
 
57 - 04.01.04 - 00:34
pit все я ушел спать. заметь я не говрил сколько у палки концов. какой из концов этой палки твой решай сам.
   Таня
 
58 - 04.01.04 - 00:47
А я сделала и оно больше не ругается :)))
   skunk
 
59 - 04.01.04 - 04:18
(59)а еще как ты будешь затыкать такие тычки
сз.добавитьзначение(Склад.Наименование, "Склад");
   skunk
 
60 - 04.01.04 - 04:27
По моему не что подобное, на других языках как раз и может привести к популяроной в некоторых кругах ошибки buffer overlow.
(52)Вообще все что эсиной делается очень большой изврат. И кстати передаче недокументированых параметров.
   Романыч
 
61 - 04.01.04 - 20:02
Структура регистра не такая, все равно остаток упрет в отрицательное, если не разобралась могу подсказать
   Романыч
 
62 - 04.01.04 - 20:04
Gray прав, но я бы сделал по другому
   Таня
 
63 - 04.01.04 - 22:45
Романыч, почему структура регистра "не такая"?
Объясни.



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