Проверка идентичности баз 1с7 по OLE

11.02.12

База данных - Инструменты администратора БД

Обработка позволяет проверить идентичность двух баз по OLE. Универсальная.
Удобна, если сравниваются распределенные базы или база с архивом.

Скачать файлы

Наименование Файл Версия Размер
down.zip
.zip 10,28Kb
41
.zip 10,28Kb 41 Скачать

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

Документы и справочники синхронизируются по внутреннему значению идентификатора.

Сравниваются только документы и справочники, на которые есть ссылки из документов.

Обработка не только сравнивает существующие в обоих базах документы, но и умно находит те документы, которые есть только в одной из баз.

В результате в окно сообщений выдается протокол вида:

В текущей базе не найден документ: ПриходнаяНакладная №  РН-000889 от 11.10.2008
В текущей базе не найден документ: РасходнаяНакладная №  РН-000178 от 12.09.2005
Документы не идентичны: ПриходнаяНакладная №  ПН-002234 от 01.12.2009
Документ базы не существует в OLE-базе: ПриходнаяНакладная №  ПН-000234 от 01.02.2008

См. также

Монопольное открытие формы обработки 1с77

Инструменты администратора БД Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

Блокировка открытия формы обработки одним пользователем.

1 стартмани

24.05.2023    569    igor7777    1    

0

Групповое переименование файлов для 1С 7.7

Инструменты администратора БД Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

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

1 стартмани

18.02.2022    3776    0    igor7777    6    

2

[7.7 ТиС. СТОП-БАРДАК] Автоперенос непроведенных документов на текущий день

Инструменты администратора БД Оперативный учет 7.7 1С:Торговля и склад 7.7 Управленческий учет Абонемент ($m)

Боремся с бардаком. Работы в прошлых датах запрещены. Непроведенные документы (по разным причинам) - автоматом переносятся в начало текущего дня при запуске любого первого сеанса 1С в текущем дне. Задержка старта 1С - практически незначима. Не требует настройки, не требует допрограммирования (исключая один оператор вставки в процедуру старта системы). Можно обработку выполнять вручную с любой периодичностью.

2 стартмани

25.05.2020    5678    2    CheBurator    3    

2

Анализ 1С: Предприятие 7.7 с помощью ELK стека

Журнал регистрации Инструменты администратора БД Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Рассмотрим систему на базе Elasticsearch, Logstash и Kibana (ELK Stack) для анализа логов 1С Предприятие 7.7 с целью визуализации и анализа событий 1С.

22.01.2019    11074    phsin    20    

27

Автоматическое объединение конфигураций 1С 7.7

Инструменты администратора БД Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Скрипт позволяет выполнить объединение конфигураций и реструктуризацию из командной строки. Объединение выполняется штатными средствами конфигуратора 1С 7.7, взаимодействие с которым происходит путем посылки нажатий клавиш. Пригодится, если есть необходимость обновить или постоянно обновлять множество ИБ.

1 стартмани

22.04.2017    15656    4    devlabnn    2    

6

Перепроведение по счету

Инструменты администратора БД Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 Украина Бухгалтерский учет Абонемент ($m)

Перепроведение по счету для конфигурации Бухгалтерский учет для Украины, 1С: Предприятие 7.7

1 стартмани

23.09.2016    3743    1    Genyak    1    

0

Решение проблем с печатью, предварительным просмотром печати, пакетной печатью 1С: 7.7 в терминале

Инструменты администратора БД Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Периодически сталкивался со следующими проблемами при печати в 1С: 7.7 работающей под терминалом: 1) После замены принтера на клиентской машине 1С пытается печатать на старый принтер. 2) Отсутствует предварительный просмотр при печати. 3) Не работает печать без предварительного просмотра (пакетная печать документов). 4) В некоторых формах печатает, в некоторых нет.

1 стартмани

09.06.2016    27099    18    tux    3    

1

Логирование в 1С

Инструменты администратора БД Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

Часто бывает необходимо отслеживать состояние часто повторяющихся регламентных заданий. Например, синхронизация данных с IP-телефонией, которая может производиться каждую минуту, синхронизация с сайтами, синхронизация данных с различными системами. Использовать для этих целей логирование 1С чрезвычайно неэффективно и не удобно. В таких случаях удобно использовать подход, применяемый в Unix-системах: писать логи в обычные текстовые файлы, а потом делать их обработку через эффективно работающие Unix-команды: grep, tail, cat, less и т.п.

18.05.2016    34828    rudjuk    21    

33
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. maxpiter 147 15.02.12 09:42 Сейчас в теме
Если можно, коротко опишите принцип сравнения табличных частей документов.
Если тестировали, то тысячу документов за какое, приблизительно, время сравнивает?
2. fixin 4252 15.02.12 10:32 Сейчас в теме
(1) по количеству документов не скажу, но сравнение УТ и Розницы по 40 магазинам за 2,5 года с количеством строк в ОРП где-то 200 в день (+ приходные, списания, перемещения), занимает часов шесть. Учитывая, что документы соотносятся по регистру СоответствияОбъектовОбмена, т.е. для каждого дока идет поиск по GUID (на это тратится некоторое время).

Табличные части сравниваются по сумме. Но если хотите, можете использовать хэш по товарам. Хэш-функций на инфостарте много, хотите, могу свою дать. ;-)
3. maxpiter 147 15.02.12 10:42 Сейчас в теме
(2) >> Табличные части сравниваются по сумме
а если номенклатурная позиция изменилась и цена у нее такая же, то сравнение выдаст что документы идентичны?
или же вы хотели сказать, что сравнение идет по контрольной сумме документа?

Спасибо за хеш-функцию, хотите, можете выложить на инфостарт ;-)
4. fixin 4252 15.02.12 11:06 Сейчас в теме
Ой, простите, не заметил, что это тема про сравнение 7-ки, а не 1с8. Подумал про другую обработку.
ДЛя 1с7 работает быстрее, для ТЧ сопоставляются все реквизиты по UID....

(3) Можете взять за основу эту неуниверсальную функцию, переделав ее на все реквизиты:
Функция ПолучитьСтруктуруДокумента(ДокументОбъект, Проведен = Неопределено) Экспорт
	
	Р = Новый Структура();
	
	МД = ДокументОбъект.Метаданные();
	
	КонтрольнаяСумма = 0;
	
	Если ОбщегоНазначения.ЕстьРеквизитДокумента("Склад", МД) Тогда
		Р.Вставить("Склад", ДокументОбъект.Склад);
	КонецЕсли;
	
	Если ОбщегоНазначения.ЕстьРеквизитДокумента("СкладОтправитель", МД) Тогда
		Р.Вставить("Склад", ДокументОбъект.СкладОтправитель);
	КонецЕсли;
	
	Если ОбщегоНазначения.ЕстьРеквизитДокумента("СкладПолучатель", МД) Тогда
		Р.Вставить("Склад", ДокументОбъект.СкладПолучатель);
	КонецЕсли;
	
	Если ОбщегоНазначения.ЕстьРеквизитДокумента("Контрагент", МД) Тогда
		Р.Вставить("Контрагент", ДокументОбъект.Контрагент);
	КонецЕсли;
	
	Если ОбщегоНазначения.ЕстьРеквизитДокумента("ДоговорКонтрагента", МД) Тогда
		Р.Вставить("ДоговорКонтрагента", ДокументОбъект.ДоговорКонтрагента);
	КонецЕсли;
	
	Если Проведен = Неопределено Тогда
		Р.Вставить("Проведен", ДокументОбъект.Проведен);
	Иначе
		Р.Вставить("Проведен", Проведен);
	КонецЕсли;
	
	Р.Вставить("Дата", НачалоДня(ДокументОбъект.Дата)); //С точностью до начала дня

	
	
	Если Р.Свойство("Склад") Тогда
		КонтрольнаяСумма = КонтрольнаяСумма + УникальныйИдентификаторВЧисло(Р.Склад.УникальныйИдентификатор());
	КонецЕсли;
	Если Р.Свойство("Склад2") Тогда
		КонтрольнаяСумма = КонтрольнаяСумма + УникальныйИдентификаторВЧисло(Р.Склад2.УникальныйИдентификатор());
	КонецЕсли;
	Если Р.Свойство("Контрагент") Тогда
		КонтрольнаяСумма = КонтрольнаяСумма + УникальныйИдентификаторВЧисло(Р.Контрагент.УникальныйИдентификатор());
	КонецЕсли;
	Если Р.Свойство("ДоговорКонтрагента") Тогда
		КонтрольнаяСумма = КонтрольнаяСумма + УникальныйИдентификаторВЧисло(Р.ДоговорКонтрагента.УникальныйИдентификатор());
	КонецЕсли;
	
	Если Р.Проведен Тогда
		КонтрольнаяСумма = КонтрольнаяСумма + 1231231231231878791378192379;
	Иначе
		КонтрольнаяСумма = КонтрольнаяСумма + 8798794323847324923423847234;
	КонецЕсли;
	
	КонтрольнаяСумма = КонтрольнаяСумма + 3412* Год(Р.Дата) + 34879 * Месяц(Р.Дата) + 34349 * День(Р.Дата);

	
	ИтогоКоличество = 0;
	ИтогоСумма = 0;
	
	Если ОбщегоНазначения.ЕстьТабЧастьДокумента("Товары", МД) Тогда
		Для Каждого Строка ИЗ ДокументОбъект.Товары Цикл
			ТекКоличество = 0;
			ТекСумма = 0;
			ТекМножитель = 0;
			Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Количество", МД, "Товары") Тогда
				ТекКоличество = Строка.Количество;
				Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Коэффициент", МД, "Товары") И Строка.Коэффициент <> 0 Тогда
					ТекКоличество = ТекКоличество * Строка.Коэффициент;
				КонецЕсли;
			КонецЕсли;
			Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Сумма", МД, "Товары") Тогда
				ТекСумма = Строка.Сумма;
			КонецЕсли;
			ИтогоКоличество = 	ИтогоКоличество = + ТекКоличество;
			ИтогоСумма = 	ИтогоСумма = + ТекСумма;
			
			Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Номенклатура", МД, "Товары")  Тогда
				ТекМножитель = ТекМножитель + УникальныйИдентификаторВЧисло(Строка.Номенклатура.УникальныйИдентификатор());
			КонецЕсли;
			
			ТекМножитель = ТекМножитель + ТекКоличество * 1000000 + ТекСумма;
			
			КонтрольнаяСумма = КонтрольнаяСумма + Строка.НомерСтроки * ТекМножитель;;
			
		КонецЦикла;
	КонецЕсли;
	
	
	//Преобразовываем контрольную сумму в 32 разряда
	КонтрольнаяСумма32 = ВыровнятьКонтрольнуюСумму32(КонтрольнаяСумма); 
	
	Р.Вставить("Количество", ИтогоКоличество);
	Р.Вставить("Сумма", ИтогоСумма);
	Р.Вставить("КонтрольнаяСумма", КонтрольнаяСумма32);
	Р.Вставить("ИсходнаяКонтрольнаяСумма", КонтрольнаяСумма);
	
	Возврат Р;

КонецФункции



//=== МАТЕМАТИКА ПОДПИСЕЙ ===

Функция ВыровнятьКонтрольнуюСумму32(Ч, Делитель = 100000000000000000000000000000000) Экспорт
	ТекЧ = Ч;
	Пока истина Цикл
		Целая = Цел(ТекЧ / Делитель);
		Если Целая < 1 Тогда
			Прервать;
		КонецЕсли;
		ТекЧ = Целая + ТекЧ % Делитель;
	КонецЦикла;
	Возврат ТекЧ;
КонецФункции

Функция УникальныйИдентификаторВЧисло(GUID) Экспорт
    //Назначение: Преобразует GUID в число
 
    //ДатаСоздания: 20080101
 
    //Автор: Fixin
 
    //Тестирована: Да
 
    //Благодарность: Алмазов Петр 
 
    //Ссылка: v8: Как перевести ГУИД в число и обратно?
 
    //Ссылка: http://partners.v8.1c.ru/forum/thread.jsp?id=640731
 
    //Пример: 
 
    //    declare @a uniqueidentifier 
 
    //    set @a = '40bf67bb-742c-4355-abb9-dff6a60bd701' 
 
    //    print cast(@a as varbinary) 
 
    //    0xBB67 BF40 2C74 5543 ABB9 DFF6 A60B D701
 
    //Пример:
 
    //    40bf67bb-742c-4355-abb9-dff6a60bd701'.ToByteArray()=
 
    //    0xBB67 BF40 2C74 5543 ABB9 DFF6 A60B D701
 
    //    '22345200-abe8-4f60-90c8-0d43c5f6c0f6'.ToByteArray()=
 
    //    0x0052 3422 E8AB 604F 90C8 0D43 C5F6 C0F6
 
    //Описание:
 
    //    Конвертирует GUID в число с правильным расположением тетрад.
 
    //    Можно быть уверенным что функции cast языка SQL и ToByteArray языка JAVA конвертируют так же.
 
    
    СтрокаGUID = СтрЗаменить(Строка(GUID),"-","");
    
    //Первая восьмерка
 
    ч1 = Сред(СтрокаGUID, 1, 2);
    ч2 = Сред(СтрокаGUID, 3, 2);
    ч3 = Сред(СтрокаGUID, 5, 2);
    ч4 = Сред(СтрокаGUID, 7, 2);
    
    //Первая четверка
 
    ч5 = Сред(СтрокаGUID, 9, 2);
    ч6 = Сред(СтрокаGUID, 11, 2);
    
    //Вторая четверка
 
    ч7 = Сред(СтрокаGUID, 13, 2);
    ч8 = Сред(СтрокаGUID, 15, 2);
    
    //Хвост
 
    ч9 = Сред(СтрокаGUID, 17, 16);
    
    СтрGUID = ч4 + ч3 + ч2 + ч1 + ч6 + ч5 + ч8 + ч7 + ч9;
    Ч = бфМат.ПереводИзСистемыСчисленияВЧисло(СтрGUID, 16);
    
    Возврат Ч;
КонецФункции

Показать
5. maxpiter 147 15.02.12 11:11 Сейчас в теме
(4) это же не 7.7 :)

спасибо за ответы.
6. fixin 4252 15.02.12 16:35 Сейчас в теме
(5) да, вот я и говорю, что перепутал... строки сравниваюстя по каждому реквизиту 1:1
Оставьте свое сообщение