Справочники.Валюты.ПустаяСсылка() в проводках у не валютных счетов или зависшие развернутые остатки по счетам

12.04.19

Учетные задачи - Регламентированный учет и отчетность

Описана причина появление пустых ссылок валюты по невалютным счетам. Пример решения этой проблемы. Платформа - 8.3.10.2580. Конфигурация - БП 3.0.60.46.

Файлы

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

Наименование Скачано Купить файл
Ремонт валюты/подразделений в проводках
.epf 6,52Kb
34 2 500 руб. Купить

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

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

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

Похожие статьи:

//infostart.ru/public/349891/

//infostart.ru/public/348852/

//infostart.ru/public/158661/

В этой статье даны пояснения причины и приведен более универсальный код.

Столкнулся с проблемой у клиентов - неожиданно появились зависшие остатки, причем остатки развернутые. Долго не могли понять что происходит, грешили на итоги, но пересчет не помог.

Причина: если оборотки формировать с выводом валюты, тогда становится все понятно - у невалютных счетов вместо значения NULL появилась пустая ссылка валюты.

Что произошло? Оказалось, что перед этим выполнялась процедура поиска и замены. Именно она делает такой беспорядок.

Кто виноват? В типовом коде допущена ошибка:

Процедура ЗаменитьВКоллекцииСтрок(ВидКоллекции, ИмяКоллекции, Объект, Коллекция, Знач СписокПолей, Знач ПарыЗамен)
	РабочаяКоллекция = Коллекция.Выгрузить();
	Модифицировано = Ложь;
	
	Для Каждого Строка Из РабочаяКоллекция Цикл
		
		Для Каждого КлючЗначение Из СписокПолей Цикл
			Имя = КлючЗначение.Ключ;
			ЦелеваяСсылка = ПарыЗамен[ Строка[Имя] ];
			Если ЦелеваяСсылка <> Неопределено Тогда
				ЗарегистрироватьФактЗамены(Объект, Строка[Имя], ЦелеваяСсылка, ВидКоллекции, ИмяКоллекции, РабочаяКоллекция.Индекс(Строка), Имя);
				Строка[Имя] = ЦелеваяСсылка;
				Модифицировано = Истина;
			КонецЕсли;
		КонецЦикла;
		
	КонецЦикла;
	
	Если Модифицировано Тогда
		Коллекция.Загрузить(РабочаяКоллекция);
	КонецЕсли;
КонецПроцедуры

Проблема в параметре "Коллекция", там сидит набор записей. У набора записей, если у валюты стоит NULL, то в момент выгрузки в таблицу значения вместо NULL будет Справочники.Валюта.ПустаяСсылка. ВАЖНО! Такое поведение будет только если поиск и замену выполнять в режиме ОбменДанными.Загрузка = Истина!! То есть, если набор записей записать в обычном режиме, то проблемы не будет.

Но почему такое поведение? Логика платформы ясна: если данные приходят в режиме обмена данными, то значит проверять ничего не надо, ведь по идее такие же данные должны быть в другом узле и мы не может допустить рассинхронизацию. Но в данном случае это конечно ошибка платформы. Возможно в более новых версиях эту ошибку устранили.

 Как исправить? 

&НаСервере
Процедура ИсправитьНаСервере()
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВложенныйЗапрос.Регистратор КАК Регистратор
		|ИЗ
		|	(ВЫБРАТЬ
		|		ХозрасчетныйДвиженияССубконто.Регистратор КАК Регистратор
		|	ИЗ
		|		РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
		|				,
		|				,
		|				ПодразделениеДт = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)
		|					И СчетДт <> ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка)
		|					И НЕ СчетДт.УчетПоПодразделениям,
		|				,
		|				) КАК ХозрасчетныйДвиженияССубконто
		|	
		|	СГРУППИРОВАТЬ ПО
		|		ХозрасчетныйДвиженияССубконто.Регистратор
		|	
		|	ОБЪЕДИНИТЬ ВСЕ
		|	
		|	ВЫБРАТЬ
		|		ХозрасчетныйДвиженияССубконто.Регистратор
		|	ИЗ
		|		РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
		|				,
		|				,
		|				ПодразделениеКт = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)
		|					И СчетКт <> ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка)
		|					И НЕ СчетКт.УчетПоПодразделениям,
		|				,
		|				) КАК ХозрасчетныйДвиженияССубконто
		|	
		|	СГРУППИРОВАТЬ ПО
		|		ХозрасчетныйДвиженияССубконто.Регистратор
		|	
		|	ОБЪЕДИНИТЬ ВСЕ
		|	
		|	ВЫБРАТЬ
		|		ХозрасчетныйДвиженияССубконто.Регистратор
		|	ИЗ
		|		РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
		|				,
		|				,
		|				ВалютаДт = ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)
		|					И СчетДт <> ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка)
		|					И НЕ СчетДт.Валютный,
		|				,
		|				) КАК ХозрасчетныйДвиженияССубконто
		|	
		|	СГРУППИРОВАТЬ ПО
		|		ХозрасчетныйДвиженияССубконто.Регистратор
		|	
		|	ОБЪЕДИНИТЬ ВСЕ
		|	
		|	ВЫБРАТЬ
		|		ХозрасчетныйДвиженияССубконто.Регистратор
		|	ИЗ
		|		РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
		|				,
		|				,
		|				ВалютаКт = ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)
		|					И СчетКт <> ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка)
		|					И НЕ СчетКт.Валютный,
		|				,
		|				) КАК ХозрасчетныйДвиженияССубконто
		|	
		|	СГРУППИРОВАТЬ ПО
		|		ХозрасчетныйДвиженияССубконто.Регистратор) КАК ВложенныйЗапрос
		|
		|СГРУППИРОВАТЬ ПО
		|	ВложенныйЗапрос.Регистратор";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		
		Набор = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
		
		Набор.Отбор.Регистратор.Установить(ВыборкаДетальныеЗаписи.Регистратор);
		Набор.Прочитать();
		
		Модифицирован = Ложь;
		
		Для Каждого ЗаписьНабора Из Набор Цикл
			
			Если НЕ (ЗначениеЗаполнено(ЗаписьНабора.СчетДт) И ЗаписьНабора.СчетДт.Валютный) Тогда
				ЗаписьНабора.ВалютаДт = NULL;
			КонецЕсли;
			Если НЕ (ЗначениеЗаполнено(ЗаписьНабора.СчетКт) И ЗаписьНабора.СчетКт.Валютный) Тогда
				ЗаписьНабора.ВалютаКт = NULL;
			КонецЕсли;
			
			Если НЕ (ЗначениеЗаполнено(ЗаписьНабора.СчетДт) И ЗаписьНабора.СчетДт.УчетПоПодразделениям) Тогда
				ЗаписьНабора.ПодразделениеДт = NULL;
			КонецЕсли;
			Если НЕ (ЗначениеЗаполнено(ЗаписьНабора.СчетКт) И ЗаписьНабора.СчетКт.УчетПоПодразделениям) Тогда
				ЗаписьНабора.ПодразделениеКт = NULL;
			КонецЕсли;
			
		КонецЦикла;
		
		Набор.ОбменДанными.Загрузка = Истина;
		Набор.Записать();
		
	КонецЦикла;
	
	
КонецПроцедуры

Как защититься от этой проблемы? Либо помнить чем грозит поиск и замена в режиме обмена данными, либо в процедуре "ПередЗаписью" регистра бухгалтерии добавить проверку, обмен конечно немного замедлится, но так точно больше проблем на возникнет (вдруг еще какой сюрприз притаился):

	Если ОбменДанными.Загрузка Тогда
		//<-- Wadus
		Для каждого Проводка из ЭтотОбъект Цикл
			Если НЕ (ЗначениеЗаполнено(Проводка.СчетДт) И Проводка.СчетДт.Валютный) Тогда
				Проводка.ВалютаДт = NULL;
			КонецЕсли;
			Если НЕ (ЗначениеЗаполнено(Проводка.СчетКт) И Проводка.СчетКт.Валютный) Тогда
				Проводка.ВалютаКт = NULL;
			КонецЕсли;
			
			Если НЕ (ЗначениеЗаполнено(Проводка.СчетДт) И Проводка.СчетДт.УчетПоПодразделениям) Тогда
				Проводка.ПодразделениеДт = NULL;
			КонецЕсли;
			Если НЕ (ЗначениеЗаполнено(Проводка.СчетКт) И Проводка.СчетКт.УчетПоПодразделениям) Тогда
				Проводка.ПодразделениеКт = NULL;
			КонецЕсли;
			
			
			//для забалансовых, иначе по незаполненному счету будут пустые ссылки
			//некритично, но не по фэн-шую
			Если Не ЗначениеЗаполнено(Проводка.СчетДт) Тогда
				Проводка.ВалютаДт = NULL;
				Проводка.ПодразделениеДт = NULL;
			КонецЕсли;
			
			Если Не ЗначениеЗаполнено(Проводка.СчетКт) Тогда
				Проводка.ВалютаКт = NULL;
				Проводка.ПодразделениеКт = NULL;
			КонецЕсли;
		КонецЦикла;
		//--> Wadus
		Возврат;
	КонецЕсли;

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

Если помог - смело ставь + ! Буду благодарен )

Спасибо фирме 1С за такие интересные задачки! ))

 

P.S. добавил еще подразделения.

P.S.S. добавил забалансовые счета для обработки

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

обработка Справочники.Валюты.ПустаяСсылка Справочники.ПодразделенияОрганизации.ПустаяСсылка

См. также

Обмен с ГосИС Бюджетный учет Регламентированный учет и отчетность Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 1С:Управление холдингом Химическая промышленность Государственные, бюджетные структуры Электротехника и микроэлектроника Машиностроение и приборостроение Металлургическая промышленность Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Автоматизация раздельного учета в 1С:Бухгалтерии по ГОЗ в соответствии с 275-ФЗ. Готовое решение для учета госконтрактов, формирования отчетности и контроля исполнения. Поддержка военной приемки, НИОКР и требований Минпромторга. Профессиональный консалтинг и регулярные обновления продукта

40000 руб.

28.08.2020    520177    3366    142    

1312

Регламентированный учет и отчетность Операции по ВЭД Бухгалтер 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Налоговый учет НДС Платные (руб)

Экономьте часы рабочего времени и избегайте ошибок при подготовке. Решение создано специально для вас, если вы: Занимаетесь ВЭД: ваша компания регулярно отгружает товары в страны ЕАЭС Сотрудничаете с ключевыми странами союза: Беларусью, Казахстаном, Арменией и Киргизией Работаете в 1С: ведете учет в Бухгалтерии 3.0, КА 2 или ERP Продукт прошел сертификацию 1С-Совместимо и имеет полную документацию Есть демо-версия, можно поставить на свою базу и проверить функционал на нескольких отчетах

12200 руб.

10.07.2017    94218    529    163    

411

Регламентированный учет и отчетность Бухгалтер 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Налоговый учет Налог на прибыль Платные (руб)

Предназначена для 1C:Бухгалтерия 3.0 и 1C:Бухгалтерия КОРП 3.0. Согласно рекомендации фирмы "1С" при переходе с УСН на ОСН ввод данных по налоговому учету происходит при помощи документа "Ввод остатков", для которого расширение дополняет его функционал возможностью автоматического заполнения табличной части документа для разделов учета Материалы, Товары, Товары отгруженные, Расчеты с поставщиками, Расчеты с покупателями, Расчеты с разными дебиторами и кредиторами.

14640 руб.

14.12.2023    5449    77    35    

42

Регламентированный учет и отчетность Операции по ВЭД Закрытие периода Бухгалтер 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет НДС Платные (руб)

Расширение для заполнения реестров НДС в 1С:Бухгалтерии предприятия 3.0. Реестр по НДС: КНД 1155112, КНД 1155113, КНД 1155114, КНД 1155115.

14640 руб.

01.08.2025    3417    17    2    

15

Регламентированный учет и отчетность НДС 22% 1С:Предприятие 8 1С:Управление торговлей 10 Бухгалтерский учет Налоговый учет Управленческий учет НДС Платные (руб)

Обновление для 1С:Управление торговлей 10.3 (УТ 10.3) с 2026 года для добавления ставок НДС 22% (122)% в документах и печатных формах документов. Начиная с релиза 10.3.5 по 10.3.88.

5000 руб.

12.11.2025    2664    12    0    

17

SALE! 50%

Зарплата Регламентированный учет и отчетность Бухгалтер 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 Здравоохранение, медицина, стоматология Россия Платные (руб)

Подсистема (расширение) конфигурации Зарплата и кадры государственного учреждения, редакция 3.1 для формирования формы №30 федерального статистического наблюдения "Сведения о медицинской организации" в редакции Приказов Росстата I) от 30.12.2020 №863, II) от 27.12.2022 N 985, III) от 25.12.2023 N 681 и IV) от 29.11.2025 №594.

21960 руб.

26.10.2021    19725    27    13    

20

SALE! 30%

Регламентированный учет и отчетность Мастера заполнения Бухгалтер 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет ЕСН Платные (руб)

Обработка позволяет создавать документы "Сведения об уплате налогов на едином налоговом счете" по данным файла операций из личного кабинета ЕНС сайта ФНС в конфигурации 1С:Бухгалтерия предприятия 3.0.

10000 7000 руб.

22.11.2024    3889    26    6    

25

Регламентированный учет и отчетность Бухгалтер 1С:Предприятие 8 1С:Бухгалтерия 3.0 Оптовая торговля, дистрибуция, логистика Россия Бухгалтерский учет Акцизы Платные (руб)

В стандартном функционале 1С:Бухгалтерия предприятия 3.0 нет учета акцизов. Счет-фактуры и УПД в печатных формах не заполняют сумму акциза. При проведении документа Реализация, «сумма Акциз» не высчитывается и не формируются проводки. Расширение Акцизы - Пиво выделит сумму акциза в первичных документах. Список доработанных документов 1С: Реализация (акты, накладные, УПД), Корректировка реализации, Списание товаров, материалов. Первичные документы с отображением акциза - счет-фактура, УПД.

11500 руб.

23.12.2019    61633    246    112    

98
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ZOMI 399 23.07.18 17:50 Сейчас в теме
Баян, и баян недоделанный. Там еще обычно каша по счетам со счетами где нет учета по подразделениям начинается.

В комментах к теме https://infostart.ru/public/158661/ правильные причины возникновения такой проблемы
3. Wadus161 40 23.07.18 20:22 Сейчас в теме
(1)Могли бы Вы пояснить почему баян "недоделанный"? Статья на которую Вы ссылаетесь не объясняет причину, а я объяснил. Статья на которую Вы ссылаетесь вообще не приводит пример кода, а я весь код выложил. Вообще я нигде не нашел объяснения, поэтому и решил поделиться с сообществом.
kida1; katod1985; +2 Ответить
5. ZOMI 399 23.07.18 20:39 Сейчас в теме
(3) "недоделанный" в смысле, что обычно проблема и с валютой и с подразделением...
Причины как я и указал в (1) озвучены в комментах - ваше объяснение неполное тк данная проблема есть в базах, которые вообще ни с кем не обмениваются данными...
6. Wadus161 40 23.07.18 21:09 Сейчас в теме
(5) Согласен, с подразделениями такая же история. Сейчас дополню. Что касается обмена данными, скорее всего Вас смутила фраза "Такое поведение будет только если поиск и замену выполнять в режиме ОбменДанными.Загрузка = Истина". Обмен данных тут не причем. Имеется ввиду следующее:
Прикрепленные файлы:
2. Vasvas05 27 23.07.18 19:25 Сейчас в теме
Я делал проще,
ДвиженияДокумента = о.Движения.Хозрасчетный;
ДвиженияДокумента.Прочитать();
	
ДвиженияДокумента.Записать();

все встает на свои места

в запросе только искал на <> null
4. Wadus161 40 23.07.18 20:33 Сейчас в теме
(2)Ваш способ не подойдет в том случае если надо сделать запись в режиме ОбменДанными.Загрузка = Истина, В этом режиме лучше писать для скорости, чтобы пропустить обработчики события в модуле объекта регистра бухгалтерии.
7. Vasvas05 27 24.07.18 12:02 Сейчас в теме
(4) Ваш не подойдет в других случаев, когда тип Неопределенно. а не ссылка, так же когда подразделение,а не валюта.
Мой способ универсальный и простой, подойдет всем, насчет скорости - думаю ошибок не так много
А так данная ошибка возникает из за того,что в таблице значений нет типа NULL, если сделать ТЗ = о.Движения.Хозрасчетный.выгрузить() а потом Движения.Загрузить(ТЗ) у вас вознинут такие ошибки. Это ошибка платформы.
код
РабочаяКоллекция = Коллекция.Выгрузить();

в этом месте как раз ошибка
8. Wadus161 40 24.07.18 13:51 Сейчас в теме
(7) В валюте и подразделении Неопределенно не может быть, значение неопределенно устанавливается только у составных типов.

Мне кажется Вы невнимательно прочитали эту публикацию, я как раз и написал что проблема в Коллекция.Выгрузить()

Тут нюанс в следующем: Вы правильно подметили, что у ТаблицыЗначения NULL не может быть. Когда выгружается набор записей регистра бухгалтерии, у которого в валюте и в подразделении сидит NULL, то NULL превратиться в пустую ссылку. Главная изюминка , если написать так:
ДвиженияДокумента = о.Движения.Хозрасчетный;
ДвиженияДокумента.Прочитать();
    
ДвиженияДокумента.Записать();

то платформа сама пустую ссылку валюты и подразделения преобразует в NULL если по счету не ведется валютный учет и учет по подразделению, а если написать так:
ДвиженияДокумента = о.Движения.Хозрасчетный;
ДвиженияДокумента.Прочитать();
    
ДвиженияДокумента.ОбменДанными.Загрузка = Истина;
ДвиженияДокумента.Записать();

то платформа оставить пустые ссылки.
9. dspdsp 22.05.19 11:15 Сейчас в теме
Платформа 8.3.13.1644, бух 3.0.70.50
Проблема осталась, цветет и пахнет, код исправления работает
10. BaronDevil 11.08.19 23:04 Сейчас в теме
Модифицирован = ложь видимо хотели использовать для случаев когда не было изменений?
11. Wadus161 40 12.08.19 16:28 Сейчас в теме
(10)да, точно. Спасибо, позже поправлю.
12. shoy 19 02.10.19 13:12 Сейчас в теме
Платформа 1С:Предприятие 8.3 (8.3.15.1565), Бухгалтерия предприятия КОРП, редакция 3.0 БИТ.ФИНАНС 3.1 (3.0.73.38/3.1.42.11)

Проблема компанией 1С даже не думает исправляться, поэтому ГОЛОСУЮ за эту публикацию.

Автор дал точное объяснение, кроме того привёл варианты ремонта, и предотвращения повторной ошибки.
13. Nicholas 933 24.11.19 17:46 Сейчас в теме
По одной номенклатуре была ошибка "Для целей учета НДС не списано..." при проведении требования-накладной. Несколько часов ломал голову, пока случайно не заметил, что запрос по проводкам в некоторых случаях возвращает пустое подразделение, а в некоторых - NULL.
После этого решил погуглить и нашел вашу публикацию. Спасибо!
14. mihenius 83 25.04.20 21:56 Сейчас в теме
Вроде проблему наконец исправили, но это не точно )

https://bugboard.v8.1c.ru/error/000066639
15. svb404 20.05.20 14:27 Сейчас в теме
В случае этой проблемы кроме "ВалютаДт" и "ВалютаКт" (пустые ссылки) реквизиты "ВалютнаяСуммаДт" и "ВалютнаяСуммаКт" имеют значения = "0", а должны быть тоже NULL. Т.о. и этим реквизитам ("ВалютнаяСуммаДт", "ВалютнаяСуммаКт") надо присвоить значение NULL.
katod1985; +1 Ответить
16. kida1 154 17.07.25 09:14 Сейчас в теме
Огромное спасибо, помогло! 2025 год, а проблема актуальна. Платформа 8.3.24
Для отправки сообщения требуется регистрация/авторизация