|   |   | 
| 
 | Задача 1.8 | ☑ | ||
|---|---|---|---|---|
| 0
    
        andr_hav 20.10.11✎ 14:10 | 
        http:/Задача 1.8.
  Компания занимается оптовой торговлей. Поступление товаров отражается документом «Приходная накладная», продажа - «Расходная накладная». Закупка товара происходит только в отдел закупок, а непосредственно продажа происходит в торговых точках. Перемещение товара происходит по трансфертной цене и также отражается документом «Расходная накладная», при этом цена продажи не указывается. Товар может перемещаться только из отдела закупок в торговую точку: Трансфертная цена определяется как себестоимость перемещаемого товара, увеличенная на процент наценки, задаваемый для каждой торговой точки. При продаже товара необходимо в первую очередь контролировать хватает ли товара в данной торговой точке. Если нет - необходимо программно создать документ по перемещению недостающего товара из отдела закупок. В том случае, когда и в отделе закупок товара не хватает, документ для перемещения не создается, а продажа не производится (документ не проводится). Кто нибуть подскажите алгоритм правильного решения. Я делаю так: проверяю остаток в документе если не хватает создаю программно документ перемещения, провожу, и возвращаюсь в обработку проведения первого документа, но так как созданный документ создан в транзакции первого , то он не внесет движения в базу, а следовательно первый докумен не проведется за недостаточностью товара, замкнутый круг. Эта задача имеет ли логическое решение или нет. | |||
| 1
    
        Ненавижу 1С гуру 20.10.11✎ 14:15 | 
        (0) с чего ты взял, что внутри одной транзакции не видны изменения?     | |||
| 2
    
        andr_hav 20.10.11✎ 14:18 | 
        Обработка проведения выполняется в транзакция, значит все измненения и записи будут добавлены в базу только после успешного выполнения процедуры и транзакция закрывается и все изменения записывабтся в базу или не если произошла ошибка в транзакции.
  с чего ты взял, что внутри одной транзакции не видны изменения? я повторно запускаю запрос о наличии остатков и результат выдается без движения созданного документа | |||
| 3
    
        Волесвет 20.10.11✎ 14:20 | 
        можно такой финт ушами замутить - смотреть остатки и на точке и отделе закупок вместе, хватает проводим документ, а отриц остаток на точке гасим перемещением с отдела закупок....     | |||
| 4
    
        Irbis 20.10.11✎ 14:20 | 
        А сразу останки в двух точках почему нельзя проверить?     | |||
| 5
    
        Ненавижу 1С гуру 20.10.11✎ 14:21 | 
        (2) наверное не на тот момент смотрите остатки
  все там видно | |||
| 6
    
        дущ 20.10.11✎ 14:26 | 
        Мне всё-таки кажется, что т.к. задача каноническая, то проводить один документ внутри другого нельзя. Нельзя по стандартам разработки. Т.е. всю эту лабуду с проверкой и формированием нужно вешать на отдельную кнопку. Нажал кнопку "Проверить" - сформировалось - проводи.     | |||
| 7
    
        andr_hav 20.10.11✎ 14:26 | 
        можно такой финт ушами замутить - смотреть остатки и на точке и отделе закупок вместе, хватает проводим документ, а отриц остаток на точке гасим перемещением с отдела закупок....
  Ответ: Хороший вариан буду его пробывать реализовывать, хотя нет, проблема в расчете себестоимости, нужно расчитывать себестоимость по складу продажи, а на нем пока товары в недостаче (2) наверное не на тот момент смотрите остатки все там видно Ответ: Документ перемещения создаю на 1 секунда позже, а остатки проверяю на дату первого документа, хотя нужно мне проверить еще раз новым запросос, просто я использовал первый(проверка на наличие остатков на нужном складе) и запускал его еще раз | |||
| 8
    
        дущ 20.10.11✎ 14:28 | 
        +(6)(7)Естественно, что запрос не видит движения из незаписанной транзакции. Поэтому что бы весь этот огород не городить имеет смысл прямо из формы перехватывать кнопку "Проверсти" и формировать документы последовательно, но вне транзакции.     | |||
| 9
    
        andr_hav 20.10.11✎ 14:32 | 
        Мне всё-таки кажется, что т.к. задача каноническая, то проводить один документ внутри другого нельзя. Нельзя по стандартам разработки. Т.е. всю эту лабуду с проверкой и формированием нужно вешать на отдельную кнопку. Нажал кнопку "Проверить" - сформировалось - проводи.
  В принципе Вы правы, но как тогда поступить с условием задачи, возможно уйти немного всторону от условия, или эта ситуаци подлежит обсуждению с преподователем | |||
| 10
    
        Ненавижу 1С гуру 20.10.11✎ 14:33 | 
        "Документ перемещения создаю на 1 секунда позже, а остатки проверяю на дату первого документа"
  ну и? | |||
| 11
    
        andr_hav 20.10.11✎ 14:35 | 
        проверка и Формирования документа перемещения осуществляется в ручную по кнопке и после проводится документ?
  "Документ перемещения создаю на 1 секунда позже, а остатки проверяю на дату первого документа" ну и? Ответ: остатков не хватает! | |||
| 12
    
        Asirius 20.10.11✎ 14:36 | 
        (0) 
  >>но так как созданный документ создан в транзакции первого , то он не внесет движения в базу, Бред. В типовых 8.2 снначала делаются движения, потом проверяются остатки. И если минус - то откат транзакции. | |||
| 13
    
        FIXXXL 20.10.11✎ 14:37 | 
        (11) проверяй на КонецДня(ДатаДока)     | |||
| 14
    
        ale-sarin 20.10.11✎ 14:39 | 
        А почему бы "Перемещение" не делать из "ПередЗаписью()" (с проверкой на "режим записи") первого документа?     | |||
| 15
    
        дущ 20.10.11✎ 14:40 | 
        (9) из моего опыта сдачи этих экзаменов - скорее всего на этот вопрос преподаватель не ответит. Вопросы можно задавать по толкованию постановки задачи, а не по технической реализации. Нам, например, экзаменатор говорил - "Представьте, что я заказчик и разбираюсь в компьютерах исключительно на уровне пользователя" отсюда и вопросы мне задавайте.
  А решение просто: перехватываешь ПередЗаписью В ФОРМЕ документа, проводишь это своё перемещение, а потом уже и сам документ естественным способом проводится. | |||
| 16
    
        ale-sarin 20.10.11✎ 14:43 | 
        (15) Я бы не из формы, а из модуля перехватывал.     | |||
| 17
    
        andr_hav 20.10.11✎ 14:43 | 
        (9) из моего опыта сдачи этих экзаменов - скорее всего на этот вопрос преподаватель не ответит. Вопросы можно задавать по толкованию постановки задачи, а не по технической реализации. Нам, например, экзаменатор говорил - "Представьте, что я заказчик и разбираюсь в компьютерах исключительно на уровне пользователя" отсюда и вопросы мне задавайте. 
  А решение просто: перехватываешь ПередЗаписью В ФОРМЕ документа, проводишь это своё перемещение, а потом уже и сам документ естественным способом проводится. Спасибо, решение вродебы логичное, буду пробывать. | |||
| 18
    
        дущ 20.10.11✎ 14:52 | 
        (16) хмм... помню плохо, но, помойму в модуле обработчика "ПередЗаписью" нет. Там же вроде только ПриЗаписи, а при попадании в него уже начинается системная транзакция по записи самого документа в базу     | |||
| 19
    
        hhhh 20.10.11✎ 15:10 | 
        (18) есть он там     | |||
| 20
    
        andr_hav 21.10.11✎ 09:34 | 
        Задача решена!
  В модуле документа есть процедура ПередЗаписью с параметром "режимЗаписи", в процедуре выполняю все проверки и формировавние перемещения, если все проходит хорошо перехожу в "ОбработкаПроведения", если нет в процедуре "передЗаписью" меняю значение параметра РежимЗаписи с "проведение" на "Запись" | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |