Значение 1С8 -> ЗначениеВФайл 1C77 (ЗначениеВСтрокуВнутр, ЗначениеВСтроку)

19.04.21

Интеграция - Перенос данных 1C

Код который помог мне передавать в платформу 7.7 такие объекты как Структура, Массив (есть возможность передавать таблицу значений)

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

Массив = Новый Массив; 
Массив.Добавить(1);
Массив.Добавить(2);
Массив.Добавить(3);
Массив.Добавить(4);

Структура = Новый Структура; 
Структура.Вставить("STR1", 1);
Структура.Вставить("STR2", 1);
Структура.Вставить("STR3", 3);

Значение=Новый Структура; 
Значение.Вставить("Массив",Массив);
Значение.Вставить("Структура",Структура);

Такая структура данных в 1С77 представляется в ввиде:

Массив = СоздатьОбъект("СписокЗначений"); 
Массив.ДобавитьЗначение(1);
Массив.ДобавитьЗначение(2);
Массив.ДобавитьЗначение(3);
Массив.ДобавитьЗначение(4);

Структура = СоздатьОбъект("СписокЗначений"); 
Структура.ДобавитьЗначение(1,"STR1");
Структура.ДобавитьЗначение(1,"STR2");
Структура.ДобавитьЗначение(3,"STR3");

Параметр=СоздатьОбъект("СписокЗначений"); 
Параметр.Установить("Массив", Массив);
Параметр.Установить("Структура",Структура);

Через призму функции ЗначениеВФайл

{"VL",{
{{"VL",{
{{"N","0","0","0","0","0","1"},""},
{{"N","0","0","0","0","0","2"},""},
{{"N","0","0","0","0","0","3"},""},
{{"N","0","0","0","0","0","4"},""}}},"Массив"},
{{"VL",{
{{"N","0","0","0","0","0","1"},"STR1"},
{{"N","0","0","0","0","0","1"},"STR2"},
{{"N","0","0","0","0","0","3"},"STR3"}}
},"Структура"}
}
}

1) Определил с какими типами данных и как с ними работать (Строка, Число, Булево).

Функция ЗначениеВСтроку(Значение) Экспорт
	Если ТипЗнч(Значение) = Тип("Строка") Тогда
		Возврат СтрокаВСтроку(Значение);
	ИначеЕсли ТипЗнч(Значение) = Тип("Число") Тогда
		Возврат ЧислоВСтроку(Значение);
 	ИначеЕсли ТипЗнч(Значение) = Тип("Дата") Тогда
		Возврат ДатаВСтроку(Значение);
	ИначеЕсли ТипЗнч(Значение) = Тип("Булево") Тогда
		Возврат ?(Значение, ЧислоВСтроку(1), ЧислоВСтроку(0));
        // этот участок кода сделан для ссылок где реализовал реквизит 'СсылкаНаОбъект' 
        // в которой содержится значение конкретного элемента справочника (Пример: {"O","0","0","196","0","0","   1089488M  "})
	// в данном примере не реализовано
        ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Значение)) Тогда
		ОбъектМетаданных =  Значение.Метаданные();
		Если Метаданные.Справочники.Содержит(ОбъектМетаданных) Или Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда
			Возврат СсылкаВСтроку(Значение, ОбъектМетаданных);
		Иначе
			Возврат СтрокаВСтроку(Значение);
		КонецЕсли;
	Иначе
		Возврат СоставноеЗначениеВСтроку(Значение);	
	КонецЕсли;
КонецФункции

2) Конвертирую значение в простую строку (формат 1С77)

Функция Блок(Знач ТипСтрокой, 
	Знач Ячейка1 = Неопределено, 
	Знач Ячейка2 = Неопределено, 
	Знач Ячейка3 = Неопределено, 
	Знач Ячейка4 = Неопределено, 
	Знач Ячейка5 = Неопределено, 
	Знач Ячейка6 = Неопределено, 
// составной тип ввиду {x,x,x,x,x,x} не должен заключатся в кавычки
// пример {"VL", {{x,x,x,x,x,x}, "x"}} - правильно
//        {"VL", {"{x,x,x,x,x,x}", "x"}} - не правильно 
	БлокДанных = Ложь)
	
	МассивДанных = Новый Массив;
	
	Если ТипСтрокой <> Неопределено Тогда
		МассивДанных.Добавить(Ячейка(ТипСтрокой));
	КонецЕсли;
	
// на первом неопределено нужно зарубить иструкцию
	Если Ячейка1 <> Неопределено Тогда
		МассивДанных.Добавить(?(БлокДанных, Ячейка1, Ячейка(Ячейка1)));
		Если Ячейка2 <> Неопределено Тогда
			МассивДанных.Добавить(?(БлокДанных, Ячейка2, Ячейка(Ячейка2)));
			Если Ячейка3 <> Неопределено Тогда
				МассивДанных.Добавить(?(БлокДанных, Ячейка3, Ячейка(Ячейка3)));
				Если Ячейка4 <> Неопределено Тогда
					МассивДанных.Добавить(?(БлокДанных, Ячейка4, Ячейка(Ячейка4)));
					Если Ячейка5 <> Неопределено Тогда
						МассивДанных.Добавить(?(БлокДанных, Ячейка5, Ячейка(Ячейка5)));
						Если Ячейка6 <> Неопределено Тогда
							МассивДанных.Добавить(?(БлокДанных, Ячейка6, Ячейка(Ячейка6)));
						КонецЕсли;
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	Возврат "{" + СтрСоединить(МассивДанных, ",") + "}";
	
КонецФункции

3) Особенность каждого значение в блоке возвести все данные в кавычки (даже пустые)

Функция Ячейка(Значение)
	Если Значение = Неопределено Тогда
		Возврат Неопределено;
	ИначеЕсли Значение = "" Тогда
		Возврат """""";
	Иначе
		Возврат """" + Строка(Значение) + """";
	КонецЕсли;	
КонецФункции

4) Описываю конвертацию простых типов

Функция СтрокаВСтроку(Значение)
	Возврат Блок("S", "0", "0", "0", "0", "0", Значение);
КонецФункции

Функция ЧислоВСтроку(Значение)
	Возврат Блок("N", "0", "0", "0", "0", "0", Значение);
КонецФункции

Функция ДатаВСтроку(Значение)
	Возврат Блок("D", "0", "0", "0", "0", "0", Формат(Значение, "ДФ=yyyyMMdd"));
КонецФункции

5) Описываю составные значения (СписокЗначений в строковом представлении 1C77 имеет следующий вид: {"VL", {#Значение}})

Функция СоставноеЗначениеВСтроку(Значение)
	
	ПредставлениеЗначения = Новый Массив;
	ПредставлениеЗначения.Добавить(Ячейка("VL"));
	
	ПредставлениеДанных = Новый Массив;
	Если ТипЗнч(Значение) = Тип("Массив") Тогда
		Для Индекс = 0 по Значение.Количество() - 1 Цикл
			ПредставлениеДанных.Добавить(Блок(Неопределено, ЗначениеВСтроку(Значение.Получить(Индекс)), Ячейка(""),,,,,Истина));
		КонецЦикла
	ИначеЕсли ТипЗнч(Значение) = Тип("Структура") Тогда
		Для каждого КлючЗначение Из Значение Цикл
			ПредставлениеДанных.Добавить(Блок(Неопределено, ЗначениеВСтроку(КлючЗначение.Значение), Ячейка(КлючЗначение.Ключ),,,,,Истина));
		КонецЦикла
	ИначеЕсли ТипЗнч(Значение) = Тип("Соответствие") Тогда
	КонецЕсли;
	
	ПредставлениеЗначения.Добавить("{" + СтрСоединить(ПредставлениеДанных, ",") + "}");
	 
	Возврат "{" + СтрСоединить(ПредставлениеЗначения, ",") + "}";
КонецФункции

При выполнении функции:

ЗначениеВСтроку(Значение)

где значение - это описание составной коллекции (см. выше) должен дать результат следующего ввида:

{"VL",{
{{"VL",{
{{"N","0","0","0","0","0","1"},""},
{{"N","0","0","0","0","0","2"},""},
{{"N","0","0","0","0","0","3"},""},
{{"N","0","0","0","0","0","4"},""}}},"Массив"},
{{"VL",{
{{"N","0","0","0","0","0","1"},"STR1"},
{{"N","0","0","0","0","0","1"},"STR2"},
{{"N","0","0","0","0","0","3"},"STR3"}}},"Структура"}}
}

Что соответствует представлению в 1С77. Вызов функции ЗначениеИзФайла(<ИмяФайла>,<Объект>,<Формат>) возвратить исходное представление значения.

 

P.S. Пример структуры которую я передаю с помощью этих процедур в 1С77 для вызова УниверсальногоОбмена (Конвертация данных):

Формирую в 1С8.3

ТекстОписаниеОбмена = ТиССервер.ЗначениеВСтроку(Ответ);

 Где ответ это составная структура с описанием процесса выгрузки

{"VL",{
{{"S","0","0","0","0","0","316b3e20_a8fd_4c94_8ecf_a67a92a5abd6"},"Идентификатор"},
{{"S","0","0","0","0","0","\\...\resource1C\v7_316b3e20_a8fd_4c94_8ecf_a67a92a5abd6_proc.ert"},"ОбработчикОбмена"},
{{"S","0","0","0","0","0","\\...\resource1C\v7_316b3e20_a8fd_4c94_8ecf_a67a92a5abd6_rules.xml"},"ПравилаОбмена"},
{{"S","0","0","0","0","0","\\...\resource1C\"},"КаталогФайлов"},
{{"D","0","0","0","0","0",""},"НачалоПериода"},
{{"D","0","0","0","0","0","20210419"},"КонецПериода"},
{{"S","0","0","0","0","0","export_data"},"Команда"},
{{"S","0","0","0","0","0","refБанковскиеСчета,ref"},"ИспользуемыеПравила"},
{{"N","0","0","0","0","0","0"},"КоличествоЭлементов"},
{{"N","0","0","0","0","0","0"},"РежимРазработчика"},
{{"VL",{
   {{"VL",{
    {{"N","0","0","0","0","0","0"},"Использовать"},
    {{"S","0","0","0","0","0","ТекущийЭлемент"},"ПолеОтбора"}, 
    {{"S","0","0","0","0","0","="},"Условие"},
    {{"B","0","0","1414","0","0","        70M  "},"Значение"},
    {{"S","0","0","0","0","0","Справочник"},"ТипОбъекта"},
    {{"S","0","0","0","0","0","БанковскиеСчета"},"Объект"},
    {{"N","0","0","0","0","0","0"},"Длина"},
    {{"N","0","0","0","0","0","0"},"Точность"}}},""}}},"ТаблицаНастройкиОтбора"}}}

Конвертация данного значения в СписокЗначение 1С77 происходит простым способом

если winhttprequest.Status = 200 тогда
	значениеизфайла(winhttprequest.responsetext,результат);
	если результат = мпустоезначение тогда
		сообщить("ошибка обработки параметров get запроса");
	конецесли;
конецесли;

 

Получение информации об обмене описываю функцией след содержания:

...

записать_лог("RN(export_data)");
	        
результатобмена = "";
	
обработчикобмена = параметры.получить("ОбработчикОбмена");
Если существует_файл(обработчикобмена) = 0 Тогда
	Возврат результатобмена;
КонецЕсли; 
	
правилаобмена = параметры.получить("ПравилаОбмена"); 
Если существует_файл(правилаобмена) = 0 Тогда
	Возврат результатобмена;
КонецЕсли; 
	
каталогфайлов = параметры.Получить("КаталогФайлов");
результатобмена = каталогфайлов + "v7_" + идентификатор + "_data.xml";
	
параметрыформы = СоздатьОбъект("СписокЗначений");
параметрыформы.Установить("ИмяФайлаПравил", правилаобмена);
	
параметрыформы.Установить("ИмяФайлаДанных", результатобмена);
	
датаначала = параметры.Получить("НачалоПериода");
параметрыформы.Установить("ДатаНачала", датаначала); 
	
датаконец = параметры.Получить("КонецПериода");
параметрыформы.Установить("ДатаОкончания", датаконец); 
	
параметрыформы.Установить("ИмяКоманды", "Выгрузить"); 
	
ТаблицаНастройкиПараметров = СоздатьОбъект("СписокЗначений"); 
ТаблицаНастройкиПараметров.ДобавитьЗначение(параметры.Получить("КоличествоЭлементов"),"КоличествоОбъектов");
ТаблицаНастройкиПараметров.ДобавитьЗначение(параметры.Получить("РежимРазработчика"),"РежимРазработчика");
параметрыформы.Установить("ТаблицаНастройкиПараметров", ТаблицаНастройкиПараметров);    
	
// Конвертировать в ТЗ
МассивСтрок = параметры.Получить("ТаблицаНастройкиОтбора");
	
параметрыформы.Установить("КомментироватьВыгрузкуОбъектов", 0);
параметрыформы.Установить("ИспользуемыеПравилаВыгрузки", параметры.получить("ИспользуемыеПравила"));	
параметрыформы.Установить("ИмяАлгоритма");
	
Сообщить("Начал <" + идентификатор + ">"); 
	
ОткрытьФорму("Обработка", параметрыформы, обработчикобмена); 
	
Сообщить("Окончил <" + идентификатор + ">");

описаниеошибок = параметрыформы.получить("СписокОшибок");
	
Если описаниеошибок = ПолучитьПустоеЗначение() Тогда
	записать_лог("DSCR(Данные выгружены)");
Иначе
	записать_лог("DSCR(" + описаниеошибок + ")");
КонецЕсли; 
	
...

 

обработка алгоритмы Предприятие 77 Предпримятие 8.x

См. также

SALE! 10%

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

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

55778 50200 руб.

04.08.2015    166488    333    277    

373

SALE! 20%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 22338 руб.

12.06.2017    141529    798    297    

419

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.234.x) и БП 3.0 (3.0.161.x). Правила подходят для версии ПРОФ и КОРП.

35000 руб.

15.12.2021    24026    169    51    

127

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.19.x).

35000 руб.

23.07.2020    51273    228    69    

185

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

55778 50200 руб.

29.10.2018    56210    59    105    

61

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171178    303    257    

378

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 13005 руб.

18.02.2016    186886    589    509    

526

Перенос данных 1C Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ ФОМС, ЕФС Платные (руб)

Обработки для быстрого перехода с конфигураций «КАМИН:Расчет заработной платы 3.0», «КАМИН:Зарплата для бизнеса 4.0» и «КАМИН:Зарплата 5.0» на конфигурацию «Зарплата и управление персоналом» версии 3.1.

12000 руб.

25.09.2016    80675    311    250    

264
Оставьте свое сообщение