Нумерация колонок субконто при выгрузке набора записей регистра бухгалтерии в таблицу значений

14.01.19

Разработка - Универсальные функции

Решение проблемы несовпадения номеров колонок с номерами субконто на счете при выгрузке в таблицу значений.

Периодически, для более удобной работы приходится выгружать набор движений регистра бухгалтерии в таблицу значений. В документации четко написано:

Создает таблицу значений и копирует в нее записи набора. Структура полученной таблицы совпадает со структурой набора записей. Значения субконто выгружаются вместе с видами субконто. Для каждого субконто создается пара колонок с идентификаторами вида ВидСубконто<Номер>, Субконто<Номер>, для регистра не поддерживающего корреспонденцию, и ВидСубконтоДт<Номер>, СубконтоДт<Номер>, ВидСубконтоКт<Номер>, СубконтоКт<Номер>, для регистра поддерживающего корреспонденцию.

При этом номера <Номер> могут не совпадать с номерами видов субконто на соответствующем счете.

А вот это далеко не всегда удобно, особенно если счетов в выборке может быть много, и работа с ними планируется универсальной, по номерам это часто бывает удобно. Я недавно столкнулся с этой проблемой, синтакс-помощник был прочитан естественно, после того как уже был написан код без учета этой особенности, и конечно же, код отрабатывал некорректно. После небольших раздумий была написана небольшая процедура, решающая эту не очень приятную особенность. Код "расставляет" субконто в таблице значений согласно их номерам на плане счетов.Надеюсь, это сэкономит чье-нибудь время при разработке.

Процедура УстановитьСубконтоПоНомерам(Таблица)
	Для Каждого Строка Из Таблица Цикл
		СоответствиеСубконто=Новый Соответствие;
		Для Сч=1 По Строка.СчетКт.ВидыСубконто.Количество() Цикл
			СоответствиеСубконто.Вставить(Строка["ВидСубконтоКт"+Сч],Строка["СубконтоКт"+Сч]);
		КонецЦикла;	
		Для Сч=1 По Строка.СчетДт.ВидыСубконто.Количество() Цикл
			СоответствиеСубконто.Вставить(Строка["ВидСубконтоДт"+Сч],Строка["СубконтоДт"+Сч]);
		КонецЦикла;	
		
		
		ТаблицаСубконто = Строка.СчетДт.ВидыСубконто;
		Ном=0;
		Для Каждого ТекущаяСтрока Из ТаблицаСубконто Цикл 
			Ном=Ном+1;
			Строка["ВидСубконтоДт"+Ном]=ТекущаяСтрока.ВидСубконто;
			Строка["СубконтоДт"+Ном]=СоответствиеСубконто.Получить(ТекущаяСтрока.ВидСубконто);
		КонецЦикла; 
		
		ТаблицаСубконто = Строка.СчетКт.ВидыСубконто;
		Ном=0;
		Для Каждого ТекущаяСтрока Из ТаблицаСубконто Цикл 
			Ном=Ном+1;
			Строка["ВидСубконтоКт"+Ном]=ТекущаяСтрока.ВидСубконто;
			Строка["СубконтоКт"+Ном]=СоответствиеСубконто.Получить(ТекущаяСтрока.ВидСубконто);
		КонецЦикла; 
		
		
	КонецЦикла;	
	
КонецПроцедуры	

 

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2865    1    John_d    11    

56

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4997    atdonya    22    

51

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    4091    ke.92@mail.ru    16    

62

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    9332    YA_418728146    6    

143

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2197    24    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

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

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16329    142    sapervodichka    112    

130

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7345    quazare    8    

110
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Alex1Cnic 148 24.01.19 16:57 Сейчас в теме
Актуально... у меня такая же петрушка.....
+
2. asbest 27.06.19 01:52 Сейчас в теме
Огромное спасибо!
+
3. rava_aal 10.09.19 14:14 Сейчас в теме
4. Teruzbat 19.11.19 01:23 Сейчас в теме
5. Absatarov 82 14.02.20 08:27 Сейчас в теме
6. Merkalov 8 06.10.20 08:12 Сейчас в теме
Полчаса велосепедил, потом решил загуглить, надо было сразу гуглить, спасибо!
+
7. yhor 17.03.21 13:09 Сейчас в теме
Интересно, что до сих пор никто не указал, что в коде ошибка. Почему используется одна переменная СоответствиеСубконто и для Кт, и для Дт? В результате перезатирается субконто Кт данными из субконто Дт.

Процедура УстановитьСубконтоПоНомерам(Таблица)
	Для Каждого Строка Из Таблица Цикл
		СоответствиеСубконтоДт=Новый Соответствие;
		СоответствиеСубконтоКт=Новый Соответствие;
		Для Сч=1 По Строка.СчетКт.ВидыСубконто.Количество() Цикл
			СоответствиеСубконтоКт.Вставить(Строка["ВидСубконтоКт"+Сч],Строка["СубконтоКт"+Сч]);
		КонецЦикла;	
		Для Сч=1 По Строка.СчетДт.ВидыСубконто.Количество() Цикл
			СоответствиеСубконтоДт.Вставить(Строка["ВидСубконтоДт"+Сч],Строка["СубконтоДт"+Сч]);
		КонецЦикла;	
		
		
		ТаблицаСубконто = Строка.СчетДт.ВидыСубконто;
		Ном=0;
		Для Каждого ТекущаяСтрока Из ТаблицаСубконто Цикл 
			Ном=Ном+1;
			Строка["ВидСубконтоДт"+Ном]=ТекущаяСтрока.ВидСубконто;
			Строка["СубконтоДт"+Ном]=СоответствиеСубконтоДт.Получить(ТекущаяСтрока.ВидСубконто);
		КонецЦикла; 
		
		ТаблицаСубконто = Строка.СчетКт.ВидыСубконто;
		Ном=0;
		Для Каждого ТекущаяСтрока Из ТаблицаСубконто Цикл 
			Ном=Ном+1;
			Строка["ВидСубконтоКт"+Ном]=ТекущаяСтрока.ВидСубконто;
			Строка["СубконтоКт"+Ном]=СоответствиеСубконтоКт.Получить(ТекущаяСтрока.ВидСубконто);
		КонецЦикла; 
		
		
	КонецЦикла;	
	
КонецПроцедуры
Показать
NikiforovVA; van_za; igor-pn; +3
8. The Ded 172 17.03.21 15:26 Сейчас в теме
Вы проверяли - перезатирается? Там же ключ с разным префиксом, "ВидСубконтоКт"+Сч и "ВидСубконтоДт"+Сч. Должно хорошо всё быть
+
9. yhor 18.03.21 12:36 Сейчас в теме
(8) Если вид субконто в Дт и в Кт совпадает, перезатирает.
+
10. vakrikun 133 13.04.23 19:50 Сейчас в теме
Автору спасибо!

Добавлю более корректный вариант, а то обращение через точку к ссылке, да к тому же в цикле - прям нехорошо. Вот эта конструкция "Счет.ВидыСубконто" за один проход цикла выполняется 4 раза, т.е. делает 4 запроса, причем не самых оптимальных в данном случае.
Лучше переписать через БухгалтерскийУчетВызовСервераПовтИсп.БухгалтерскийУчетВызовСервераПовтИсп() или ОбщегоНазначения.ЗначениеРеквизитаОбъекта().

ТаблицаПроводки = Движения.Хозрасчетный.Выгрузить();

Для Каждого СтрокаТаблицы Из ТаблицаПроводки Цикл
	
	СвойстваСчетаДт = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(СтрокаТаблицы.СчетДт);
	СвойстваСчетаКт = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(СтрокаТаблицы.СчетКт);
	
	ЗначенияСубконтоДт = Новый Соответствие;
	Для НомерСубконто = 1 По СвойстваСчетаДт.КоличествоСубконто Цикл
		ЗначенияСубконтоДт.Вставить(СтрокаТаблицы["ВидСубконтоДт"+НомерСубконто], СтрокаТаблицы["СубконтоДт"+НомерСубконто]);
	КонецЦикла;
	
	ЗначенияСубконтоКт = Новый Соответствие;
	Для НомерСубконто = 1 По СвойстваСчетаКт.КоличествоСубконто Цикл
		ЗначенияСубконтоКт.Вставить(СтрокаТаблицы["ВидСубконтоКт"+НомерСубконто], СтрокаТаблицы["СубконтоКт"+НомерСубконто]);
	КонецЦикла;
	
	Для НомерСубконто = 1 По СвойстваСчетаДт.КоличествоСубконто Цикл
		СтрокаТаблицы["ВидСубконтоДт"+НомерСубконто] = СвойстваСчетаДт["ВидСубконто"+НомерСубконто];
		СтрокаТаблицы["СубконтоДт"+НомерСубконто] = ЗначенияСубконтоДт.Получить(СвойстваСчетаДт["ВидСубконто"+НомерСубконто]);
	КонецЦикла;

	Для НомерСубконто = 1 По СвойстваСчетаКт.КоличествоСубконто Цикл
		СтрокаТаблицы["ВидСубконтоКт"+НомерСубконто] = СвойстваСчетаКт["ВидСубконто"+НомерСубконто];
		СтрокаТаблицы["СубконтоКт"+НомерСубконто] = ЗначенияСубконтоКт.Получить(СвойстваСчетаКт["ВидСубконто"+НомерСубконто]);
	КонецЦикла;

КонецЦикла;
Показать
twiny; +1
11. The Ded 172 13.04.23 19:58 Сейчас в теме
(10) Согласен, более красивый вариант, спасибо
+
Внимание! Тема сдана в архив