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

14.01.19

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

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

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

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

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

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

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

 

См. также

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

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    20512    dimanich70    81    

145

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

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

1 стартмани

18.03.2024    4116    3    John_d    11    

57

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

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

12.02.2024    18624    atdonya    24    

57

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

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

30.11.2023    5537    ke.92@mail.ru    16    

65

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

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

28.08.2023    14908    YA_418728146    7    

168

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

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

2 стартмани

22.08.2023    3621    57    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 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    18533    171    sapervodichka    112    

135
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Alex1Cnic 150 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 83 14.02.20 08:27 Сейчас в теме
6. Merkalov 11 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 177 17.03.21 15:26 Сейчас в теме
Вы проверяли - перезатирается? Там же ключ с разным префиксом, "ВидСубконтоКт"+Сч и "ВидСубконтоДт"+Сч. Должно хорошо всё быть
9. yhor 18.03.21 12:36 Сейчас в теме
(8) Если вид субконто в Дт и в Кт совпадает, перезатирает.
10. vakrikun 142 13.04.23 19:50 Сейчас в теме
Автору спасибо!

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

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

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

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

КонецЦикла;
Показать
zig31; twiny; +2 Ответить
11. The Ded 177 13.04.23 19:58 Сейчас в теме
(10) Согласен, более красивый вариант, спасибо
12. German_Tagil 43 03.06.24 08:22 Сейчас в теме
спасибо подправил обработку
Оставьте свое сообщение