Исправление ошибки отсутствия субконто в проводках после редактирования плана счетов.
Разработка - Механизмы типовых конфигураций
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
В свое время в платформе была ошибка - после добавления субконто к счету платформа не производила рестутуризацию существующих проводок и в результате к ним не добавлялась строка с пустым значением нового субконто.
Внешне результат данной ошибки был виден в оборотке по счету. В группировке по данному субконто появлялось две пустые строки. Если выбирать запросом в консоли одна строка была пустым значением данного типа субконто а вторая NULL.
История "лечится" перепроведением или перезаписью движений.
Приведенный ниже запрос позволяет выявить такие ошибки
ВЫБРАТЬ
Хозрасчетный.Регистратор КАК Регистратор,
Хозрасчетный.НомерСтроки КАК НомерСтроки,
Хозрасчетный.СчетДт КАК Счет,
Хозрасчетный.Сумма,
Хозрасчетный.Организация,
ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Дебет) КАК ВидДвижения,
"Д" КАК ВидДвиженияБуквой
ПОМЕСТИТЬ Движения
ИЗ
РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Хозрасчетный.Регистратор,
Хозрасчетный.НомерСтроки,
Хозрасчетный.СчетКт,
Хозрасчетный.Сумма,
Хозрасчетный.Организация,
ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Кредит),
"К"
ИЗ
РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Движения.Регистратор КАК Регистратор,
Движения.НомерСтроки КАК НомерСтроки,
ВЫБОР
КОГДА ХозрасчетныйСубконто.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Кредит)
ТОГДА "К"
ИНАЧЕ "Д"
КОНЕЦ КАК ВидДвиженияБуквой,
ХозрасчетныйСубконто.ВидДвижения,
ХозрасчетныйСубконто.Вид КАК ВидСубконто
ПОМЕСТИТЬ ДвиженияССубконто
ИЗ
Движения КАК Движения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконто
ПО Движения.Регистратор = ХозрасчетныйСубконто.Регистратор
И Движения.НомерСтроки = ХозрасчетныйСубконто.НомерСтроки
И Движения.ВидДвижения = ХозрасчетныйСубконто.ВидДвижения
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
Движения.Регистратор КАК Регистратор,
Движения.НомерСтроки КАК НомерСтроки,
Движения.Счет,
Движения.ВидДвижения
ИЗ
Движения КАК Движения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
ПО Движения.Счет = ХозрасчетныйВидыСубконто.Ссылка
ГДЕ
НЕ (Движения.Регистратор, Движения.НомерСтроки, Движения.ВидДвиженияБуквой, ХозрасчетныйВидыСубконто.ВидСубконто) В
(ВЫБРАТЬ
ДвиженияССубконто.Регистратор,
ДвиженияССубконто.НомерСтроки,
ДвиженияССубконто.ВидДвиженияБуквой,
ДвиженияССубконто.ВидСубконто
ИЗ
ДвиженияССубконто КАК ДвиженияССубконто)
УПОРЯДОЧИТЬ ПО
Регистратор
ИТОГИ ПО
Регистратор,
НомерСтроки
АВТОУПОРЯДОЧИВАНИЕ
а этот кусок кода позволяет исправить ошибки в выявленных движениях
ВыборкаДокументов=РезЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВремяНачалаОбработки=ТекущаяДата();
КоличествоСтрок=ВыборкаДокументов.Количество();
НомерСтроки=0;
Пока ВыборкаДокументов.Следующий() Цикл
ТекущийМоментВремени=ТекущаяДата();
НомерСтроки=НомерСтроки+1;
КоличествоСтрокОставшихся=КоличествоСтрок-НомерСтроки;
НаборЗаписей=РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ВыборкаДокументов.Регистратор);
НаборЗаписей.Прочитать();
НаборЗаписей.ОбменДанными.Загрузка=Истина;
ВыборкаПоСтрокам=ВыборкаДокументов.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоСтрокам.Следующий() Цикл
Проводка=НаборЗаписей[ВыборкаПоСтрокам.НомерСтроки-1];
Выборка=ВыборкаПоСтрокам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() Цикл
Если Выборка.ВидДвижения=ВидДвиженияБухгалтерии.Дебет Тогда
Счет=Проводка.СчетДт;
Субконто=Проводка.СубконтоДт;
Иначе
Счет=Проводка.СчетКт;
Субконто=Проводка.СубконтоКт;
КонецЕсли;
СоответсвиеТекущихСубконто=Новый Соответствие;
Для Каждого ВидСубконто ИЗ Счет.ВидыСубконто Цикл
СоответсвиеТекущихСубконто.Вставить(ВидСубконто.ВидСубконто,Субконто[ВидСубконто.ВидСубконто]);
КонецЦикла;
Для Каждого ВидСубконто ИЗ Счет.ВидыСубконто Цикл
Субконто.Вставить(ВидСубконто.ВидСубконто,ВидСубконто.ВидСубконто.ТипЗначения.ПривестиЗначение());
Если СоответсвиеТекущихСубконто[ВидСубконто.ВидСубконто]<>Неопределено Тогда
Субконто.Вставить(ВидСубконто.ВидСубконто,СоответсвиеТекущихСубконто[ВидСубконто.ВидСубконто]);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
НаборЗаписей.Записать();
СреднееВремя=(ТекущаяДата()-ВремяНачалаОбработки)/НомерСтроки;
Состояние(Строка(НомерСтроки)+"/"+Строка(КоличествоСтрок)+" ("+Строка(ТекущаяДата()-ТекущийМоментВремени)+") "+Строка(ТекущаяДата()+КоличествоСтрокОставшихся*СреднееВремя));
ОбработкаПрерыванияПользователя();
КонецЦикла;
Перед выполением на больших базах рекомендуется отключить итоги и запрет границы редактирования.
Дополнительно,для вашего удобства, выкладываю файл .sel для консоли запроса с обработкой, который содержить оба текста.
Вступайте в нашу телеграмм-группу Инфостарт