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

12.04.19

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

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

Скачать файлы

Наименование Файл Версия Размер
Ремонт валюты/подразделений в проводках
.epf 6,52Kb
22
.epf 6,52Kb 22 Скачать

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

//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.1, ЗУП 2.5, БУХ 2.0: НДС, ЕФС-1, Расчет страховых взносов, Мобилизация, Статистика, Электронные трудовые книжки, 2-НДФЛ, Регламентированная отчетность, Кадровый учет, Прослеживаемость импортных товаров

Зарплата Регламентированный учет и отчетность Кадровый учет Обновление 1С Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Зарплата и Управление Персоналом 2.5 Бухгалтерский учет Налоговый учет Управленческий учет Акцизы ЕНВД ЕСН Земельный налог ИП, ПБОЮЛ, КФХ Налог на имущество Налог на прибыль НДС НДФЛ ФОМС, ЕФС Транспортный налог УСН ПСН (патентная система налогообложения) Платные (руб)

Обновления для конфигураций: КА 1.1; ЗУП 2.5; БУХ 2.0; КА 1.1 Комплексная автоматизация торговли алкогольной продукцией; КА 1.1 Комплексный учет сельскохозяйственного предприятия

19900 руб.

01.04.2020    140654    678    352    

231

Курсовые разницы в 2022 - 2024 годах в «1С:Управление производственным предприятием» ред.1.3 (УПП)

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

Внешний отчет для УПП 1.3. позволяет вывести детализацию по документам расчета для определения временных разниц в налоговом учете согласно новому законодательству от марта 2022 года и декабрьские дополнения к нему. Отчет подобен отчету в конфигурации Бухгалтерия предприятия 3.0. Контроль счетов 77, 98.КР, 97.КР и декларации по налогу на прибыль. Грамотное обоснование - отложить уплату налога на прибыль за 2022 -2024 годы.

14400 руб.

15.12.2022    16206    165    24    

130

Алкогольные Декларации по Форме 7 и 8 по данным ЕГАИС из 1С Розница 2.2.4 - 2.х (УТ 11.5.х) (Комплексная Автоматизация)(Конвертация формата 4.3 в формат 4.4 для форм 11 и 12 сформированные за 1-й квартал в 7 и 8)

Регламентированный учет и отчетность Розничная торговля Файловый обмен (TXT, XML, DBF), FTP Обмен с ГосИС Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Россия Бухгалтерский учет Акцизы Платные (руб)

Обработка формирует файлы алкогольных декларации форм 7,8 с 1С:Розницы от 2.3.8. ,Управление Торговлей 11.х Проста в использовании. Формат выгрузки деклараций: 4.4, есть возможность объединять сформированные декларации из файлов XML.Дополнительно можно делать передачу в рег2 по остаткам и списывать остатки ЕГАИС по данным базы (пиво)

3600 руб.

20.07.2016    168568    1201    1699    

1000

Учет акцизов в 1С: Бухгалтерии 3.0 Расширение конфигурации в части работы с акцизами - Пиво

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

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

11500 руб.

23.12.2019    50806    234    110    

85

Учет акцизов в 1С: Бухгалтерии 3.0 - Газировка

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

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

11500 руб.

02.06.2023    6193    42    11    

28

Акцизы на сахаросодержащие напитки

Регламентированный учет и отчетность ЭДО и ОФД Платформа 1С v8.3 1С:Бухгалтерия 3.0 Пищевая промышленность Россия Бухгалтерский учет Налоговый учет Акцизы Платные (руб)

Расширение для Бухгалтерии предприятия 3.0 «Акцизы на сахаросодержащие напитки» предназначено для автоматизированного учета сумм акцизов по реализованным сахаросодержащим напиткам с 01 июля 2023 года. Позволяет выделить суммы акциза в первичных документах («Реализация товаров и услуг», «Корректировка реализации»), сформировать проводки по начислению акциза, а также сформировать и отправить корректные документы по ЭДО.

14400 руб.

16.10.2023    1079    10    0    

9

Государственные контракты в УТ 11.5, КА 2.5.11 с выгрузкой в ЕИС (Госзакупки)

Регламентированный учет и отчетность Обмен с ГосИС ЭДО и ОФД Платформа 1С v8.3 1С:Управление торговлей 11 Оптовая торговля, дистрибуция, логистика Россия Управленческий учет Платные (руб)

Работаете по контрактной схеме, сталкивались с проблемой, что в контракте жестко указаны наименование, цена, единица измерения товара. И не все готовы создавать новую номенклатуру под каждый контракт или менять наименование и единицу измерения для уже имеющейся. Тем более, бывает так, что контракт - это формальность. Контракт не описывает жесткие условия поставки, нужно соблюсти правильность в предоставлении документов. Данное решение позволит вам оперировать своей номенклатурой при оформлении реализаций по контракту, в то же время выводить на печать документы, соответствующие данным контракта. Реализована выгрузка для сайта госзакупок по 44-ФЗ.

40800 руб.

19.12.2022    10085    18    18    

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

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

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

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

в этом месте как раз ошибка
8. Wadus161 34 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 34 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 888 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.
user712426; +1 Ответить
Оставьте свое сообщение