Имя: Пароль:
1C
1С v8
Задача 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
Задача решена!

В модуле документа есть процедура ПередЗаписью с параметром "режимЗаписи", в процедуре выполняю все проверки и формировавние перемещения, если все проходит хорошо перехожу в "ОбработкаПроведения", если нет в процедуре "передЗаписью"  меняю значение параметра РежимЗаписи с "проведение" на "Запись"
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.