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

12.04.19

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Ремонт валюты/подразделений в проводках
.epf 6,52Kb
25
25 Скачать (1 SM) Купить за 1 850 руб.

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

//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С v8.3 1С:Бухгалтерия 3.0 1С:Управление холдингом Химическая промышленность Государственные, бюджетные структуры Электротехника и микроэлектроника Машиностроение и приборостроение Металлургическая промышленность Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Раздельный учет ГОЗ в 1С: автоматизация отчетности по госзаказам. Отчеты по исполнению госконтрактов, расчетно-калькуляционные материалы и контроль операций для исполнения в срок. Простая настройка и соответствие законодательству. Профессиональный консалтинг и регулярные обновления продукта.

44000 руб.

28.08.2020    338002    2289    135    

1044

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

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

12000 руб.

14.12.2023    1366    23    2    

11

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

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

60000 руб.

19.12.2022    12582    35    20    

21

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

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

3600 руб.

20.07.2016    177764    1289    1709    

1046

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

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

11500 руб.

23.12.2019    58031    233    110    

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

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

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

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

в этом месте как раз ошибка
8. Wadus161 38 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 38 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 910 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 Ответить
Оставьте свое сообщение