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

12.04.19

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Ремонт валюты/подразделений в проводках
.epf 6,52Kb
26
26 Скачать (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С: Отчеты по исполнению госконтрактов, расчетно-калькуляционные материалы и контроль операций для исполнения в срок в 1С: Бухгалтерия 3.0 и Управление Холдингом 3.2. Простая настройка и полное соответствие законодательству. Профессиональный консалтинг и регулярные обновления продукта.

44000 руб.

28.08.2020    359477    2414    137    

1066

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

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

12000 руб.

14.12.2023    1684    28    2    

15

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

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

60000 руб.

19.12.2022    12950    36    25    

21

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

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

15600 руб.

15.12.2022    18600    181    24    

143

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

Не успеваете сдать декларацию вовремя? Устали заносить/править данные вручную? Давит угроза штрафа в десятки, а то и сотни тысяч? Бессонные ночи и потраченные на работе вечера в пик сдачи отчетности? Вам знакомы эти проблемы? Если да, то у нас есть РЕШЕНИЕ, которое Вам необходимо! Автоматическое заполнение алкогольных деклараций по формам 1 (производство), 2, 3, 4 (опт), 5 (перевозка), 6 (производственные мощности), 7, 8 (розница, разделы I и II и III) по данным учета, проверка и шифрование, а также загрузка из внешних файлов и выгрузка в формате XML 4.4 согласно приказу Росалкогольрегулирования от 17.12.2020 г. № 396

32000 руб.

01.07.2013    117845    107    94    

108

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

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

14400 руб.

16.10.2023    2246    19    0    

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

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

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

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

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