|
Списание в запросе. Именно списание! | ☑ | ||
---|---|---|---|---|
0
breezee
24.06.16
✎
15:43
|
У меня есть свернутые данные по статье затрат. И есть развернутые данные по контрагенту. Статья тоже указыватся. В итоге - мне нужно выводить суммы по контрагентам, пока суммы по статьям не закроются. Если сумма меньше итоговой - посдставляем служебного контрагента. Больше быть не может.
Т.е. это выглядит примерно так: Свернутая таблица: Статья Сумма ст1 1000р Развернутая таблица Статья Контрагенты Сумма ст1 контр1 500р ст1 контр2 400р ст1 СлужебныйКонтр 100р реально ли вообще вывести последнюю строку? Да, постобработкой я бы за минуту решил эту проблему, но желательно это сделать запросом. Вот сам запрос ВЫБРАТЬ СУММА(ЕСТЬNULL(ХозрасчетныйОборотыДтКт.СуммаОборот, 0)) КАК СуммаСписатьПоСтатье, ХозрасчетныйОборотыДтКт.СубконтоКт2 ПОМЕСТИТЬ вт1 ИЗ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт( &НачалоПериода, &КонецПериода, , СчетДт В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Счет90_70)), , СчетКт В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ОбщехозяйственныеРасходы)), , Организация = &Организация И СубконтоКт2 В (ВЫБРАТЬ СтатьиЗатрат.Ссылка ИЗ Справочник.СтатьиЗатрат КАК СтатьиЗатрат ГДЕ СтатьиЗатрат.Наименование В ("Информационные услуги"))) КАК ХозрасчетныйОборотыДтКт СГРУППИРОВАТЬ ПО ХозрасчетныйОборотыДтКт.СубконтоКт2 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(ЕСТЬNULL(ХозрасчетныйОборотыДтКт.СуммаОборот, 0)) КАК СуммаПоКонтрагенту, ХозрасчетныйОборотыДтКт.СубконтоДт2, ХозрасчетныйОборотыДтКт.СубконтоКт1 ПОМЕСТИТЬ вт2 ИЗ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачалоПериода, &КонецПериода, , СчетДт В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ОбщехозяйственныеРасходы)), , СчетКт В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПоставщикамиИПодрядчиками), ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСРазнымиДебиторамиИКредиторами)), , Организация = &Организация) КАК ХозрасчетныйОборотыДтКт СГРУППИРОВАТЬ ПО ХозрасчетныйОборотыДтКт.СубконтоДт2, ХозрасчетныйОборотыДтКт.СубконтоКт1 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(ЕСТЬNULL(ХозрасчетныйОборотыДтКт.СуммаОборот, 0)) КАК ИтогВторойТаблицы ПОМЕСТИТЬ ВтораяТаблица ИЗ вт1 КАК вт1 ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачалоПериода, &КонецПериода, , СчетДт В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ОбщехозяйственныеРасходы)), , СчетКт В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПоставщикамиИПодрядчиками), ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСРазнымиДебиторамиИКредиторами)), , Организация = &Организация) КАК ХозрасчетныйОборотыДтКт ПО вт1.СубконтоКт2 = ХозрасчетныйОборотыДтКт.СубконтоДт2 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ вт1.СубконтоКт2, вт2.СубконтоКт1, ВЫБОР КОГДА вт1.СуммаСписатьПоСтатье - вт2.СуммаПоКонтрагенту > 0 ТОГДА вт1.СуммаСписатьПоСтатье - вт2.СуммаПоКонтрагенту ИНАЧЕ 0 КОНЕЦ КАК Поле1, вт2.СуммаПоКонтрагенту, вт1.СуммаСписатьПоСтатье, ВтораяТаблица.ИтогВторойТаблицы ИЗ вт1 КАК вт1 ЛЕВОЕ СОЕДИНЕНИЕ вт2 КАК вт2 ПО вт1.СубконтоКт2 = вт2.СубконтоДт2, ВтораяТаблица КАК ВтораяТаблица В итоге получается следующие данные СубконтоКт2 СубконтоКт1 СуммаСписатьМинутТекКонтрагент СуммаПоКонтрагенту СуммаСписатьПоСтатье ИтогВторойТаблицы Статья1 Контрагент1 291 178,81 11 923,74 303 102,55 303 102,55 Статья1 Контрагент1 301 052,55 2 050 303 102,55 303 102,55 Статья1 Контрагент1 302 594,08 508,47 303 102,55 303 102,55 Статья1 Контрагент1 210 636,46 92 466,09 303 102,55 303 102,55 Статья1 Контрагент1 106 948,3 196 154,25 303 102,55 303 102,55 |
|||
1
Господин ПЖ
24.06.16
✎
15:45
|
fetch в 1с не завезли
|
|||
2
Elf_80_lvl
24.06.16
✎
15:48
|
Нет сынок, это фантастика (с)
|
|||
3
breezee
24.06.16
✎
15:48
|
(1) Это значит что нет) Мне посоветовали поставить свзязи по Контрагент>Контрагент, и НАСТОЯТЕЛЬНО рекомендовали так не делать, потому что это не оптимально. В любом случае - это не работает
|
|||
4
floody
24.06.16
✎
15:48
|
Распределение по фифо в запросе где-то видел, емнип. Но это изврат имхо.
|
|||
5
breezee
24.06.16
✎
15:53
|
Вроде нашел пример по списанию. Но пока как-то сложновато. Сам пример http://catalog.mista.ru/public/99207/
Буду думать |
|||
6
GANR
24.06.16
✎
15:57
|
(0) Можно... но не нужно. Если отчет на СКД - лучше уж в набор данных это дело засунуть.
|
|||
7
breezee
24.06.16
✎
16:06
|
(6) У меня запрос в Консолидации, это муторно, прикручивать еще что-то, хотелось бы получить всё в запросе
|
|||
8
mistеr
24.06.16
✎
16:16
|
(0) В СКД можно. Тут нужен нарастающий итог, больше ничего.
|
|||
9
mistеr
24.06.16
✎
16:19
|
С другой стороны - можно сумму для служебного контрагента вычислить отдельно и прицепить объединением. Если конечно уверен, что "больше быть не может".
|
|||
10
Necessitudo
24.06.16
✎
16:22
|
Так и в запросе можно. Но да, Контрагент > Контрагент.
|
|||
11
breezee
24.06.16
✎
16:26
|
(10) Как это вообще работает, не могу понять, "Контрагент> Контрагент"
|
|||
12
mistеr
24.06.16
✎
16:41
|
(11) Это работает медленно. Но для расширения кругозора попробуй:
ВЫБРАТЬ Валюты.Ссылка КАК Ссылка, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Валюты1.Ссылка) КАК ЧислоСтрокСверху ИЗ Справочник.Валюты КАК Валюты ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Валюты КАК Валюты1 ПО Валюты.Ссылка <= Валюты1.Ссылка СГРУППИРОВАТЬ ПО Валюты.Ссылка УПОРЯДОЧИТЬ ПО Ссылка АВТОУПОРЯДОЧИВАНИЕ |
|||
13
del123
24.06.16
✎
16:42
|
Берешь, сворачиваешь развернутую таблицу по статьям, без служебного контрагента, результат во временную таблицу.
Потом берешь таблицу по статьям, соединяешь с временной таблицей, в ней добавляешь поля статья, служебный контрагент и сумма = сумма из таблицы по статьям - сумма из вр. таблицы. и все это во вторую временную таблицу Потом снова берешь развернутую таблицу по статьям и добавляешь к ней вторую свернутую таблицу. |
|||
14
PCcomCat
24.06.16
✎
16:51
|
Это распределение по какой-то пропорции?
|
|||
15
breezee
24.06.16
✎
17:02
|
(14) Нет, надо полностью закрыть, без пропорций. Если кратко - есть рассчеты на одних счетах с контрагентами по каким-то статьям затрат, на других те же самые рассчеты, только свернутые, контрагенты там теряются и сумма может другой выйти. Мне надо в первых счетах взять контрагентов из вторых и искусственно "дозакрыть" не закрывшуюся сумму. Я уже пол дня над этим бьюсь и еще не знаю сколько буду бится, блин
|
|||
16
PCcomCat
24.06.16
✎
17:05
|
1. Получить итог по статьям затрат по развернутой по контрагентам таблице.
2. Соединить свернутые данные по Статьям затрат с таблицей из 1. (Левое соединение по статье). Результат: Статья, сумма статьи, итог по контрагентам по статье, разница между сумма статьи и итог по контрагентам по статье. 3. Затем объединение выборки из таблицы с контрагентами и таблицы из 2 с загадочным контрагентом и суммой разницы . Как-то так. |
|||
17
breezee
24.06.16
✎
17:09
|
Блин, у меня даже не получается нарастающий итог выбрать. Подскажите, где я накосячил? Вот запрос
ВЫБРАТЬ СУММА(ЕСТЬNULL(ХозрасчетныйОборотыДтКт.СуммаОборот, 0)) КАК СуммаПоКонтрагенту, ХозрасчетныйОборотыДтКт.СубконтоКт1, ХозрасчетныйОборотыДтКт.Период ПОМЕСТИТЬ вт2 ИЗ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт( &НачалоПериода, &КонецПериода, Запись, СчетДт В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ОбщехозяйственныеРасходы)), , СчетКт В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПоставщикамиИПодрядчиками), ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСРазнымиДебиторамиИКредиторами)), , Организация = &Организация И Субконтодт2 В (ВЫБРАТЬ СтатьиЗатрат.Ссылка ИЗ Справочник.СтатьиЗатрат КАК СтатьиЗатрат ГДЕ СтатьиЗатрат.Наименование В ("Информационные услуги"))) КАК ХозрасчетныйОборотыДтКт СГРУППИРОВАТЬ ПО ХозрасчетныйОборотыДтКт.СубконтоКт1, ХозрасчетныйОборотыДтКт.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(ЕСТЬNULL(ХозрасчетныйОборотыДтКт.СуммаОборот, 0)) КАК СуммаПоКонтрагенту, ХозрасчетныйОборотыДтКт.СубконтоКт1, ХозрасчетныйОборотыДтКт.Период ПОМЕСТИТЬ вт2Нараст ИЗ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт( &НачалоПериода, &КонецПериода, Запись, СчетДт В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ОбщехозяйственныеРасходы)), , СчетКт В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПоставщикамиИПодрядчиками), ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСРазнымиДебиторамиИКредиторами)), , Организация = &Организация И Субконтодт2 В (ВЫБРАТЬ СтатьиЗатрат.Ссылка ИЗ Справочник.СтатьиЗатрат КАК СтатьиЗатрат ГДЕ СтатьиЗатрат.Наименование В ("Информационные услуги"))) КАК ХозрасчетныйОборотыДтКт СГРУППИРОВАТЬ ПО ХозрасчетныйОборотыДтКт.СубконтоКт1, ХозрасчетныйОборотыДтКт.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(вт2Нараст.СуммаПоКонтрагенту) КАК СуммаПоКонтрагенту1, вт2Нараст.СубконтоКт1 ИЗ вт2 КАК вт2 ЛЕВОЕ СОЕДИНЕНИЕ вт2Нараст КАК вт2Нараст ПО вт2.Период >= вт2Нараст.Период И вт2.СубконтоКт1 = вт2Нараст.СубконтоКт1 СГРУППИРОВАТЬ ПО вт2Нараст.СубконтоКт1 |
|||
18
PCcomCat
24.06.16
✎
17:13
|
ВЫБРАТЬ
СУММА(ЕСТЬNULL(ХозрасчетныйОборотыДтКт.СуммаОборот, 0)) КАК СуммаПоКонтрагенту, ХозрасчетныйОборотыДтКт.СубконтоКт1, ХозрасчетныйОборотыДтКт.СубконтоДт2 КАК СтатьяЗатрат ПОМЕСТИТЬ вт2 ИЗ ..... ; ВЫБРАТЬ СУММА(вт2.СуммаПоКонтрагенту), вт2.СтатьяЗатрат ПОМЕСТИТЬ ИтогиПоСтатьямКонтрагентов ИЗ вт2 КАК вт2 СГРУППИРОВАТЬ ПО вт2.СтатьяЗатрат |
|||
19
PCcomCat
24.06.16
✎
17:14
|
ХозрасчетныйОборотыДтКт.СубконтоКт1, = ХозрасчетныйОборотыДтКт.СубконтоКт1 КАК Контрагент,
|
|||
20
HardBall
24.06.16
✎
17:21
|
У GROOVY подсмотри в бложике.
|
|||
21
PCcomCat
24.06.16
✎
17:24
|
ВЫБРАТЬ
вт1.СубконтоКт2 Как Статья, вт1.СуммаСписатьПоСтатье, ЕстьNULL(ИтогиПоСтатьямКонтрагентов.СуммаПоКонтрагенту) КАК СуммаПоКонтрагенту, вт1.СуммаСписатьПоСтатье - ЕстьNULL(ИтогиПоСтатьямКонтрагентов.СуммаПоКонтрагенту) как разница ПОМЕСТИТЬ ТаблицаРазницы ИЗ вт1 КАК вт1 Левое соединение ИтогиПоСтатьямКонтрагентов как ИтогиПоСтатьямКонтрагентов по вт1.СубконтоКт2=ИтогиПоСтатьямКонтрагентов.СтатьяЗатрат ГДЕ НЕ (вт1.СуммаСписатьПоСтатье - ЕстьNULL(ИтогиПоСтатьямКонтрагентов.СуммаПоКонтрагенту)) = 0 ; Выбрать вт2.Контрагент, вт2.СтатьяЗатрат, вт2.СуммаПоКонтрагенту ИЗ вт2 как вт2 Объединить все Выбрать &ТвойКонтрагент, ИтогиПоСтатьямКонтрагентов.СтатьяЗатрат, ИтогиПоСтатьямКонтрагентов.Разница ИЗ ИтогиПоСтатьямКонтрагентов как ИтогиПоСтатьямКонтрагентов Рукописно, ну, в общем, разберешься. |
|||
22
GROOVY
24.06.16
✎
17:24
|
http://1c.chistov.pro/2014/03/blog-post.html
А вот и я. |
|||
23
Defender aka LINN
24.06.16
✎
19:25
|
Где-то есть люди, которые до колик в животе боятся запросов, тут у нас пациент с обратной фобией... Может их как-то генетически скрестить?
|
|||
24
breezee
24.06.16
✎
19:56
|
Всем спасибо! Сейчас посмотрю и попробую, что написали! (23) Выше писал что запросы вкручиваются в консолидацию, не удобно постобработку делать
|
|||
25
breezee
24.06.16
✎
21:06
|
(21) Проверить не могу, база не работает. Спасибо, вроде понял. Я же правильно понимаю логику:
1)Получаем недостающую сумму (если её не хватает) путем объединения двух таблиц - в 1 - реальные суммы, во второй - суммы, которых не хватает 2)Полученную таблицу объединяем по статье затрат с таблицей свернутой, при чем "ГДЕ НЕ (вт1.СуммаСписатьПоСтатье - ЕстьNULL(ИтогиПоСтатьямКонтрагентов.СуммаПоКонтрагенту)) = 0" - не даст уйти за рамки статьи, т.к. "СуммаПоКонтрагенту" - накопленная сумма. И все данные, где накопленная сумма больше нужной - уберутся. Хотя, я бы наверное сравнивал ГДЕ НЕ (вт1.СуммаСписатьПоСтатье > ЕстьNULL(ИтогиПоСтатьямКонтрагентов.СуммаПоКонтрагенту)) 3)Все недатстающие данные обрезаны в п.1, все ненужные убраны в п.2 - теперь просто вывести. Я все правильно понял? Спасибо большое еще раз!!! |
|||
26
breezee
24.06.16
✎
21:16
|
(22) Сколько раз вы отвечали, ни разу в профиль не заходил, хотя по вашим курсам все время готовился. Абсолютно внезапно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |