Исправление ошибки отсутствия субконто в проводках после редактирования плана счетов.

13.08.12

Разработка - Механизмы типовых конфигураций

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Файл консоли запроса
.sel 8,55Kb
39
39 Скачать (1 SM) Купить за 1 850 руб.

В свое время в платформе была ошибка - после добавления субконто к счету платформа не производила рестутуризацию существующих проводок и в результате к ним не добавлялась строка с пустым значением нового субконто.

Внешне результат данной ошибки был виден в оборотке по счету. В группировке по данному субконто появлялось две пустые строки. Если выбирать запросом в консоли одна строка была пустым значением данного типа субконто а вторая NULL.  

История "лечится" перепроведением или перезаписью движений.

Приведенный ниже запрос позволяет выявить такие  ошибки

ВЫБРАТЬ
   
Хозрасчетный.Регистратор КАК Регистратор,
   
Хозрасчетный.НомерСтроки КАК НомерСтроки,
   
Хозрасчетный.СчетДт КАК Счет,
   
Хозрасчетный.Сумма,
   
Хозрасчетный.Организация,
   
ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Дебет) КАК ВидДвижения,
   
"Д" КАК ВидДвиженияБуквой
ПОМЕСТИТЬ Движения
ИЗ
   
РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   
Хозрасчетный.Регистратор,
   
Хозрасчетный.НомерСтроки,
   
Хозрасчетный.СчетКт,
   
Хозрасчетный.Сумма,
   
Хозрасчетный.Организация,
   
ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Кредит),
   
"К"
ИЗ
   
РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   
Движения.Регистратор КАК Регистратор,
   
Движения.НомерСтроки КАК НомерСтроки,
   
ВЫБОР
        КОГДА
ХозрасчетныйСубконто.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Кредит)
           
ТОГДА "К"
       
ИНАЧЕ "Д"
   
КОНЕЦ КАК ВидДвиженияБуквой,
   
ХозрасчетныйСубконто.ВидДвижения,
   
ХозрасчетныйСубконто.Вид КАК ВидСубконто
ПОМЕСТИТЬ ДвиженияССубконто
ИЗ
   
Движения КАК Движения
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконто
        ПО Движения.Регистратор = ХозрасчетныйСубконто.Регистратор
            И Движения.НомерСтроки = ХозрасчетныйСубконто.НомерСтроки
            И Движения.ВидДвижения = ХозрасчетныйСубконто.ВидДвижения
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
   
Движения.Регистратор КАК Регистратор,
   
Движения.НомерСтроки КАК НомерСтроки,
   
Движения.Счет,
   
Движения.ВидДвижения
ИЗ
   
Движения КАК Движения
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
        ПО Движения.Счет = ХозрасчетныйВидыСубконто.Ссылка
ГДЕ
   
НЕ (Движения.Регистратор, Движения.НомерСтроки, Движения.ВидДвиженияБуквой, ХозрасчетныйВидыСубконто.ВидСубконто) В
               
(ВЫБРАТЬ
                   
ДвиженияССубконто.Регистратор,
                   
ДвиженияССубконто.НомерСтроки,
                   
ДвиженияССубконто.ВидДвиженияБуквой,
                   
ДвиженияССубконто.ВидСубконто
                ИЗ
                   
ДвиженияССубконто КАК ДвиженияССубконто)

УПОРЯДОЧИТЬ ПО
   
Регистратор
ИТОГИ ПО
   
Регистратор,
   
НомерСтроки
АВТОУПОРЯДОЧИВАНИЕ

а этот кусок кода позволяет исправить ошибки в выявленных движениях

ВыборкаДокументов=РезЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВремяНачалаОбработки=ТекущаяДата();
КоличествоСтрок=ВыборкаДокументов.Количество();
НомерСтроки=0;
Пока
ВыборкаДокументов.Следующий() Цикл
   
ТекущийМоментВремени=ТекущаяДата();
   
НомерСтроки=НомерСтроки+1;
   
КоличествоСтрокОставшихся=КоличествоСтрок-НомерСтроки;

   
НаборЗаписей=РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
   
НаборЗаписей.Отбор.Регистратор.Установить(ВыборкаДокументов.Регистратор);
   
НаборЗаписей.Прочитать();
   
НаборЗаписей.ОбменДанными.Загрузка=Истина;

   
ВыборкаПоСтрокам=ВыборкаДокументов.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока
ВыборкаПоСтрокам.Следующий() Цикл
       
Проводка=НаборЗаписей[ВыборкаПоСтрокам.НомерСтроки-1];
       
Выборка=ВыборкаПоСтрокам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        Пока
Выборка.Следующий() Цикл
            Если
Выборка.ВидДвижения=ВидДвиженияБухгалтерии.Дебет Тогда
               
Счет=Проводка.СчетДт;
               
Субконто=Проводка.СубконтоДт;
            Иначе
               
Счет=Проводка.СчетКт;
               
Субконто=Проводка.СубконтоКт;
            КонецЕсли;
           
СоответсвиеТекущихСубконто=Новый Соответствие;
            Для Каждого
ВидСубконто ИЗ Счет.ВидыСубконто Цикл
               
СоответсвиеТекущихСубконто.Вставить(ВидСубконто.ВидСубконто,Субконто[ВидСубконто.ВидСубконто]);
            КонецЦикла;

            Для Каждого
ВидСубконто ИЗ Счет.ВидыСубконто Цикл
               
Субконто.Вставить(ВидСубконто.ВидСубконто,ВидСубконто.ВидСубконто.ТипЗначения.ПривестиЗначение());
                Если
СоответсвиеТекущихСубконто[ВидСубконто.ВидСубконто]<>Неопределено Тогда
                   
Субконто.Вставить(ВидСубконто.ВидСубконто,СоответсвиеТекущихСубконто[ВидСубконто.ВидСубконто]);
                КонецЕсли;
            КонецЦикла;

        КонецЦикла;
    КонецЦикла;
   
НаборЗаписей.Записать();

   
СреднееВремя=(ТекущаяДата()-ВремяНачалаОбработки)/НомерСтроки;
   
Состояние(Строка(НомерСтроки)+"/"+Строка(КоличествоСтрок)+" ("+Строка(ТекущаяДата()-ТекущийМоментВремени)+") "+Строка(ТекущаяДата()+КоличествоСтрокОставшихся*СреднееВремя));
   
ОбработкаПрерыванияПользователя();
КонецЦикла;

Перед выполением на больших базах рекомендуется отключить итоги и запрет границы редактирования.

Дополнительно,для вашего удобства, выкладываю файл .sel для консоли запроса с обработкой, который содержить оба текста.

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    169257    937    403    

905

Механизмы типовых конфигураций Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Расчет себестоимости в типовых конфигурациях 1С – для многих «черный ящик», работающий по жестко зашитым в него алгоритмам. Реализация этого «черного ящика» может меняться в зависимости от конкретной конфигурации – УПП, БП 3.0, ERP. Но принцип работы везде одинаковый. Расскажем о том, как устроен расчет себестоимости, как его дорабатывать, и какие методы могут быть эффективны и без доработок.

27.12.2024    10373    Begemoth80    32    

82

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    11391    sergey279    18    

65

Запросы Программист Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    6338    XilDen    36    

83

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

Часто при разработке отчетов в СКД возникает ситуация, когда не совсем понятно, почему отчет выводит не те данные, которые нужны, либо не выводит вовсе. Возникает потребность увидеть конечный запрос, который формирует СКД. Как это сделать, рассмотрим в этой статье.

15.05.2024    10218    implecs_team    6    

48

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    4318    YA_418728146    11    

53

Инструментарий разработчика Запросы Программист Стажер Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Бесплатно (free)

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

15.01.2024    11040    168    mkalimulin    32    

61
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. mip128 03.12.13 16:52 Сейчас в теме
Это чтоб ТиИ не запускать когда народ сидит
2. mip128 03.12.13 17:31 Сейчас в теме
Было бы неплохо написать еще для измененного типа значения, чтобы в составном типе вместо пустой ссылки стояло неопределено.
3. Vladisa 39 13.12.13 09:24 Сейчас в теме
возникла после добавления субконто похожая проблема...старые значения остались на одном пустом субконто, а вот случайно незаполненные свежие-на другом пустом...схлопнуть их никак не удается(((
4. Fox_65 1 30.07.20 01:16 Сейчас в теме
Запрос нереальный.Для больших баз явно не подходит.Все движения в базе в таблицу запроса. Да это нереально и очень долго.
5. Itilive.ru 43 04.08.20 15:18 Сейчас в теме
(4) Ага Вы правы. Прямо спустя 8 лет со слезами на него смотрю...
6. Fox_65 1 04.08.20 16:19 Сейчас в теме
Кстати я его доработал. Добавил период и таблицы стали не такими громоздкими. И теперь он работает очень даже ничего. И самое главное исправляет ошибку с субконто NULL. Так что это до сих пор актуально. Спасибо.
7. DennyPhilord 65 18.08.20 11:10 Сейчас в теме
(6)
актуально

Будьте добры, выложите модификации
8. Goggy 2 11.05.21 15:48 Сейчас в теме
(5) До сих пор актуален бывает данный механизм.
Был бы признателен если бы вы обновили запрос и процедуру обработки.
9. Itilive.ru 43 12.05.21 19:37 Сейчас в теме
(8) А что необходимо обновить? На некоторые моменты конечно сейчас уже смешно смотреть. Но я не понимаю в какой части он не работает...
Оставьте свое сообщение