Связь Заказов и Реализации

1. Intercititude 12.04.20 12:52 Сейчас в теме
Всем доброе время суток!
Платформа 8.2. Обычные формы.

Делаю следующий механизм. Есть документ "Согласованная сумма"(СС) в котором указывается В шапке - РабочаяДата;В ТЧ - Контрагент,ДатаОкончания и Сумма.

Этот документ подразумевает под собой, что при проведении документов "Заказ покупателя" или "Реализация товаров и услуг",если в документе "СС" есть сумма к примеру 5000 в промежутке времени РабочаяДата-ДатаОкончания, то Заказ и Реализацию выше 5000 в этом промежутке мы не можем провести.
Плюс ко всему есть ньюансы:
1)необходимо учитывать все суммы по реализациям + заказам за день!.
2)В случае конфликтов документов,пересечения во времени, брать большую сумму!

К примеру:
Мы вводим согласованную сумму(приоритетный документ) -

В рамках этой суммы создаются заказы, на их основании реализации, которые могут лежать в других числах. Т.О. надо смотреть подчиненку/

На 7/04 был один документ с одной разрешенной суммой. На основании этого документа была оформлена реализация на 08/04

08/04 был заведен другой документ, с другой суммой. При оформлении заказа 08/04 система посчитала реализацию 08/04, оформленную на заказ от 07/04
,а не должна была!

Прикладываю черновой кусок кода этого механизма проверки из модуля обработки проведения "Заказ покупателя":

Процедура ПроверкаСогласования(Отказ)

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

   Пока ВыборкаСуммаЗаДень.Следующий() Цикл

                               СуммаЗаДень = ВыборкаСуммаЗаДень.ОбщаяСумма;

   КонецЦикла;

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

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

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

КонецПроцедуры
Показать


В первом запросе берутся все заказы и реализации за день! НО это в корне не верно, прошу помощи у специалистов подсказать, как сделать корректную связку Заказа+РТУ и учитывать их в первом запросе исходя из примера. К сожалению ничего толкового придумать не смог. Так же прошу высказать свое мнение,как бы лучше сделали Вы,если это возможно.
Спасибо за внимание!
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Xershi 1535 12.04.20 17:54 Сейчас в теме
(1) 2 регистра. Первый делает что писали. Второй пишет сумму. Далее алгоритм контроля остатков или оборотов.
Тут уже нужно БП изучать.
4. Intercititude 12.04.20 18:42 Сейчас в теме
(3) Можно поподробнее пожалуйста. "Первый делает что писали." - о чём именно писал ?
Оба регистра сведении ?

По поводу БП вроде описал всё.
Меня больше волнует как не учитывать реализации,если они была создана на основании заказов,которые в свою очередь были созданы и пропущены с помощью документа "Согласованная сумма".
5. Xershi 1535 12.04.20 20:00 Сейчас в теме
(4) второй скорее всего регистр накопления. Вам наверное нужно книжки почитать для начала.
Т.к. не совсем понятно какая архитектура решения должна быть.

По поводу как не учитывать тут уже зависит как вы их учитываете. И как у вас настроен учет.
В целом это разные сущности и наверное нужно их считать отдельно.
6. Intercititude 12.04.20 20:54 Сейчас в теме
(5) Регистр накопления лишний будет, необходимо исходить лишь из двух РН из первого запроса в моем примере. Заказы и Реализации лишь по ним идут, где есть контрагент.
7. Xershi 1535 12.04.20 21:10 Сейчас в теме
(6) считайте тогда по документам разницы никакой. Регистры для удобства.
8. Intercititude 12.04.20 21:17 Сейчас в теме
(7) Это сарказм? :) Думаю очень долго будет соображать программа для обхода по всем документам.
Если нет, подскажите как составить запрос. "Соображалки" не хватает.
10. Xershi 1535 12.04.20 21:47 Сейчас в теме
(8) если вам нужно за вас запрос составить, то начните с курсов по запросам или пригласите специалиста, который сделает за вас.
Если вопрос, где взять пример. То в УТ 11 есть ограничитель по задолженности. Может об этом идет речь? Тогда все уже есть с коробки!
12. Intercititude 13.04.20 09:23 Сейчас в теме
(10)Я понимаю конечно, что Вы хотите чтобы я сам додумался.
Но я уже неделю думаю об этом,как составлять запросы я знаю. Речь не об этом. Повторюсь в третий раз, я не пойму логически как исключать связки РТУ-Заказ!
14. Xershi 1535 13.04.20 10:03 Сейчас в теме
(12) как уже писал это проблемно.
Проще отдельно считать заказы и реализации.
Если нужно по алгоритму замещения, тогда сначала должно быть железная связь каждой строки. А такой нет. Данные могут разница.
Решите станет все понятно.
17. Intercititude 14.04.20 11:18 Сейчас в теме
(14)По поводу связки Заказ-РТУ всё куда проще - меня интересует только факт этой связи, реализации это уже выбранная сумма. Рассматриваем только суммы,

1. Определяемся с диапазоном

2. Сумма заказов

3. Сумма реализаций, сумма реализаций на основании заказов

4. (Допустимая сумма - Сумма реализаций) = ДопСумма

5. Сумма заказов- сумма реализаций(на основании заказов) = сумма незакрытых заказов

Это базовый набор данных

По поводу железной связь каждой строки не понял.
18. Xershi 1535 14.04.20 11:34 Сейчас в теме
(17) суть в том что заказ может не содержать данных реализации. А реализация будет содержать связь с заказом.
И даже если связь будет то может быть разница по суммам.

Поэтому и написал, что считать нужно отдельно.
Далее уже можешь играться с этими данными как угодно.
19. Intercititude 14.04.20 20:56 Сейчас в теме
(18) Ну всё просто же тогда,если нету разницы, то сумма одна. Если есть разница то этот "хвостик" добавляем у заказа.
Вот сделал такой запрос, но при втором итогов условии не знаю что сделать,подскажите хоть разок :)
:
ВЫБРАТЬ

                ЗаказПокупателя.Ссылка,

                ЗаказПокупателяТовары.Сумма

ПОМЕСТИТЬ Заказы

ИЗ

                Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары

                               ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя

                               ПО ЗаказПокупателяТовары.Ссылка = ЗаказПокупателя.Ссылка

ГДЕ

                ЗаказПокупателя.Дата МЕЖДУ &ДатаНачала И &ДатаКонца

                И ЗаказПокупателя.Контрагент = &Контрагент

                И ЗаказПокупателя.Проведен = ИСТИНА

;

 

////////////////////////////////////////////////////////////­////////////////////

ВЫБРАТЬ

                РеализацияТоваровУслуг.Ссылка,

                РеализацияТоваровУслугТовары.Сумма,

                РеализацияТоваровУслуг.Сделка

ПОМЕСТИТЬ Реализации

ИЗ

                Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары

                               ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

                               ПО РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка

ГДЕ

                РеализацияТоваровУслуг.Проведен = ИСТИНА

                И РеализацияТоваровУслуг.Контрагент = &Контрагент

;

 

////////////////////////////////////////////////////////////­////////////////////

ВЫБРАТЬ

                Заказы.Ссылка КАК Заказ,

                Реализации.Ссылка КАК Реализация,

                СУММА(ВЫБОР

                                               КОГДА Заказы.Сумма = Реализации.Сумма

                                                               ТОГДА Реализации.Сумма

                                               ИНАЧЕ ВЫБОР

                                                                              КОГДА Реализации.Сумма < Заказы.Сумма

                                                                                              ТОГДА 0

                                                               КОНЕЦ

                               КОНЕЦ) КАК Сумма

ПОМЕСТИТЬ Связка

ИЗ

                Заказы КАК Заказы

                               ЛЕВОЕ СОЕДИНЕНИЕ Реализации КАК Реализации

                               ПО Заказы.Ссылка = Реализации.Сделка

 

СГРУППИРОВАТЬ ПО

                Заказы.Ссылка,

                Реализации.Ссылка
Показать
20. Xershi 1535 15.04.20 09:55 Сейчас в теме
(19) так, а что подсказать. Алгоритм проговорили пишите запрос и работайте?
Как по мне запрос ваш кривой. Как в части ВТ так и в определении суммы. Но если результат устраивает оставляйте как есть.
Если нет опыта пройдите курс по запросам, лучшее что тут можно порекомендовать.
21. Intercititude 15.04.20 10:39 Сейчас в теме
(20) как раз по поводу кривизны запроса и хотел уточнить. Что не так то ?
Отобрал заказы по условию,связал с реализациями и вывел сумму. Не пойму Вас.
22. Xershi 1535 15.04.20 11:01 Сейчас в теме
(21) можно было сразу по ТЧ отбор ставить без левых или так по учебнику учили связывать?
Если у вас в ТЧ одна строка, то думаю алгоритм сработает, если больше, то странное условие.
23. Intercititude 15.04.20 11:17 Сейчас в теме
(22) это черновой вариант. А что не так с условием на сумму ? Разумеется там больше колонок в тч. Интересует только итоговая сумма документа.
24. Xershi 1535 15.04.20 11:19 Сейчас в теме
(23) ну судя по тексту запроса там не то что нужно.
Более подробно через консоль запросов нужно смотреть.
Intercititude; +1 Ответить
25. Intercititude 15.04.20 11:24 Сейчас в теме
(24) И правда. Сумма это строка каждой ТЧ.
У самого документа есть реквизит "СуммаДокумента".
Выходит всё-таки надо брать его и ТЧ в принципе не нужна ?
26. Xershi 1535 15.04.20 11:26 Сейчас в теме
(25) как уже писал определитесь с алгоритмом и согласно нему пишите запрос.
У вас то ли алгоритма нет, то ли запрос не так пишите.
Напишите в блокноте, что вы и как делаете, чтобы путаницы не было.
Intercititude; +1 Ответить
27. Intercititude 15.04.20 11:49 Сейчас в теме
(26) Спасибо,что подсказали с суммой. Теперь связка вроде есть на день.
Но один большой ньюанс, я сейчас беру заказы на дату и показываю реализации по ним. А как впихнуть в мой запрос ещё и реализации, которые допустим были оформлены вчера ? хм
28. Xershi 1535 15.04.20 11:53 Сейчас в теме
(27) опять возвращаемся к (26).
Составьте уже таблицу, что нужно и что сделали в запросе.
И кусками соединяйте.
29. Intercititude 15.04.20 12:13 Сейчас в теме
(28) То есть к примеру, в одну ВТ поместить вот уже имеющийся запрос со связкой заказов с реализациями за день. В другом пакете взять реализации оформленные вчера и раннее,и уже в итоговом запросе выводить эти обе ВТ ? Возможно глупые вопрос задаю, но я ещё новичок, извините заранее :)
30. Xershi 1535 15.04.20 12:40 Сейчас в теме
(29) примерно так.
Поэтому и говорю посмотри курс по запросам. Под словом пакет немного другое имеют в виду. Речь про объединение?
На ютубе Кузнецов. 5 часов и уже такое вопросы задавать не будешь)
Intercititude; +1 Ответить
31. Intercititude 15.04.20 13:15 Сейчас в теме
(30) Нет,имею ввиду пакетные запросы. А объединением как ?
Первую ВТ объеденить с Реализациями за вчерашний день ?
32. Xershi 1535 15.04.20 13:19 Сейчас в теме
(31) долго объяснять. Посмотрите курсы.
Алгоритм отлаживайте в консоли запросов. Написали запрос, сверили результат.
Если что-то не так скинули запрос/ лучше кусок запроса и задачи точечный вопрос.
А то ведем тут дискуссию, как вас научить писать запросы и правильно составить ТЗ.
Intercititude; +1 Ответить
33. Intercititude 15.04.20 17:46 Сейчас в теме +1.8 $m
(32) В общем такое вышло:
ВЫБРАТЬ

                ЗаказПокупателя.Ссылка КАК Заказ,

                ЗаказПокупателя.СуммаДокумента КАК СуммаЗаказа,

                РеализацияТоваровУслуг.Ссылка КАК Реализация,

                РеализацияТоваровУслуг.СуммаДокумента КАК СуммаРеализации

ПОМЕСТИТЬ ЗаказаРеализацииЗаПериод

ИЗ

                Документ.ЗаказПокупателя КАК ЗаказПокупателя

                               ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

                               ПО ЗаказПокупателя.Ссылка = РеализацияТоваровУслуг.Сделка

ГДЕ

                ЗаказПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон

                И ЗаказПокупателя.Проведен = ИСТИНА

                И ЗаказПокупателя.Контрагент = &Контрагент

                И РеализацияТоваровУслуг.Проведен = ИСТИНА

;

 

////////////////////////////////////////////////////////////­////////////////////

ВЫБРАТЬ

                ВложенныйЗапрос.Заказ,

                ВложенныйЗапрос.Реализация,

                СУММА(ВложенныйЗапрос.МаксСумма) КАК МаксСумма

ИЗ

                (ВЫБРАТЬ

                               ЗаказаРеализацииЗаПериод.Заказ КАК Заказ,

                               ЗаказаРеализацииЗаПериод.Реализация КАК Реализация,

                               ВЫБОР

                                               КОГДА ЗаказаРеализацииЗаПериод.СуммаЗаказа = ЗаказаРеализацииЗаПериод.СуммаРеализации

                                                               ТОГДА ЗаказаРеализацииЗаПериод.СуммаРеализации

                                               КОГДА ЗаказаРеализацииЗаПериод.СуммаЗаказа > ЗаказаРеализацииЗаПериод.СуммаРеализации

                                                               ТОГДА ЗаказаРеализацииЗаПериод.СуммаЗаказа

                                               КОГДА ЗаказаРеализацииЗаПериод.СуммаЗаказа < ЗаказаРеализацииЗаПериод.СуммаРеализации

                                                               ТОГДА ЗаказаРеализацииЗаПериод.СуммаРеализации

                               КОНЕЦ КАК МаксСумма

                ИЗ

                               ЗаказаРеализацииЗаПериод КАК ЗаказаРеализацииЗаПериод) КАК ВложенныйЗапрос

 

СГРУППИРОВАТЬ ПО

                ВложенныйЗапрос.Заказ,

                ВложенныйЗапрос.Реализация
Показать


В итоге вылазит несколько разных сумм, которые мне и нужны! Но почему то в "группировке" функция СУММА не отрабатывает. Мне нужна общая сумма, что делать ? И вообще,корректен ли такой запрос ? Смущают группировки по заказам и реализациям.
34. Intercititude 15.04.20 17:49 Сейчас в теме
(32) Так же сначала пытался сделать с помощью регистров, но связи ЗАКАЗ- РТУ не получилось добиться. Принял решение делать по документам,как вы и говорили. Но возможно подскажете что можно сделать с этим,так как через регистры работать корректнее всё-таки считаю:

ВЫБРАТЬ

                РасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовОборот КАК СуммаПоЗаказам,

                РасчетыСКонтрагентамиОбороты.Контрагент,

                РасчетыСКонтрагентамиОбороты.Регистратор,

                РасчетыСКонтрагентамиОбороты.Сделка

ПОМЕСТИТЬ ЗаказыЗаПериод

ИЗ

                РегистрНакопления.РасчетыСКонтрагентами.Обороты(&ДатаНач, &ДатаКон, Регистратор, Контрагент = &Контрагент) КАК РасчетыСКонтрагентамиОбороты

ГДЕ

                РасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.ЗаказПокупателя

;

 

////////////////////////////////////////////////////////////­////////////////////

ВЫБРАТЬ

                ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовОборот КАК СуммаПоРеализациям,

                ВзаиморасчетыСКонтрагентамиОбороты.Контрагент,

                ВзаиморасчетыСКонтрагентамиОбороты.Регистратор,

                ВзаиморасчетыСКонтрагентамиОбороты.Сделка

ПОМЕСТИТЬ РеализацииЗаПериод

ИЗ

                РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(&ДатаНач, &ДатаКон, Регистратор, Контрагент = &Контрагент) КАК ВзаиморасчетыСКонтрагентамиОбороты

ГДЕ

                ВзаиморасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг

;

 

////////////////////////////////////////////////////////////­////////////////////

ВЫБРАТЬ

                ЗаказыЗаПериод.Регистратор,

                СУММА(ЗаказыЗаПериод.СуммаПоЗаказам) КАК СуммаПоЗаказам,

                РеализацииЗаПериод.Регистратор КАК Регистратор1,

                СУММА(РеализацииЗаПериод.СуммаПоРеализациям) КАК СуммаПоРеализациям

ИЗ

                ЗаказыЗаПериод КАК ЗаказыЗаПериод

                               ПОЛНОЕ СОЕДИНЕНИЕ РеализацииЗаПериод КАК РеализацииЗаПериод

                               ПО ЗаказыЗаПериод.Регистратор = РеализацииЗаПериод.Сделка

 

СГРУППИРОВАТЬ ПО

                ЗаказыЗаПериод.Регистратор,

                РеализацииЗаПериод.Регистратор
Показать
37. Xershi 1535 16.04.20 08:33 Сейчас в теме
(34) когда я писал работать через регистры. Я имел в виду, не то что есть в конфигурации, а сделать новые по своим правилам. Врятли в текущих будет такая связь.

По документам связывать заказы и реализации тоже не получится так как это написали вы.
Должна быть связь каждой строки. А есть ли она?
Если нет, то как и писал сравнивать отдельно заказы и реализации. Или отказаться от реализации и сравнивать только заказы.
2. Константин С. 675 12.04.20 13:20 Сейчас в теме
яБы
1. Запретил ввод только РТУ. Если это именно "Заказ товара" не делается номинально для печатной формы.
2. Разделил процессы утверждения. И все процессы разрешения повесил на Заказы Если упрощенно: наличие товара на складе, можно ли отгружать данному клиенту (долги, сумма заказа). Реализация как фарт списания со склада ТМЦ + долг.
3. С большей вероятностью повесил контроль на Бизнес-Процессы.
4. Соответственно запрет на изменение Заказа если они прошел стадию Утверждения. Товарная часть РТУ = Заказ и ее нельзя менять.
5. Жить только текущим числом.

ну типа такого, завязываться на два вида документа запутаешься, нужно выбрать Главного)
9. Intercititude 12.04.20 21:38 Сейчас в теме
(2)
1. Имеете ввиду, без заказа невозможно создание рту ?
2. Можно подробнее по поводу "разделил процессы утверждения" ?
3. Бизнецс-процессы не очень в таком деле думаю, плюс 8.2
4. Жить текущим числом нереально :)
11. Константин С. 675 12.04.20 23:55 Сейчас в теме
(9)
ну конечно лучше знать чем торгуете и какие подразделения и кто за что отвечает
п.1 Да. Заказом можно многое проверить предварительно. Это актуально если разнесено в датах.
п.2 глян описание в типовых для чего нужны каждый из этих документов. Вот на все эти действия повесить дополнительный контроль. Для примере Заказ может резервировать товаро, добавить что это можно если клинту разрешили отгрузку.
п.3 Никто не мешает поставить 8.3 использовать ее. "Старые" конфигурации счастливо работают на 8.3
п.4 к этому нужно стремиться)
13. Константин С. 675 13.04.20 10:01 Сейчас в теме
(9) зайди на ИТС, открой руководство УТ 11, КА2, ЕРП. почитай как там устроена связка Заказ-Реализация, как работает отгрузка с ордерными складами.
слишком мало инфу что-то советовать, твой код вырван из контекста жизни. По итогу непонятно что именно ты автоматизируешь.
15. Intercititude 13.04.20 17:48 Сейчас в теме
(13) Не знаю, что и сказать. ИТС не шибко поможет думаю, слишком нетиповая база у них.
Просьба от заказчика следующая:
Документ "Согласованная сумма" создаётся на основании служебной записки в жизни для службы безопасности. В слуб. записке указывается сумма и срок, до которого выдаётся разрешение на отгрузку товара.
В связи с этим введена правая граница у документа соглас. сумма в табличной части.
16. Константин С. 675 13.04.20 18:21 Сейчас в теме
(15) на ИТС я тебя отправил, кругозор расширить)))
Документ "Согласованная сумма"

нормальное явление.
А так надо определится и упростить Бизнес-Процессы ввода документов)
35. a_kudaev 225 16.04.20 01:49 Сейчас в теме
Доброго времени суток!

Документ СС создает какие движения? создает записи в регистре сведений?
Если да то в процедуру проведения как Заказа так и Реализации надо добавить проверку на соответствие Вашей логике. Заказы и Реализации при проведении должны делать записи в НОВОМ регистре накопления СС, причем движения Реализации должны проверять реквизит ДокументОснование и если этот реквизит заполнен то запись в регистре накопления СС должна быть с датой основания Реализации. Если "правильно" заполнять этот регистр то проблем при написании процедуры проверки и в частности запроса к регистру СС не будет.
Слишком сложный запрос Вы нарисовали, все может быть проще, конечно если у Вас в промежутке дат проверки не миллион записей, если я правильно понимаю в периоде один документ на каждого контрагента, так что все должно работать быстро!
Если документ СС не делает движений то в запросе для проверки проверяем непосредственно документы СС.
36. Sergex 59 16.04.20 06:55 Сейчас в теме
Второй заход в ту же реку...
У вас документ "Согласованная сумма" фактически устанавливает некий лимит отгрузок по сумме для контрагента. Требуется регистр накопления с видом остатки. Лимит определяется следующими измерениями:
Регистратор (уид лимита),
Дата начала интервала лимита,
Дата окончания интервала лимита,
Контрагент,
Документ расхода

И следующими ресурсами
Нормативная сумма лимита,
Остаток лимита.

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

Например: сделали три документа согласованных сумм:

1 сумма 100 000 на интервал с 1 по 20 число
2 сумма 10 000 на интервал с 5 по 15 число
3 сумма 50 000 с 12 по 25 число

В ситуации когда лимиты еще не использованы - на какую сумму можно будет отгрузить 13 числа? - все просто 100 + 10 + 50 = 160 тысяч, но все не так однозначно если лимиты частично погашены причем оформление операций задним числом не запрещено.

Например 1 лимит погашен на 90 000 15 числом, 2 лимит свободен, а 3 лимит погашен полностью 14 числом, тогда все будет зависеть от архитектуры которой мы фиксируем движения расхода по лимитам. Вообще в казначействе - малым аналогом которого является данная модель имеется ограничение предписывающее лимитировать сумму на пересечении аналитик только одной записью.

Итак проще будет если вам удастся договорится что периоды лимитов не могут пересекаться в разрезе контрагентов. Тогда вам надо будет добавить движение по регистру лимитов для расходующего лимит документа. И тут тоже есть нюанс - следует определится таковым документом будет заказ или заказ и реализация. Технически, УТ позволяет отгружать в реализации оформленной по заказу на сумму, превышающую заказ, с определенными заморочками, но позволяет.
Однако вы можете сделать систему менее неопределенной если запретите это явление. В противном случае надо усложнять механику регистрации движений.

Например, при проведении заказ пишет движение расхода по найденным аналитикам лимита указывая себя в измерении документ расхода, реализация при проведении если она оформлена на основании заказа пишет движение прихода по найденным аналитика лимита указывая заказ в измерении документ расхода и затем движение расхода по найденным аналитикам лимита указывая уже в измерении документ расхода себя.

Проверка превышения лимита может быть реализована в процедуре контроля - ПроведениеСерверУТ.ВыполнитьКонтрольРезультатовПроведения куда следует добавить код проверяющий остаток по найденным аналитика лимита без учета измерения документ расхода. И если остаток стал отрицательным то обломиться, с сообщением на сколько и какой лимит превышен.

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

И никакими регистрами сведений вы не обойдетесь если не затеете писать для них обвязку так чтобы они работали как регистры накопления :)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот