![]() |
|
v7: Выгрузка из 7.7 ПУБ | ☑ | ||
---|---|---|---|---|
0
apostal147
07.02.16
✎
20:09
|
С семёркой я не очень дружен, но нужно тут было поправить правила для выгрузки из ПУБа в УПП. Выгружать нужно остатки по счёту 76АВ в разрезе счетов фактур. Но так как на этом счете субконто только контрагенты получается не очень красиво. В итоге родился кривенький алгоритм, реализованный ещё более кривенькими руками. Проблема в том, что алгоритм работает оочень медленно, но т.к. в семёрке я не особо разбираюсь, не могу понять где я накосячил. Помогите пожалуйста разобраться.
Вот такой вот код: Ит = СоздатьОбъект("БухгалтерскиеИтоги"); Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты); Ит.ВключатьСубсчета(0,); Ит.ВыполнитьЗапрос( , ДатаКонцаПериода, "76.АВ", , 1, , 5); Ит.ВыбратьСчета(); Пока Ит.ПолучитьСчет()=1 Цикл Ит.ВыбратьСубконто(1); Пока Ит.ПолучитьСубконто(1)=1 Цикл Контрагент = Ит.Субконто(1); Если (Ит.СКД()>0) Тогда ИтоговаяСумма = Ит.СКД(); Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(ЗаписиКнигиПрод) |Период с ДатаНачалаРаботы по ДатаКонцаПериода; |ТипСчетаФактуры = Регистр.КнигаПродаж.ТекущийДокумент.СчетФактура.Тип; |СчетФактура = Регистр.КнигаПродаж.СчетФактура; |СтавкаНДС = Регистр.КнигаПродаж.СтавкаНДС; |БазаНДС = Регистр.КнигаПродаж.БазаНДС; |НДС = Регистр.КнигаПродаж.НДС; |Покупатель = Регистр.КнигаПродаж.ТекущийДокумент.СчетФактура.Контрагент; | |Функция СуммаРубКонОст = Сумма(БазаНДС); |Функция СуммаНДСКонОст = Сумма(НДС); | |Группировка ТипСчетаФактуры; |Группировка СчетФактура Упорядочить по СчетФактура.ДатаДок; |Группировка СтавкаНДС без групп; | |Условие (ТипСчетаФактуры = Перечисление.ТипыСчетовФактур.Аванс); |Условие (Покупатель = Контрагент); |"; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Сообщить("Не удалось выполнить запрос по регистру книга продаж !"); КонецЕсли; ТаблицаСтавок = СоздатьОбъект("ТаблицаЗначений"); Пока Запрос.Группировка("ТипСчетаФактуры") = 1 Цикл Если ИтоговаяСумма <= 0 Тогда Прервать; КонецЕсли; Пока Запрос.Группировка("СчетФактура", -1) = 1 Цикл Если ИтоговаяСумма <= 0 Тогда Прервать; КонецЕсли; Пока Запрос.Группировка("СтавкаНДС") = 1 Цикл Если (Запрос.СуммаРубКонОст = 0) и (Запрос.СуммаНДСКонОст = 0) Тогда Продолжить; КонецЕсли; СФ = Запрос.СчетФактура; Если ИтоговаяСумма <= 0 Тогда Прервать; КонецЕсли; |
|||
1
zenik
07.02.16
✎
20:17
|
А зачем обращение к БИ, а потом запрос... и все это между собой никак не связано. Убрать все что до запроса, все равно все авансовые СФ в запросе получаешь.
|
|||
2
apostal147
07.02.16
✎
20:57
|
(1) Проблема в том, что мне нужны остатки. Отбирая только по запросом по СФ я не узнаю остатки.
|
|||
3
zenik
07.02.16
✎
23:20
|
Регистр "КнигаПродаж" оборотный или остатки? Если остатки, то в запрос:
|Функция РубКонОст = КонОст(БазаНДС); |Функция НДСКонОст = КонОст(НДС); |
|||
4
apostal147
07.02.16
✎
23:56
|
(3) не, регистр оборотный
|
|||
5
vip03
08.02.16
✎
06:17
|
1. Запрос из цикла убрать.
2. В запросе Группировка ТипСчетаФактуры зачем вообще? |
|||
6
vip03
08.02.16
✎
06:20
|
|Период с ДатаНачалаРаботы по ДатаКонцаПериода;
|ТипСчетаФактуры = Регистр.КнигаПродаж.ТекущийДокумент.СчетФактура.Тип; |СчетФактура = Регистр.КнигаПродаж.СчетФактура; |СтавкаНДС = Регистр.КнигаПродаж.СтавкаНДС; |БазаНДС = Регистр.КнигаПродаж.БазаНДС; |НДС = Регистр.КнигаПродаж.НДС; |Покупатель = Регистр.КнигаПродаж.ТекущийДокумент.СчетФактура.Контрагент; | |Функция СуммаРубКонОст = Сумма(БазаНДС); |Функция СуммаНДСКонОст = Сумма(НДС); | |Группировка Покупатель; |Группировка СчетФактура Упорядочить по СчетФактура.ДатаДок; |Группировка СтавкаНДС без групп; | |Условие (ТипСчетаФактуры = Перечисление.ТипыСчетовФактур.Аванс); |Условие (Покупатель В СпКонтрагент); |"; СпКонтрагент формируешь ЗапросомБИ. |
|||
7
apostal147
08.02.16
✎
10:08
|
(6) Да, очень хорошая идея, только хранить нужно ещё сумму по контрагенту, думаю можно сделать через ТЗ
|
|||
8
apostal147
08.02.16
✎
20:36
|
(6) Спасибо, всё классно получилось!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |