Имя: Пароль:
1C
1С v8
Сторнирование всех остатков по регистру Бухгалтерии
0 denis200
 
17.10.11
13:41
Стоит учебная задача: Для типовой БП написать обработку, которая сторнирует остатки по регистру бухгалтерии Хозрасчетный.

Может кто-нибудь даст ссылку на такую обработку?
1 butterbean
 
17.10.11
13:42
задача же учебная - учись давай
2 Maxus43
 
17.10.11
13:43
5 минут писать простенькую... запрос по остаткам и в запросе самом сумму отрицательную, потом бух справку создаём да и туда прям всю таблицу записываем
3 denis200
 
17.10.11
13:51
Вот как например с подразделениями быть когда их в дебет записывать а когда в кредит.
4 Maxus43
 
17.10.11
13:52
(3) понятие сторно понятно вам? Дт и Кт местами менять не надо при сторно
5 denis200
 
17.10.11
13:54
предположим
орг а
подр б
сумма деб = 4
кол-во кред =3
--------------------
куда пихать подразделение?
6 denis200
 
17.10.11
13:55
я думаю всё через документ операциябухпровести
7 denis200
 
17.10.11
13:55
подразделение не балансовое измерение регистра бухгалтерии
8 catena
 
17.10.11
13:56
"Сторнирует остатки" - сторнировать можно проводки...
9 denis200
 
17.10.11
13:57
Ну условно сторнирование, понятно что имеется в виду обнуление.
10 catena
 
17.10.11
14:00
(9)Собираешь остатки по счетам в разрезе всей аналитики. Берешь получившуюся таблицу, сажаешь в проводки, все суммы с "-".
11 catena
 
17.10.11
14:00
эм, чере 000 счет :)
12 catena
 
17.10.11
14:00
*череЗ
13 denis200
 
17.10.11
14:02
(12) посмотри на (5) напиши проводки для этих остатков
14 butterbean
 
17.10.11
14:03
(13) делай проводки отдельно для суммы Дт и количества Кт
15 catena
 
17.10.11
14:04
(13)Да там чушь какая-то.
Откуда взял, туда и пихать. Если это разрез учета - то он не относится к дт-кт, он на всю проводку разом. Если это аналитика, то она и в остатках принадлежит дт или кт.
16 butterbean
 
17.10.11
14:04
(14) хотя как может получится ситуация из (5) я даже не представляю
17 Aleksey
 
17.10.11
14:06
(5) У вас косяк в учете
18 Starhan
 
17.10.11
14:07
(5) ищешь в бп пример опредления использования учета по подразделением на счете. И бессовестно копируешь. Если не задано отдельно подразделение для Кт и ДТ то используешь подразделение в обоих счетах если на них задан учет по подразделеню.
19 НЕА123
 
17.10.11
14:07
вар.1
взять всю таблицу оборотов(от РХ), добавить такую-же, с обратными знаками ресурсов. вроде все должно сторнироваться.
или я что-то не понял?
20 Starhan
 
17.10.11
14:08
(18)  + если по условию задачи тебе обязательно надо учесть подразделение
21 НЕА123
 
17.10.11
14:10
>кол-во кред =3
из (5)
дык то ж забаланс. оно и не надо.
22 catena
 
17.10.11
14:11
(19)Ой, а если их много?
23 НЕА123
 
17.10.11
14:11
+(21)
хотя... хм...
24 Starhan
 
17.10.11
14:13
(21) счет кредит с колиественным учетом поэтому по нему есть количество 3. Сумма по дебету = 4 и по кредету = 4.
25 НЕА123
 
17.10.11
14:15
не. все нормально в (19).
26 Starhan
 
17.10.11
14:18
(25) мои скудные телепатическии способности, и весь опыт дедуктивного метода основанный на рассказах Конан-Дойля, подсказываетчто ТС надо не все остаткти сторнировать :). а опредленные.
27 denis200
 
17.10.11
14:32
стр = НЗ.Добавить();
там 3 субконто как к ним обращаться?
28 Aloex
 
17.10.11
14:34
(27) Новый Запрос.
29 unregistered
 
17.10.11
14:34
(27) СубконтоДт И СубконтоКт - это соответствия. Ключ соответствия - вид субконто. Значение соответствия - значение субконто.
30 denis200
 
17.10.11
14:36
Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ХозрасчетныйОстатки.Счет КАК Счет,
   |    ХозрасчетныйОстатки.Субконто1 КАК Субконто1,
   |    ХозрасчетныйОстатки.Субконто2 КАК Субконто2,
   |    ХозрасчетныйОстатки.Субконто3 КАК Субконто3,
   |    ХозрасчетныйОстатки.Организация КАК Организация,
   |    ХозрасчетныйОстатки.Валюта КАК Валюта,
   |    ХозрасчетныйОстатки.Подразделение КАК Подразделение,
   |    ЕСТЬNULL(ХозрасчетныйОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
   |    ЕСТЬNULL(ХозрасчетныйОстатки.ВалютнаяСуммаОстаток, 0) КАК ВалютнаяСуммаОстаток,
   |    ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
   |    ЕСТЬNULL(ХозрасчетныйОстатки.СуммаНУОстаток, 0) КАК СуммаНУОстаток,
   |    ЕСТЬNULL(ХозрасчетныйОстатки.СуммаПРОстаток, 0) КАК СуммаПРОстаток,
   |    ЕСТЬNULL(ХозрасчетныйОстатки.СуммаВРОстаток, 0) КАК СуммаВРОстаток
   |ИЗ
   |    РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, , , ) КАК ХозрасчетныйОстатки
   |ИТОГИ
   |    СУММА(СуммаОстаток),
   |    СУММА(ВалютнаяСуммаОстаток),
   |    СУММА(КоличествоОстаток),
   |    СУММА(СуммаНУОстаток),
   |    СУММА(СуммаПРОстаток),
   |    СУММА(СуммаВРОстаток)
   |ПО
   |    Организация,
   |    Подразделение,
   |    Валюта,
   |    Счет,
   |    Субконто1,
   |    Субконто2,
   |    Субконто3";
   Запрос.УстановитьПараметр("Дата", ТекущаяДата());
   ВыборкаОрганизаций = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   Пока ВыборкаОрганизаций.Следующий() Цикл
       НовДок = Документы.ОперацияБух.СоздатьДокумент();
       НовДок.Дата = ТекущаяДата();
       НовДок.Организация = ВыборкаОрганизаций.Организация;
       НовДок.Записать();
       НЗ = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
       НЗ.Отбор.Регистратор.Установить(НовДок);
       ВыборкаПодразделений = ВыборкаОрганизаций.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
       Пока ВыборкаПодразделений.Следующий() Цикл
           ВыборкаВалюта = ВыборкаПодразделений.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
           Пока ВыборкаВалюта.Следующий() Цикл
               ВыборкаСчет = ВыборкаВалюта.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
               Пока ВыборкаСчет.Следующий() Цикл
                   ВыборкаСубконто1 = ВыборкаСчет.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                   Пока ВыборкаСубконто1.Следующий() Цикл
                       ВыборкаСубконто2 = ВыборкаСубконто1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                       Пока ВыборкаСубконто2.Следующий() Цикл
                           ВыборкаСубконто3 = ВыборкаСубконто2.Выбрать();
                           Пока ВыборкаСубконто3.Следующий() Цикл
                               стр = НЗ.Добавить();
                               Если ВыборкаСубконто3.СуммаОстаток > 0 Или ВыборкаСубконто3.ВалютнаяСуммаОстаток > 0 Или ВыборкаСубконто3.СуммаНУОстаток > 0
                                   Или ВыборкаСубконто3.СуммаПРОстаток > 0 Или ВыборкаСубконто3.СуммаВРОстаток > 0 Или ВыборкаСубконто3.КоличествоОстаток > 0 Тогда
                                   стр.ВалютаДт = ВыборкаСубконто3.Валюта;
                                   стр.ВалютнаяСуммаДт = - ВыборкаСубконто3.ВалютнаяСуммаОстаток;
                                   стр.КоличествоДт = - ВыборкаСубконто3.КоличествоОстаток;
                                   стр.Организация = ВыборкаСубконто3.Организация;
                                   стр.ПодразделениеДт = ВыборкаСубконто3.Подразделение;
                                   стр.Регистратор = НовДок;
                                   //стр.СубконтоДт
                               КонецЕсли;
                               
                           КонецЦикла;
                       КонецЦикла;
                   КонецЦикла;
               КонецЦикла;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;

там 3 субконто надо придумать, как к ним обращаться.
31 unregistered
 
17.10.11
14:36
А вообще в типовой БП есть процедура в общих модулях УстановитьСубконто(), которая позволяет устанавливать значение субконто по видам субконто или по номеру субконто на счете.
32 butterbean
 
17.10.11
14:44
(30) нафига тут ИТОГИ??
33 denis200
 
17.10.11
14:49
(32) Чтобы перебирать циклы в циклах я же всё через документ операция сторнирую
34 butterbean
 
17.10.11
14:58
(33) это из большой любви к циклам в циклах?? тут одного итога по организации достаточно
35 denis200
 
17.10.11
15:04
(34) Спасибо, ты прав, сразу не сообразил.
36 Evpatiy
 
17.10.11
15:11
(ОФФ) эмммм..... Только у меня мозг не смог сопоставить инфу из личной карточки ТС с вопросом?
37 denis200
 
17.10.11
15:14
(36) У тебя тупой мозг.
38 Starhan
 
17.10.11
15:22
еще имхо проверка на >0  после вирт. таблицы остатки лишняя, нулевые остатки там не хранятся.

Значит все таки все нужно сторнировать.
39 denis200
 
17.10.11
15:30
(38) Ты значешь что такое Сумма?
Это сумма.дт - сумма.кт
40 denis200
 
17.10.11
15:30
(39) если больше 0 всё по дт сторнирую если меньше то по кредиту
41 hhhh
 
17.10.11
15:34
(40) можно и минусовую по дебету - это там по барабану.
42 Evpatiy
 
17.10.11
15:40
модераторы (37) уже прочитали?
43 denis200
 
17.10.11
15:48
И (36) заодно пусть прочитают. (36) спровоцировало (37). Вместо того чтобы обсуждать вопрос стал обсуждать мой уровень. И сопоставлять с карточкой.
44 Соло
 
17.10.11
15:53
Для корректного продолжения работы после обнуления нужно учитывать активность/пассивность счета. Итоги нужно брать развернутые, а не дт-кт. Ну и записывать отдельную операцию по каждому счету (можно и суб). Для уверенности можно (по мне даже лучше) обнулять количество и сумму отдельно (нужно ещё не забыть про налоговый учет: ВР, ПР)
45 denis200
 
17.10.11
16:11
Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ХозрасчетныйОстатки.Счет КАК Счет,
   |    ХозрасчетныйОстатки.Субконто1 КАК Субконто1,
   |    ХозрасчетныйОстатки.Субконто2 КАК Субконто2,
   |    ХозрасчетныйОстатки.Субконто3 КАК Субконто3,
   |    ХозрасчетныйОстатки.Организация КАК Организация,
   |    ХозрасчетныйОстатки.Валюта КАК Валюта,
   |    ХозрасчетныйОстатки.Подразделение КАК Подразделение,
   |    ЕСТЬNULL(ХозрасчетныйОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
   |    ЕСТЬNULL(ХозрасчетныйОстатки.ВалютнаяСуммаОстаток, 0) КАК ВалютнаяСуммаОстаток,
   |    ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
   |    ЕСТЬNULL(ХозрасчетныйОстатки.СуммаНУОстаток, 0) КАК СуммаНУОстаток,
   |    ЕСТЬNULL(ХозрасчетныйОстатки.СуммаПРОстаток, 0) КАК СуммаПРОстаток,
   |    ЕСТЬNULL(ХозрасчетныйОстатки.СуммаВРОстаток, 0) КАК СуммаВРОстаток
   |ИЗ
   |    РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, , , ) КАК ХозрасчетныйОстатки
   |ИТОГИ
   |    СУММА(СуммаОстаток),
   |    СУММА(ВалютнаяСуммаОстаток),
   |    СУММА(КоличествоОстаток),
   |    СУММА(СуммаНУОстаток),
   |    СУММА(СуммаПРОстаток),
   |    СУММА(СуммаВРОстаток)
   |ПО
   |    Организация";
   Запрос.УстановитьПараметр("Дата", ТекущаяДата());
   ВыборкаОрганизаций = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   Пока ВыборкаОрганизаций.Следующий() Цикл
       НовДок = Документы.ОперацияБух.СоздатьДокумент();
       НовДок.Дата = ТекущаяДата();
       НовДок.Организация = ВыборкаОрганизаций.Организация;
       НовДок.Записать();
       НЗ = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
       НЗ.Отбор.Регистратор.Установить(НовДок);
       Выборка = ВыборкаОрганизаций.Выбрать();
       Пока Выборка.Следующий() Цикл
           стр = НЗ.Добавить();
           Если Выборка.СуммаОстаток > 0 Или Выборка.ВалютнаяСуммаОстаток > 0 Или Выборка.СуммаНУОстаток > 0
           Или Выборка.СуммаПРОстаток > 0 Или Выборка.СуммаВРОстаток > 0 Или Выборка.КоличествоОстаток > 0 Тогда
               стр.ВалютаДт = Выборка.Валюта;
               стр.ВалютнаяСуммаДт = - Выборка.ВалютнаяСуммаОстаток;
               стр.КоличествоДт = - Выборка.КоличествоОстаток;
               стр.Организация = Выборка.Организация;
               стр.ПодразделениеДт = Выборка.Подразделение;
               стр.Регистратор = НовДок;
               БухгалтерскийУчет.УстановитьСубконто(Выборка.Счет, стр.СубконтоДт, 1, Выборка.Субконто1, , , Выборка.Счет.ВидыСубконтоСчета);
               БухгалтерскийУчет.УстановитьСубконто(Выборка.Счет, стр.СубконтоДт, 2, Выборка.Субконто2, , , Выборка.Счет.ВидыСубконтоСчета);
               БухгалтерскийУчет.УстановитьСубконто(Выборка.Счет, стр.СубконтоДт, 3, Выборка.Субконто3, , , Выборка.Счет.ВидыСубконтоСчета);
               стр.Сумма = - Выборка.СуммаОстаток;
               стр.СуммаВРДт = - Выборка.СуммаВРОстаток;
               стр.СуммаНУДт = - Выборка.СуммаНУОстаток;
               стр.СуммаПРДт = - Выборка.СуммаПРОстаток;
               стр.СчетДт = Выборка.Счет;
           Иначе
               стр.ВалютаКт = Выборка.Валюта;
               стр.ВалютнаяСуммаКт = - Выборка.ВалютнаяСуммаОстаток;
               стр.КоличествоКт = - Выборка.КоличествоОстаток;
               стр.Организация = Выборка.Организация;
               стр.ПодразделениеКт = Выборка.Подразделение;
               стр.Регистратор = НовДок;
               БухгалтерскийУчет.УстановитьСубконто(Выборка.Счет, стр.СубконтоКт, 1, Выборка.Субконто1, , , Выборка.Счет.ВидыСубконтоСчета);
               БухгалтерскийУчет.УстановитьСубконто(Выборка.Счет, стр.СубконтоКт, 2, Выборка.Субконто2, , , Выборка.Счет.ВидыСубконтоСчета);
               БухгалтерскийУчет.УстановитьСубконто(Выборка.Счет, стр.СубконтоКт, 3, Выборка.Субконто3, , , Выборка.Счет.ВидыСубконтоСчета);
               стр.Сумма = - Выборка.СуммаОстаток;
               стр.СуммаВРКт = - Выборка.СуммаВРОстаток;
               стр.СуммаНУКт = - Выборка.СуммаНУОстаток;
               стр.СуммаПРКт = - Выборка.СуммаПРОстаток;
               стр.СчетКт = Выборка.Счет;
           КонецЕсли;                                
       КонецЦикла;
   КонецЦикла;
Нормально?
46 denis200
 
17.10.11
17:00
Мне пишет не установлен отбор по регистратору и субконто какое-то не то. Не могу понять почему.
47 Alexandr Puzakov
 
17.10.11
17:04
Я не понял, а документ "Корректировка записей регистров" отменили что ли?
48 denis200
 
17.10.11
17:12
(47) Что-то не могу найти его в типовой бухгалтерии.
49 НЕА123
 
17.10.11
17:13
(48)
поищи тогда сторно.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс