Сравнение двух таблиц значений.

Публикация № 202381 30.09.13

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

сравнить таблица значений таблицазначений

Возникла потребность сравнить данные в двух таблицах сказать равны ли они.
В результате появилась неплохая как по мне функция.
В ней показана возможность как сравнивать значения с определенной точностью,
заготовлен шаблон для исключения колонок для сравнения.
Надеюсь кому-то упростит/ускорит скорость разработки.
 
 
Функция СравнимТЗ(ТЗ1,ТЗ2)
	нпп=0;
	ПолностьюИдентичны=ИСТИНА;
	Для каждого строкаТЗ1 из ТЗ1 цикл
		Идентичны=Истина;
		Если нпп>=ТЗ2.Количество() тогда Сообщить("Добавлена строка "+нпп);нпп=нпп+1;продолжить; КонецЕсли;
		СтрокаТЗ2=ТЗ2.Получить(нпп);
		
		СписокПропускаемыхКолонок=",Период,Регистратор,Активность,МоментВремени,"; //зяпятые должны обрамлять
		Для каждого колонкаТЗ1 из ТЗ1.Колонки цикл
			Если Найти(СписокПропускаемыхКолонок,","+колонкаТЗ1.Имя+",")<>0 тогда продолжить;КонецЕсли;
			
			
			
			былиидентичны=Идентичны;
			Если ТипЗнч(СтрокаТЗ2[колонкаТЗ1.Имя])=Тип("Число") тогда  //допускаем прогрешность 0.001
				ПроверкаИдентичности=СтрокаТЗ2[колонкаТЗ1.Имя]-строкаТЗ1[колонкаТЗ1.Имя];
				ПроверкаИдентичности=?(ПроверкаИдентичности>0,ПроверкаИдентичности,-ПроверкаИдентичности);
				Если  ПроверкаИдентичности>0.001 тогда
					ПроверкаИдентичности=ложь;
				Иначе
					ПроверкаИдентичности=Истина;
				КонецЕсли;
				
				Идентичны=Идентичны И ПроверкаИдентичности;
				
			Иначе
				Идентичны=Идентичны И СтрокаТЗ2[колонкаТЗ1.Имя]=строкаТЗ1[колонкаТЗ1.Имя];	
				
			КонецЕсли;
			ПолностьюИдентичны=ПолностьюИдентичны И Идентичны;
			
			Если былиидентичны<>Идентичны тогда
				СтрокаОшибкиТЗ1="ТЗ1 : ";
				СтрокаОшибкиТЗ2="ТЗ2 : ";
				СписокПропускаемыхКолонок=",Период,Регистратор,Активность,МоментВремени,"; //зяпятые должны обрамлять
				Для каждого тек2колонкаТЗ1 из ТЗ1.Колонки цикл
					Если Найти(СписокПропускаемыхКолонок,","+тек2колонкаТЗ1.Имя+",")<>0 тогда продолжить;КонецЕсли;
					СтрокаОшибкиТЗ1=СтрокаОшибкиТЗ1+тек2колонкаТЗ1.Имя+"="+СокрЛп(СтрокаТЗ1[тек2колонкаТЗ1.Имя])+" ; ";
					СтрокаОшибкиТЗ2=СтрокаОшибкиТЗ2+тек2колонкаТЗ1.Имя+"="+СокрЛп(СтрокаТЗ2[тек2колонкаТЗ1.Имя])+" ; ";										
				КонецЦикла;
				СтрокаОшибкиТЗ1=Лев(СтрокаОшибкиТЗ1,СтрДлина(СтрокаОшибкиТЗ1)-3);
				СтрокаОшибкиТЗ2=Лев(СтрокаОшибкиТЗ2,СтрДлина(СтрокаОшибкиТЗ2)-3);
				Сообщить("Первое отличие в колонке:"+колонкаТЗ1.Имя);
				Сообщить(СтрокаОшибкиТЗ1);
				Сообщить(СтрокаОшибкиТЗ2);
				Сообщить("-------------------------------------------------------------------------------------------------------------------------");
				
				
			КонецЕсли;
		КонецЦикла;
		Состояние(ТЗ1.Количество()-нпп);
		нпп=нпп+1;
	КонецЦикла;
	
	возврат ПолностьюИдентичны;
	
КонецФункции

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. awk 738 01.10.13 12:28 Сейчас в теме
Не буду комментировать, дабы не обижать.
2. brodya 01.10.13 12:44 Сейчас в теме
Для каждого строкаТЗ1 из ТЗ1 цикл

Дальше читать не стал.
ТЗ1 = Новый ТаблицаЗначений;
ТЗ1.Колонки.Добавить("Первая");
а = ТЗ1.Добавить();
а.Первая = 1;

ТЗ2 = Новый ТаблицаЗначений;
ТЗ2.Колонки.Добавить("Первая");
а = ТЗ2.Добавить();
а.Первая = 1;
а = ТЗ2.Добавить();
а.Первая = 2;
Показать

Такие таблицы получаются "ПолностьюИдентичны".
3. awk 738 01.10.13 13:19 Сейчас в теме
Как-то так проще, функциональней и надежней.


Функция Сравнить(ТаблицаОбразец, Таблица, СоответствиеКолонок=Неопределено, МассивИсключаемыхКолонок=Неопределено, Точность=Неопределено, ПравилаОкругления=Неопределено, ИгнорироватьИдентичныеВРезультате=Истина)
	// Проверка входящих параметров
	
	Если ПравилаОкругления=Неопределено Тогда
		ПравилаОкругления = РежимОкругления.Окр15как20;
	КонецЕсли;
	
	Массив = Новый Массив();
	Результат = Новый Структура("Имя, КоличествоВОбразце, Количество, Критерий","КоличествоСтрок",ТаблицаОбразец.Количество(),Таблица.Количество(),Таблица.Количество()=ТаблицаОбразец.Количество());
	Если Не ИгнорироватьИдентичныеВРезультате ИЛИ Не Результат.Критерий Тогда
		Массив.Добавить(Результат);
	КонецЕсли;
	
	Количество = Мин(ТаблицаОбразец.Количество(), Таблица.Количество()) - 1;
	ТипЧисло =  Тип("Число");
	ТипСтрока =  Тип("Строка");
	
	Если МассивИсключаемыхКолонок<>Неопределено и ТипЗнч(МассивИсключаемыхКолонок) = ТипСтрока Тогда
		МассивИсключаемыхКолонок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(МассивИсключаемыхКолонок,,Истина);
	КонецЕсли;
	
	Если СоответствиеКолонок=Неопределено Тогда
		СоответствиеКолонок = Новый Соответствие;
		Для каждого Колонка Из ТаблицаОбразец.Колонки Цикл
			Если Таблица.Колонки.Найти(Колонка.Имя) = Неопределено 
				ИЛИ (МассивИсключаемыхКолонок<>Неопределено И
				МассивИсключаемыхКолонок.Найти(Колонка.Имя) <> Неопределено) Тогда
				Продолжить;
			КонецЕсли;
			СоответствиеКолонок.Вставить(Колонка.Имя, Колонка.Имя);
		КонецЦикла;
	КонецЕсли;
	
	// Это можно вынести в функцию без параметров по умолчанию
	
	Для ит = 0 По Количество Цикл
		СтрокаОбразец = ТаблицаОбразец[ит];
		Строка = Таблица[ит];
		Для каждого КиЗ Из СоответствиеКолонок Цикл
			ТипОбразец = ТипЗнч(СтрокаОбразец[КиЗ.Ключ]);
			Тип = ТипЗнч(Строка[КиЗ.Значение]);
			Результат = Новый Структура("Имя, Образец, Поле, Критерий, НомерСтроки");
			Результат.НомерСтроки = ит;
			Результат.Имя = "Сравнение строки №"+ит;
			Результат.Образец = КиЗ.Ключ;
			Результат.Поле = КиЗ.Значение;
			Если Точность<>Неопределено И Тип = ТипОбразец И ТипОбразец = ТипЧисло Тогда
				Результат.Критерий = Окр(СтрокаОбразец[КиЗ.Ключ], Точность, ПравилаОкругления) = Окр(Строка[КиЗ.Значение], Точность, ПравилаОкругления);
			Иначе
				Результат.Критерий = СтрокаОбразец[КиЗ.Ключ] = Строка[КиЗ.Значение];
			КонецЕсли;
			Если Не ИгнорироватьИдентичныеВРезультате ИЛИ Не Результат.Критерий Тогда
				Массив.Добавить(Результат);
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	Возврат Массив;
КонецФункции


Показать
boldinov; ildarovich; vkr; dour-dead; +4 Ответить
5. ildarovich 7702 04.10.13 14:03 Сейчас в теме
Не хочется обсуждать очень уязвимый для критики вариант из статьи, а вот вариант (3) вполне себе "зрелый". Выскажусь не в плане критики этого варианта (это хороший и практичный вариант), а в плане того, что можно сделать по-другому.
1) Симметричность. Было бы здорово сравнивать таблицы, не выбирая таблицу-образец. То есть, чтобы при неравном числе строк выводились бы элементы разницы. В данном же случае, когда в проверяемой таблице строк больше, чем в образце, это не делается.
2) Маппинг колонок можно сделать проще - без соответствия. Для этого достаточно скопировать исходные таблицы, задав копируемые колонки. То есть два параметра: имена колонок через запятую из первой таблицы в первом параметре и имена колонок через запятую из второй таблицы во втором параметре. Тогда сравнивать можно будет колонки копий с одинаковым номером. И не потребуется раскладывать строки сторонней функцией.
3) Чувствительность сравнения. Тут либо описывать правила сравнения для всех простых типов: для строкового учет регистра и длины (или даже расстояния расстояние левенштейна), для дат - период точности (до секунд, до дней), для чисел - число знаков, либо уж ничего не задавать, а всегда делать точное сравнение. Потому что иначе идет перекос в сторону сравнения числовых таблиц значений и так и нужно будет назвать функцию.
4) Тип результата. Кажется, лучше помещать дельту не в массив структур, а в таблицу значений "Разница" с колонками: номер строки, номер колонки, значение в первой таблице, значение во второй таблице. Так у нас будет меньше разных сущностей. И тогда легче будет манипулировать с результатом в дальнейшем - группировать строки, сортировать, отбирать и так далее.

Кстати, для точного сравнения без маппинга можно использовать
ЗначениеВСтрокуВнутр(Таблица1) = ЗначениеВСтрокуВнутр(Таблица2)
d_bat; perepetulichka; Михаська; Maximysis; wolfsoft; awk; +6 Ответить
6. awk 738 04.10.13 14:55 Сейчас в теме
(5) ildarovich, Не могу не согласиться. Особенно если учесть, что функция написана целиком с 12-44 по 13-19 (не забываем прибавить время на чтение чужого, ...(вместо точек сами вставляйте) кода). :))) если в статье декларировать, что это шаблон (пусть будет идеальным), то скорость поиска/вспоминания шаблона, как мне кажется будет минут 10-20, что всего в два-три раза быстрее написания.

Когда писал специально применил похожий на статью подход (по индексно). Хотя для сравнения у пользователей есть прекрасный инструмент сравнение значений(от 1С) или KDIFF. Для программистов же важнее либо А=Б или А!=Б. Если А!=Б, то какие строки в каких столбцах.

Если уж делать различия типа стока добавлена/удалена/изменена, то не по принципу добавлены все строки которых больше чем в образце, а первая измененная строка делает измененными все строки после нее.
4. Yashazz 4509 03.10.13 12:31 Сейчас в теме
Есть такая вещь, как соединение таблиц в запросе. Если речь о сравнении колонок с типами, обрабатываемыми запросом (т.е. безо всяких там массивов и хранилищ значений), то можно и проще сделать, через запрос/СКД. А если ещё функции СКД подтянуть...
7. awk 738 04.10.13 15:03 Сейчас в теме
(4) Yashazz, Ну таки да, но для этого, иногда, надо вызов сервера делать, что не всегда приемлемо.
8. Lokiy 135 06.10.13 10:26 Сейчас в теме
Вся критика принимается, но когда мне надо было функцию для сравнения таблиц побыстрому, я не нагуглил, поэтому выложил чтобы кто-то кому тоже надо будет быстро - нагуглит. Ну нету на stackoverflow 1Са, а зря :).
9. AKV77 257 22.05.14 14:58 Сейчас в теме
Еще один вариант сравнения, который применяется в типовой УПП :
Функция СравнитьТаблицыЗначений(ТаблицаЗначений1, ТаблицаЗначений2)

	Если ТипЗнч(ТаблицаЗначений1) <> Тип("ТаблицаЗначений") ИЛИ ТипЗнч(ТаблицаЗначений2) <> Тип("ТаблицаЗначений") Тогда
		Возврат Ложь;
	КонецЕсли; 
	
	Если ТаблицаЗначений1.Количество() <> ТаблицаЗначений2.Количество() Тогда
		Возврат Ложь;
	КонецЕсли; 

	Если ТаблицаЗначений1.Колонки.Количество() <> ТаблицаЗначений2.Колонки.Количество() Тогда
		Возврат Ложь;
	КонецЕсли; 

	Для каждого Колонка Из ТаблицаЗначений1.Колонки Цикл
		
		Если ТаблицаЗначений2.Колонки.Найти(Колонка.Имя) = Неопределено Тогда
			Возврат Ложь;
		КонецЕсли;
		
		Для каждого СтрокаТаблицы Из ТаблицаЗначений1 Цикл
		
			Попытка
			
				Если СтрокаТаблицы[Колонка.Имя] <> ТаблицаЗначений2[ТаблицаЗначений1.Индекс(СтрокаТаблицы)][Колонка.Имя] Тогда
				
					Возврат Ложь;
				
				КонецЕсли;
			
			Исключение
				
				Возврат Ложь;
				
			КонецПопытки;
		
		КонецЦикла; 
	
	КонецЦикла; 
	
	Возврат Истина;
	
КонецФункции // СравнитьТаблицыЗначений()
Показать
10. pakill 43 12.08.16 20:27 Сейчас в теме
Перебор строк и колонок - это цикл в цикле, что не очень производительно.
Для решения задач типа:
- сравнить таблицы с учетом или без учета порядка строк
- поиск дублирующихся строк
удобно пользоваться методом таблицы значений Свернуть().

Идея такова:
1. Копируем обе таблицы в одну общую таблицу
2. В общую таблицу добавляем колонку "Показатель". Заполняем его следующим образом: в строках, полученных из первой таблицы ставим Показатель = 1, в строках из второй таблицы ставим Показатель = 2
3. Сворачиваем общую таблицу: ТаблицаОбщая.Свернуть(ВсеСравниваемыеКолонки, "Показатель");
4. После свертки совпавшие строки будут иметь Показатель = 3, а в несовпавших строках будет Показатель = 1, либо Показатель = 2

Таким образом, отсутстсвие строк с показателем, равным 1 или 2, является признаком равенства таблиц.

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

Вот процедура, реализующая данный подход

// Ищет отличия двух таблиц
//
// Параметры:
//		Таблица1                - ТаблицаЗначений или ТабличнаяЧасть - первая таблица
//		Таблица2                - ТаблицаЗначений или ТабличнаяЧасть - вторая таблица
//		МассивСтрокиТаблицы1    - Выходной параметр, массив строк Таблицы1 - строки Таблицы1, 
//		                          несовпадающие с соответствующими строками Таблицы2
//		МассивСтрокиТаблицы2    - Выходной параметр, массив строк Таблицы2 - строки Таблицы2,
//		                          несовпадающие с соответствующими строками Таблицы1
//		СтрокаПереченьКолонок   - Строка - имена колонок, по которым сравниваются строки таблиц.
//		                          Если пустая строка, то подразумеваются все колонки Таблицы1
//		СтрокаИсключемыеКолонки - Строка - колонки, которые не должны участвовать в сравнении
// 
// Описание: 
//		Процедура сравнивает таблицы, и возвращает несовпадающие строки в двух массивах
//		
// Пример:
//
//		Документ1 = ...
//		Документ2 = ...
//		СтрокиОтличия1 = Неопределено;
//		СтрокиОтличия2 = Неопределено;
//		НайтиОтличияТаблиц(Документ1.Товары, Документ2.Товары, СтрокиОтличия1, СтрокиОтличия2);
//		Если СтрокиОтличия1.Количество() + СтрокиОтличия2.Количество() = 0 Тогда
//			Сообщить("Табличные части документов совпадают");
//		КонецЕсли;
//		
Процедура НайтиОтличияТаблиц(Таблица1, Таблица2, МассивСтрокиТаблицы1, МассивСтрокиТаблицы2, СтрокаПереченьКолонок = "", СтрокаИсключемыеКолонки = "")
	
	#Область Определение_реального_перечня_колонок
		// Определение реального перечня колонок с учетом необязательных параметров
		
		// В области определяется переменная РеальныйПереченьКолонок и ничего больше
		
		СтруктураИсключаемыеКолонки = Новый Структура(СтрокаИсключемыеКолонки);
		
		Если ЗначениеЗаполнено(СтрокаПереченьКолонок) Тогда
			
			Если ЗначениеЗаполнено(СтрокаИсключемыеКолонки) Тогда
				// Странно, что заполнены оба необязательных параметра. 
				// Тем не менее, выполним это требование
				РеальныйПереченьКолонок = "";
				СтруктураПереченьКолонок = Новый Структура(СтрокаПереченьКолонок);
				
				Для каждого ЭлементСтруктуры Из СтруктураПереченьКолонок Цикл
					ИмяКолонки = ЭлементСтруктуры.Ключ;
					Если Не СтруктураИсключаемыеКолонки.Свойство(ИмяКолонки) Тогда
						РеальныйПереченьКолонок = РеальныйПереченьКолонок + ?(РеальныйПереченьКолонок = "", "", ", ") + ИмяКолонки;
					КонецЕсли;
				КонецЦикла;
			Иначе
				РеальныйПереченьКолонок = СтрокаПереченьКолонок;
			КонецЕсли;
			
		Иначе
			
			РеальныйПереченьКолонок = "";
			
			Если ТипЗнч(Таблица1) = Тип("ТаблицаЗначений") Тогда
				Колонки = Таблица1.Колонки;
			Иначе
				Колонки = Таблица1.ВыгрузитьКолонки().Колонки;
			КонецЕсли;
			
			Для каждого Колонка Из Колонки Цикл
				Если Не СтруктураИсключаемыеКолонки.Свойство(Колонка.Имя) Тогда
					РеальныйПереченьКолонок = РеальныйПереченьКолонок + ?(РеальныйПереченьКолонок = "", "", ", ") + Колонка.Имя;
				КонецЕсли;
			КонецЦикла;
			
		КонецЕсли;
	
	#КонецОбласти
	
	
	#Область Создание_общей_таблицы
	
		// Создается объединенная общая таблица, заполненная строками обеих таблиц
		// с двумя дополнительными системными колонками
		
		// В области определяется переменная ТаблицаОбщая и ничего больше		
		
		Если ТипЗнч(Таблица1) = Тип("ТаблицаЗначений") Тогда
			ТаблицаОбщая = Таблица1.Скопировать(, РеальныйПереченьКолонок);
		Иначе
			ТаблицаОбщая = Таблица1.Выгрузить(, РеальныйПереченьКолонок);
		КонецЕсли;
		
		ТаблицаОбщая.Колонки.Добавить("sys_ИндексСтроки");
		ТаблицаОбщая.Колонки.Добавить("sys_ПоказательТаблицы");
		
		ИндексСтроки = 0;
		Для каждого СтрокаОбщейТаблицы Из ТаблицаОбщая Цикл
			СтрокаОбщейТаблицы.sys_ИндексСтроки = ИндексСтроки;
			СтрокаОбщейТаблицы.sys_ПоказательТаблицы = 1;
			ИндексСтроки = ИндексСтроки + 1;
		КонецЦикла;
		
		ИндексСтроки = 0;
		Для каждого СтрокаТаблицы2 Из Таблица2 Цикл
			СтрокаОбщейТаблицы = ТаблицаОбщая.Добавить();
			ЗаполнитьЗначенияСвойств(СтрокаОбщейТаблицы, СтрокаТаблицы2);
			СтрокаОбщейТаблицы.sys_ИндексСтроки = ИндексСтроки;
			СтрокаОбщейТаблицы.sys_ПоказательТаблицы = 2;
			ИндексСтроки = ИндексСтроки + 1;
		КонецЦикла;
	
	#КонецОбласти
	
	
	// Сворачивание совпадающих строк
	
	ТаблицаОбщая.Свернуть("sys_ИндексСтроки, "  + РеальныйПереченьКолонок, "sys_ПоказательТаблицы");
	
	
	
	// Получение результатов
	
	МассивСтрокиТаблицы1 = Новый Массив;
	СтрокиСПоказателем1 = ТаблицаОбщая.НайтиСтроки(Новый Структура("sys_ПоказательТаблицы", 1));
	Для каждого СтрокаОбщейТаблицы Из СтрокиСПоказателем1 Цикл
		МассивСтрокиТаблицы1.Добавить(Таблица1[СтрокаОбщейТаблицы.sys_ИндексСтроки]);
	КонецЦикла;
	
	МассивСтрокиТаблицы2 = Новый Массив;
	СтрокиСПоказателем2 = ТаблицаОбщая.НайтиСтроки(Новый Структура("sys_ПоказательТаблицы", 2));
	Для каждого СтрокаОбщейТаблицы Из СтрокиСПоказателем2 Цикл
		МассивСтрокиТаблицы2.Добавить(Таблица2[СтрокаОбщейТаблицы.sys_ИндексСтроки]);
	КонецЦикла;
	
	
	// Замечание. Строки ОбщейТаблицы, у которых sys_ПоказательТаблицы = 3, это совпавшие
	// строки Таблицы1 и Таблицы2
	
КонецПроцедуры
Показать
tsatsur; Jestery; CbIHok; 33lab; +4 Ответить
11. AtamanovYS 132 15.01.21 14:59 Сейчас в теме
(10) Зачем sys_ИндексСтроки ? Чтобы порядок соблюдался ? Я убрал его, всё идеально работает. Порядок, как правило, не так важен.
Как вариант в этой функции параметр добавить "Учитывать порядок" и от этого добавлять или не добавлять служебное поле sys_ИндексСтроки
Оставьте свое сообщение

См. также

Выполнение длительных операций в фоновых заданиях

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

Как программно запустить длительные операции в фоновых заданиях без блокировки пользовательского интерфейса.

19.01.2023    2037    programmer_2019    6    

26

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

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

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

18.07.2022    5487    quazare    8    

101

Хитрости СКД. Часть 3

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

Столкнулся с тем, что мне приходится писать гору отчетов. Во многих приходится использовать повторяющиеся приемы. Решил написать шпаргалку, которая, надеюсь пригодится не только мне. В этой статье: Объединение ячеек в отчете только на определенном уровне иерархии, Постобработка итогов в табличном документе, Скрытие колонок в зависимости от количества месяцев в периоде.

28.05.2022    6666    milkers    11    

87

Базовые принципы работы с регламентными заданиями подсистем БСП

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

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

22.05.2022    9331    quazare    24    

55

Модули общего назначения - готовые полезные функции и процедуры конфигураций на БСП

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

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

25.04.2022    10156    quazare    11    

130

Вывод табличных документов с разной ориентацией страниц в один pdf файл

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

Привожу код для вывода нескольких табличных документов c разной ориентацией страниц в один файл pdf.

06.04.2022    2701    sdjoker    5    

28

Полезный код для программистов 1С (часть 3). Подготовка печатных форм + подсистема Управление печатью (БСП)

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

Мы все любим 1С, не так ли? Вот дает 1С прекрасный механизм возможности модификации макетов печатных форм в БСП. А из всех рекомендаций это получение макета и заполнение параметров областей. И вы спросите: "А что не так... ты печатные формы накодить не можешь без указаний сверху?". Да вот в том то и дело, что я могу все. А вот пользователям от такого механизма пользы 0, если из всех доступных изменений остаются только шрифты, да текст произвольный накинуть. А ведь можно больше, надо только соблюдать несколько правил при подготовке печатных форм...

07.03.2022    9846    vandalsvq    0    

56

Убираем параметры из отбора СКД

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

Заметка о некоторых технических нюансах параметров данных и отборов СКД.

17.02.2022    5398    Yashazz    29    

31

Конвертируем печатную форму pdf в картинку (jpg, gif, png и прочие) на сервере

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

Была поставлена интересная задача конвертировать печатную форму в файл картинку. По условию задачи клиенту на почту нужно присылать только файл картинку (jpg, gif).

22.12.2021    6351    John_d    25    

46

Несколько простых приемов для удобной работы в конфигураторе

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

Простая и удобная среда разработки 1С:Предприятия позволяет практически любому человеку начать работать под капотом 1С - в конфигураторе. Время идет, новички становятся программистами, специалистами, а об удобных приемах работы узнают годами, по ходу своего карьерного пути. А здорово было бы, если бы все знали удобные приемы в начале своего пути? Эти несколько приемов будут полезны новичкам, так как они затрагивают ту область работы, с которой приходится сталкиваться в начале карьеры.

12.11.2021    13566    acces969    95    

142

Замена символов русской раскладки на английские в штрихкоде

Сканер штрих-кода Универсальные функции Конфигурации 1cv8 Бесплатно (free)

Берешь такой сканер, сканируешь, а у тебя русская раскладка. И началось - переключи, опять отскань... Простое решение, которое можно доделать под себя.

29.08.2021    1857    Mi11er    0    

5

Из Word в табличный документ

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

Быстро и просто: текст, списки, таблицы. Готовый код

18.08.2021    4744    Yashazz    6    

64

Лямбда-функции на встроенном языке 1С

Универсальные функции Бесплатно (free)

Анонимная функция средствами 1С. Пророчества грядущих функций первого класса и ООП. Другие смелые заявления.

28.06.2021    7168    AntonProgma    306    

23

Префиксация объектов - полезный типовой функционал БСП

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

В данной публикации предлагаю рассмотреть основные типовые возможности библиотеки стандартных подсистем (БСП), касаемые префиксации объектов конфигураций.

21.06.2021    10884    quazare    4    

61

Предотвращение многократного вызова "ПриПолученииДанных" во время поиска в табличном поле в обычных формах

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

Долго искал решение: как при выводе строк заполнить значениями колонки, которые созданы программно, чтобы, не было тормозов при стандартном поиске. И с минимальными изменениями (легко контролируемыми, при обновлении).

07.04.2021    3618    Vlad_CK    9    

25

Генератор QR кодов для 1С без компонент через HTTP API

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

Самый простой, на мой взгляд, способ получить QR код для 1СV8. Без внешних компонент, как говорится, бесплатно, без смс и регистрации))

17.12.2020    9189    shell_maxim    28    

30

Сохранение настроек

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

Делюсь еще одним не самым очевидным способом хранения настроек в базах на БСП без доработки конфигурации. Весь код в статье.

22.11.2020    9828    ixijixi    8    

67

Произвольные колонтитулы и повтор шапки таблицы в табличном документе (функция)

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

Пример рекурсивной функции, при помощи которой в табличный документ можно выводить верхний или нижний колонтитулы с произвольным содержимым, а также делать повтор шапки таблицы (или таблиц, если их несколько).

07.10.2020    13533    ellavs    7    

39

Лайфхаки для разработчиков 1С. Часть 1

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

Собрали 20 лайфхаков, которые используют наши программисты при работе с 1С. Формы, контрагенты, СКД, процедуры, глюки платформы и многое другое. В этой статье публикуем первую часть.

30.09.2020    9665    Neti    47    

68

Самый простой парсинг и обработка веб-страниц в 1С

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

Рассмотрим самый простой парсинг веб-страниц средствами платформы 1С и еще некоторые полезные приемы работы с веб-страницами.

07.08.2020    24942    Infostart    30    

146

Полезные встроенные функции для работы с печатными формами и не только на УТ 11.4 и БП 3.0 (сравнение)

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

В данном обзоре приведу примеры встроенных используемых функций для работы с печатными формами на примерах конфигураций Управление торговлей 11.4 и Бухгалтерия 3.0.

10.07.2020    15146    quazare    7    

92

Вывод дерева в табличный документ СКД

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

Вывод содержимого элемента формы "ДанныеФормыДерево" в табличный документ средствами СКД.

09.07.2020    7125    Yashazz    12    

25

Форма выбора (подбор) в управляемых формах

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

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

08.05.2020    178935    user5300    40    

289

Получаем уровень группировки ячейки табличного документа

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

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

23.03.2020    8760    maxx    16    

57

Сходство Джаро - Винклера. Нечеткое сравнение строк

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

В области информатики и статистики сходство Джаро - Винклера представляет собой меру схожести строк для измерения расстояния между двумя последовательностями символов. В публикации рассмотрены некоторые особенности алгоритма, и представлен вариант его реализации на языке 1С.

25.12.2019    11295    brooho    21    

170

Автоматическое создание связанного объекта в базе 1С: Документооборот через бесшовную интеграцию

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

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

23.12.2019    6150    pavelpribytkin96    3    

39

Разбор любого JSON-объекта в соответствующую структуру

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

Данная публикация предназначена разработчикам 1С, которым приходиться разбирать данные формата JSON. Выложенный пример кода создает объект типа Структура, полностью повторяющий структуру данных формата JSON.

13.11.2019    37854    user665435_al.windstorm    16    

30

Обработка расширением на клиенте

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

Описываю нетривиальный прием работы с расширением, который позволит относительно быстро реализовывать некоторые обработки данных. Суть: обработка данных на клиенте с использованием методов, которые реализованы разработчиком конфигурации на форме объекта. Если эти методы есть вне модуля формы объекта (общий модуль, модуль менеджера, модуль объекта)- лучше сделать обработку более простым способом.

31.10.2019    8753    EvgenURNN    10    

26

Быстрое создание наполненных коллекций

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

Разберем самые частые способы создания коллекции, значения которой известны заранее. И сравним скорость их выполнения.

28.10.2019    9140    SeiOkami    69    

68

Преобразование XML в таблицу значений или иной объект 1С методом XSL преобразования

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

Сразу открою интригу, напрямую прочитать XML, не содержащий объект 1С, не удастся. Статья раскрывает способы привести XML к формату, который возможно прочитать средствами платформы.

24.10.2019    21337    kraspila    33    

58

Обертка функций Excel на русском. Ускорение процесса разработки.

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

Устали переключаться с русского на английский и обратно при работе с таблицами Excel из 1С? Сборка наиболее необходимых функций и методов работы с Excel, обернутых в функции 1С на русском языке.

24.10.2019    8931    DmitryKotov    6    

56

Методика независимой системы "Подписки на события"

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

В этой небольшой статье я хочу вам предложить пошаговое описание разработки системы управления "Подписками на события" для документов. Цель разработки - возможность управления подписками в вашей конфигурации, не прибегая к программированию через конфигуратор. Думаю, будет полезно и интересно!

17.10.2019    18767    aximo    35    

71

Полезные процедуры и функции для программиста

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

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

07.10.2019    47960    HostHost    41    

284