Хочу поделиться решением 2х проблем, которые иногда возникают при добавлении нового субконто в случае наличия движений по этому счету.
Возникающие проблемы:
1) В оборотно-сальдовой ведомости с группировками по субконто по счету строки не сворачиваются.
2) При изменении документа выводит ошибку "Попытка вставки неуникального значения в уникальный индекс ..."
Я столкнулся одновременно и с той и с другой проблемой.
Причины:
Изначально, у счета был 1 субконто. Были введены по нему остатки. Позже добавляют 2-е субконто и создают последующие документы уже с 2-мя субконто. Возникает ситуация, когда у 1-го документа ввода остатков у субконто2 тип = NULL, а у всех последующих документов тип уже определен.
В моём случае это было сделано обработкой переноса данных (это делал не я) и получилось так, что в документе было 2 записи, 1-я запись с типом субконто2 = NULL, а 2-я запись с типом субконто2 = "Основное средство".
Из за этого, помимо того, что в оборотно-сальдовой ведомости строки не сворачиваются по субконто, так еще при попытке изменить первоначальный "косячный" документ выводится ошибка:
Ошибка при вызове метода контекста (Записать)
по причине:
Нарушено условие уникальности данных.
Попытка вставки неуникального значения в уникальный индекс:
Microsoft SQL Server Native Client 11.0: Не удается вставить повторяющуюся строку ключа в объект "dbo._AccRgAT2625" с уникальным индексом "_AccRgAT2625_1". Повторяющееся значение ключа: (0, 0xa25af40ed3a15b76458310d45ac671b1, 4014-12-01 00:00:00, 0xb56400148535cac211dcb37a96865fd8, 0x08, 0x00000036, 0xb0341f53c68854524eac29f387baa355, <NULL>, <NULL>, <NULL>, <NULL>, 0x00000000000000000000000000000000, 0).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=E, native=2601, line=1
Для решения проблемы с неуникальным индексом многие предлагают исправлять это в таблицах на SQL сервере, выгружать / загружать в файловую и выполнять различные тестирования и исправления.
Я нашел, на мой взгяд более логичное и простое решение:
Добавляю субконто3, обновляю базу, удаляю субконто3, обновляю базу и вуаля, ошибка исчезает.
Дело в том, что индексы таблиц в базе данных создаются неявным образом при создании объектов конфигурации, а мы добавлением субконто3 как раз пересоздали индексы.
Что касается исправления проводок с типом субконто NULL:
Изначально вам нужно выполнить запрос в консоли наподобие:
ВЫБРАТЬ
ХозрасчетныйОборотыДтКт.Период КАК Период,
ХозрасчетныйОборотыДтКт.Регистратор КАК Регистратор,
ХозрасчетныйОборотыДтКт.СчетДт КАК СчетДт,
ХозрасчетныйОборотыДтКт.СчетКт КАК СчетКт,
ТИПЗНАЧЕНИЯ(ХозрасчетныйОборотыДтКт.СубконтоДт1) КАК Тип_СубконтоДт1,
ТИПЗНАЧЕНИЯ(ХозрасчетныйОборотыДтКт.СубконтоДт2) КАК Тип_СубконтоДт2,
ТИПЗНАЧЕНИЯ(ХозрасчетныйОборотыДтКт.СубконтоДт3) КАК Тип_СубконтоДт3,
ХозрасчетныйОборотыДтКт.СубконтоДт1 КАК СубконтоДт1,
ХозрасчетныйОборотыДтКт.СубконтоДт2 КАК СубконтоДт2,
ХозрасчетныйОборотыДтКт.СубконтоДт3.Код КАК СубконтоДт3,
ХозрасчетныйОборотыДтКт.СуммаОборот КАК СуммаОборот
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(, , Регистратор, , , , , ) КАК ХозрасчетныйОборотыДтКт
ГДЕ
ХозрасчетныйОборотыДтКт.Организация = &Организация
И ХозрасчетныйОборотыДтКт.СчетДт = &СчетДт
// И ХозрасчетныйОборотыДтКт.Регистратор = &Регистратор
// И ХозрасчетныйОборотыДтКт.СубконтоДт1 = &Контрагент
// И ХозрасчетныйОборотыДтКт.СубконтоДт2 = &ОС
Это был запрос по Дт (у меня были проблемы с Дт), если нужно Кт, тогда аналогичный запрос нужно выполнить по Кт (поменять с Дт на Кт в тексте запроса).
В результате вы сразу увидите, по какому типу субконто у вас "расходятся" аналитики.
Их то и нужно будет править, открыв период редактирования и написав примерно такую обработку:
Набор = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(СсылкаНаОперацию);
Набор.Прочитать();
Для Каждого Запись Из Набор Цикл
БухгалтерскийУчет.УстановитьСубконто(Запись.СчетДт, Запись.СубконтоДт, "ОсновныеСредства", Справочники.ОсновныеСредства.ПустаяСсылка());
КонецЦикла;
Набор.Записать();
Где СсылкаНаОперацию - это реквизит на форме (ссылка на "косячный" документ, который мы исправляем).
Причем, в случае программного изменения операции, так называемая "граница последовательности" не слетит, и все закрытия месяцев останутся выполненными, если будете редактировать документ вручную - слетит.
Конфигурация: Бухгалтерия предприятия 3.0 (релиз: 3.0.147.30)
Платформа: 1С:Предприятие 8.3 (8.3.23.1865)