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

13.08.12

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

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

Файлы

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

Наименование Скачано Купить файл
(только для физ. лиц)
Файл консоли запроса
.sel 8,55Kb
40 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

См. также

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

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

15500 руб.

02.09.2020    207444    1139    411    

1035

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

Каждый, кто работал с кадровыми отчетами в ЗУП, ERP или УХ, сталкивался с механизмом представлений – странным кодом запроса, где поля отображаются пустыми ссылками, а в названии временной таблицы есть слово «Представление». В статье разберем, что такое представления и как ими пользоваться. Больше не нужно ломать голову над тем, откуда и как правильно получать данные. Механизм представлений сделает это за вас.

08.07.2025    4102    user2012581    47    

52

Инструментарий разработчика Запросы Программист 1С v8.3 Сложные периодические расчеты Запросы 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

QueryConsole1C — расширение, включающее консоль запросов с поддержкой исполняемых представлений — аналогов виртуальных таблиц, основанных на методах программного интерфейса ЗУП. Оно позволяет выполнять запросы с учётом встроенной бизнес-логики, отлаживать алгоритмы получения данных и автоматически генерировать код на встроенном языке 1С.

1 стартмани

16.05.2025    4513    81    zup_dev    20    

67

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

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

27.12.2024    18409    Begemoth80    32    

91

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

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

18.10.2024    16029    sergey279    18    

69

Запросы Программист 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

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

11.10.2024    10675    XilDen    38    

102

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

Статистическая выборка сценариев и точек изменения отчетов на общей форме ФормаОтчета в типовых конфигурациях. Примеры кода.

03.06.2024    10769    SergDobrodelov    38    

124
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 66 18.08.20 11:10 Сейчас в теме
(6)
актуально

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