1С, oauth2, Google API и Google Merchant. Сбор данных и парсинг

Публикация № 673482 14.09.17

Приемы и методы разработки

ФабрикаXDTO ЧтениеJSON HTTPСоединение HTTPЗапрос

Всем привет. Стала задача, собрать данные с Google Merchants и внести их в 1С, для более детального анализа того, что сейчас показывается, что нет и какие проблемы при этом есть. Если кому это интересно, прошу под кат.

Опыт програмирования на платформе 1С у меня крайне маленький, порядка года, поэтому за какие-то банальные вещи, прощу прощения сразу. Статья будет основана на данной статье, но там не описан процесс парсинга + не описан процесс на HTTPСоединение, что является более универсальным и более удобным. 

Все процедуры производились на клиент-серверном режиме, в конфигурации УТ 10.3 (10.3.13.2) на платформе 1С 8.3 (8.3.8.2322).

Использованные механизмы описаны в ключевых словах.

Еще перед тем, как пойдет код, я хотел бы ответить на вопрос, зачем я это вообще пишу? Во первых, для тех, кто ищет информацию по данным технологиям, во вторых, для того, чтобы получить обратную связь от вас, услышать какие-то советы и как итог - сделать себя лучше =) 

Пара ссылок на основне определения:

  1. oauth2
  2. HTTP
  3. POST/GET запросы
  4. JSON
  5. API

 

Погнали, итак, стоит цель, получить данные с Google Merchant и занести их в 1С.

Сделаем декомпозицию задачи.

  1. Получить данные для авторизации в Google
    1. Сделать уч. запись в Google Cloud Console 
      1. Добавить в разделе API , работу с  Content API for Shopping
      2. Сделать учетную запись с типом "Други типы" - http://jmp.sh/9ikhvbp
      3. Получить ClientId и Secret
  2. Добавить свою учетную запись (которая для Google Cloud Console) в Merchant с обычными правами.
  3. Получить Токен для запросов
  4. Сделать регламент Запроса данных/Обновления токена
  5. При запросе данных парсить JSON и вносить их в свою УС

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

Веселуха начинается с пункта 3. 

Для получения первого токена, пришлос использовать внешнюю обработку с HTML полем  и кнопкой (Если кто знает, как сделать проще, напишите в комментариях)

При нажатии кнопки, появится окно ввода логин/Пароля для учетки Google, вводим :


    client_id = ВАШ_CLIEN_ID_ПОЛУЧЕННЫЙ_В_GOOGLE_CLOUD
	
	ЧастьЗапроса = "response_type=code"+"&";
    ЧастьЗапроса = ЧастьЗапроса + "client_id="+ client_id + "&";
    ЧастьЗапроса = ЧастьЗапроса + "redirect_uri=http://localhost" + "&";
    ЧастьЗапроса = ЧастьЗапроса + "access_type=offline"+"&";
    ЧастьЗапроса = Параметры + "scope=https://www.googleapis.com/auth/content";
    АдресАвторизации = "https://accounts.google.com/o/oauth2/auth" + "?";
    ПолныйАдресАвторизации = АдресАвторизации + ЧастьЗапроса;
    
    ЭлементыФормы.ВАШ_HTTML_ПОЛЕ.Перейти(ПолныйАдресАвторизации);

Для HTML поля, в обработчике "ДокументСформирован", вставим код для отлова Code (Строка, необходимая для обмена на токен)

     Если Сред(ЭлементыФормы.Гугл.Документ.URLUnencoded,1,23) = "http://localhost/?code=" Тогда
		
		Code	=	Сред(ЭлементыФормы.Гугл.Документ.URLUnencoded,24);
		
	 КонецЕсли;

Теперь у нас есть данные, для получения Token и RefreshToken

Делаем процедуру Получения Токена 

    Сервер =  "accounts.google.com";
	Ресурс = "/o/oauth2/token";
	КодДоступа 		= 	Code;
	client_id		=	ВАШ_CLIENT_ID
	client_secret 	=	ВАШ_SECRET

	СтрокаЗапроса = "client_id=" + client_id + "&";
	СтрокаЗапроса = СтрокаЗапроса + "client_secret=" + client_secret + "&";
	СтрокаЗапроса = СтрокаЗапроса + "grant_type=authorization_code" + "&";
	СтрокаЗапроса = СтрокаЗапроса + "code=" + КодДоступа + "&";
	СтрокаЗапроса = СтрокаЗапроса + "redirect_uri=http://localhost";

	Соединение = Новый HTTPСоединение(Сервер,443,,,,,Новый ЗащищенноеСоединениеOpenSSL);

	Заголовки  = Новый Соответствие;
	Заголовки.Вставить("Content-Type","application/x-www-form-urlencoded");
	
	ЗапросХТТП = Новый HTTPЗапрос(Ресурс,Заголовки);
	ЗапросХТТП.УстановитьТелоИзСтроки(СтрокаЗапроса);

	Ответ = Соединение.ВызватьHTTPМетод("POST",ЗапросХТТП);
	
    Если Ответ.КодСостояния <> 200 Тогда Возврат КонецЕсли;

	Строка = Ответ.ПолучитьТелоКакСтроку();
	
    Чтение = Новый ЧтениеJSON();
	Чтение.УстановитьСтроку(Строка);

	Фабрика = ФабрикаXDTO.ПрочитатьJSON(Чтение);
	
    Чтение.Закрыть();
	
    Токен           = Фабрика.access_token;
	ТокенОбновления = Фабрика.refresh_token;

Тут конечно стоило бы написать кучу инфы про ФабрикуXDTO , но ее на просторах Инфостарта столько, что уже просто стыдно, что-то писать далее. Но если не читали, то очень советую прочитать цикл статей  , очень подробно и интересно расписали.

Но если вкратце, то фабрика преобразует наш XML/JSON в объект, с которым можно работать, через точку, что крайне удобно и не надо парсить документ старыми методами, перебором узлов, с проверкой на закрытие-открытие.

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

 

    Сервер =  "accounts.google.com";
	Ресурс = "/o/oauth2/token";
	КодДоступа 		= 	Code;
	client_id		=	ВАШ_CLIEN_ID
	client_secret 	=	ВАШ_SECRET

	СтрокаЗапроса = "client_id="  + client_id + "&";
	СтрокаЗапроса = СтрокаЗапроса + "client_secret=" + client_secret + "&";
	СтрокаЗапроса = СтрокаЗапроса + "grant_type=refresh_token" + "&";
	СтрокаЗапроса = СтрокаЗапроса + "refresh_token=" + ТокенОбновления;	

	Соединение = Новый HTTPСоединение(Сервер,443,,,,,Новый ЗащищенноеСоединениеOpenSSL);

	Заголовки  = Новый Соответствие;
	Заголовки.Вставить("Content-Type","application/x-www-form-urlencoded");
	
	ЗапросХТТП = Новый HTTPЗапрос(Ресурс,Заголовки);
	ЗапросХТТП.УстановитьТелоИзСтроки(СтрокаЗапроса);

	Ответ = Соединение.ВызватьHTTPМетод("POST",ЗапросХТТП);
	Если Ответ.КодСостояния <> 200 Тогда Возврат КонецЕсли;

	Строка = Ответ.ПолучитьТелоКакСтроку();
	Чтение = Новый ЧтениеJSON();
	Чтение.УстановитьСтроку(Строка);

	Фабрика = ФабрикаXDTO.ПрочитатьJSON(Чтение);
	Чтение.Закрыть();
	Токен = Фабрика.access_token;

 

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

Google сделал, конечно, хороший  инструмент, но в нем просто не написана правильная локига создания запроса, поэтому в дело идут инструменты разработчика. 

 

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

GET https://www.googleapis.com/content/v2/ИДЕНТИФИКАТОР_МАГАЗИНА_В_MERCHANT/products

Но если вы его сделаете, получите просто ошибку ... 

Поэтому лезем в инструменты разработчика и ловим запрос, процесс описывать не буду, но запрос принимает уже такой вид

https://www.googleapis.com/content/v2/ID_МАГАЗИНА_В_МЕРЧАНТ/productstatuses?maxResults=250&key=ВАШ_CLIENT_ID

 + Заголовок с токен

Теперь код процедуры, с рекурсией =) 

Почему так, потому что гугл, отдаем всего 250 позиций, за один запрос. Так как у нас 10 000 тороговых предложений, то мне надо примерно 41 раз сделать вызов метода ...

Поэтому, рекурсия =) 

Сам вызов процедуры

ПолучениеФайлаСМерчанта(АдресРесурса,ТокенСтраницы)

АдресРесурса = Это тот же адрес, только с доп параметром pageToken=, с этим параметром, гугл отдаст следующую страницу, с новыми позициями.

    Путь   = Я_ФАЙЛЫ_СОХРАНИЛ_НА_ДИСК
	Сервер = "www.googleapis.com";
	Запрос =  АдресРесурса;
	Соединение = Новый HTTPСоединение(Сервер,443,,,,,Новый ЗащищенноеСоединениеOpenSSL);
	Заголовки  = Новый Соответствие;
	Заголовки.Вставить("Authorization","Bearer " + Токен);
	ЗапросХТТП = Новый HTTPЗапрос;
	ЗапросХТТП.АдресРесурса	=	Запрос;
	ЗапросХТТП.Заголовки = Заголовки;
	
	Соединение.ВызватьHTTPМетод("GET",ЗапросХТТП);
	Ответ = Соединение.ВызватьHTTPМетод("GET",ЗапросХТТП);
	Файл = Ответ.ПолучитьТелоКакДвоичныеДанные();
	Файл.Записать(Путь + "json_" + ТокенСтраницы + ".json");
	
	Чтение = Новый ЧтениеJSON;
	Чтение.ОткрытьФайл(Путь + "json_" + ТокенСтраницы + ".json");
	
	Фабрика = ФабрикаXDTO.ПрочитатьJSON(Чтение);
	Чтение.Закрыть();
	Если ОбъектXDTOСодержитСвойство(Фабрика,"nextPageToken") Тогда
		Если Фабрика.nextPageToken <> "" Тогда
			ПолучениеФайлаСМерчанта("/content/v2/ID_МАГАЗИНА/productstatuses?maxResults=250&pageToken="+Фабрика.nextPageToken+"&key=897236016313-ceggltgsseaoke0bfb48sivrr3dj766k.apps.googleusercontent.com",Фабрика.nextPageToken);
		КонецЕсли;
	КонецЕсли;

 

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

МассивФайлов = НайтиФайлы(Путь,"*.json");
	
	Если МассивФайлов.Количество() = 0 Тогда
		Сообщить("Файлов не найдено");
		Возврат;
	КонецЕсли;
	
	ТабличноеПоле8.Очистить();
	Для Каждого Файл из МассивФайлов Цикл
		Чтение = Новый ЧтениеJSON;
		Чтение.ОткрытьФайл(Файл.ПолноеИмя);
		Фабрика = ФабрикаXDTO.ПрочитатьJSON(Чтение);
		Чтение.Закрыть();
		
		Для каждого Товар из КоллекцияXDTO(Фабрика.resources.resources) Цикл
			
			стр = ТабличноеПоле8.Добавить();
			Стр.Номенклатура 	= 	Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",Сред(Товар.ProductID,14));
			Стр.Артикул 		=	Стр.Номенклатура.Артикул;
			Стр.ЦеноваяГруппа	=	Стр.Номенклатура.ЦеноваяГруппа;
			Стр.Категория		=	Стр.Номенклатура.МЮС_КаталогНоменклатуры;
			Стр.Ответственный	=	Стр.Номенклатура.МЮС_КаталогНоменклатуры.Ответственный;
			Стр.Ссылка 			=	Товар.Link;
			Стр.ProductID		=	Товар.ProductID;
			Стр.Displayed       =   Товар.destinationStatuses.destinationStatuses[0].approvalStatus;
			Стр.Shoping		    =   Товар.destinationStatuses.destinationStatuses[1].approvalStatus;
			
			
			Если ОбъектXDTOСодержитСвойство(Товар,"dataQualityIssues") тогда
				Для каждого Строка из КоллекцияXDTO(Товар.dataQualityIssues.dataQualityIssues) Цикл
				 					
					Стр.IDerror 	= 	?(ОбъектXDTOСодержитСвойство(Строка,"id")			,Строка.id		,"");
					Стр.severity 	= 	?(ОбъектXDTOСодержитСвойство(Строка,"severity")		,Строка.severity	,"");
					Стр.timestamp 	= 	?(ОбъектXDTOСодержитСвойство(Строка,"timestamp")	,Строка.timestamp	,"");
					Стр.Location	=	?(ОбъектXDTOСодержитСвойство(Строка,"Location")		,Строка.Location	,"");
					
				КонецЦикла;
			КонецЕсли;
			
		
		  КонецЦикла;
		УдалитьФайлы(Файл.ПолноеИмя);
		
	КонецЦикла;
	
	ЭлементыФормы.ТабличноеПоле8.СоздатьКолонки();

 

Тут используется 2 функции, одна проверяет на наличие свойства, вторая проверяет тип объекта XDTO, список он, или единичный

 

Код обеих, авторство не укажу, найдены на просторах Инфостарта.

Функция   ОбъектXDTOСодержитСвойство(ОбъектXDTO, Свойство)
	
	ЕстьСвойство = ОбъектXDTO.Свойства().Получить(Свойство) <> Неопределено
		И ОбъектXDTO[Свойство] <> Неопределено;
		
	Возврат ЕстьСвойство;
	
КонецФункции
Функция   КоллекцияXDTO(Элемент)
    Если ТипЗнч(Элемент)=Тип("ОбъектXDTO") Тогда
        МассивXDTO=Новый Массив;
        МассивXDTO.Добавить(Элемент);
        Возврат МассивXDTO;
    КонецЕсли;
    Возврат Элемент;
КонецФункции

 

В целом все ...

Если вы дочитали это, то уже спасибо =)

Если дадите какой-то хороший совет, буду прям очень рад.

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. shmellevich 130 20.09.17 12:17 Сейчас в теме
Статья хороша +!

А чем не угодил "ПрочитатьJSON(ЧтениеJSON, Истина)" - на выходе будет Соответствие. и безопасность получения свойств проще, и не нужны доп. функции ))

и как себя поведет фабрика если ключом окажется не строка, а например число?

{
   "key1":"value1",
   100:{"part1":50, 
            "part2":30, 
            "part3":20}
}


я когда на подобный джисон попал, долго мучался, было тяжело отойти от уже отлаженного механизма работы с XDTO объектами, все сломать и построить заново )).
user604633_slevin64celevra; +1 Ответить
2. Mi11er 89 20.09.17 17:37 Сейчас в теме
(1) 0_о комментарий к статье... надо будет выпить сегодня.

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

+ у меня не так много опыта в этой теме и когда делаю такие парсеры, делаю не как то универсально, а именно заточенный под этот сервис.
8. uno-c 179 12.12.18 17:35 Сейчас в теме
Если кто знает, как сделать проще, напишите в комментариях
Можно получать access token через 2LO авторизацию https://developers.google.com/identity/protocols/OAuth2ServiceAccount. Это сервер-сервер, без использования учетки пользователя. Проще или нет - субъективно, но 2LO объективно лаконичнее.
4. pbazeliuk 1819 03.10.17 00:46 Сейчас в теме
(1) ПрочитатьJSON, ЗаписатьJSON очень медленныe. Здесь упоминается про это https://infostart.ru/public/640996/, опытным путем удалось подтвердить слова автора.
5. shmellevich 130 03.10.17 15:54 Сейчас в теме
(4) Согласно скрина из статьи видно, что фабрика пишет медленнее, чем даже обычная ЗаписатьJSON в 2 раза.
Или я не правильно понимаю?
6. pbazeliuk 1819 03.10.17 16:07 Сейчас в теме
(5) Про фабрику не знаю, там описано только:
3. ПрочитатьJSON, ЗаписатьJSON - самые медленные
2. Запись в поток - сейчас использую вот этот метод, он почти в 2 раза быстрее, чем предыдущий
1. Запись без контроля - этот пока нет времени реализовать.

По поводу фабрики не знаю, необходимо тестировать.
7. Inkasor 28 09.10.17 01:31 Сейчас в теме
(6)Привет :)

ПрочитатьJSON, ЗаписатьJSON - самые медленные

Дело в том, что 1С как раз по умолчанию инициализирует одну фабрику для быстрой обработки в рамках глобального контекста. Это быстро и удобно для, наверное, 99% задач, стоящих обычно перед коллегами :) Это и есть ПрочитатьJSON, ЗаписатьJSON как они есть.
Мы работаем только на потоке, причем с заранее подготовленными данными, поэтому пишем без контроля, что ещё очень сильно ускоряет обработку.
3. huse 22.09.17 21:17 Сейчас в теме
"Добавить свою учетную запись (которая для Google Cloud Console) в Merchant с обычными правами."

Подскажите как сделать эту операцию для Firebase?

PS content на firebase заменил, но проект запрашивает разрешение и не редиректит. А при нажатии Разрешить пытается открыть страницу с адресом res://ieframe.dll/dnserrordiagoff_webOC.htm#https://accounts.google.com/o/oauth2/approval?as=.......... после чего говорит что не может ее отобразить
9. buzzzard 51 23.07.20 19:50 Сейчас в теме
(3) Вы не разобрались с Firebase случайно?
11. huse 17.12.20 03:41 Сейчас в теме
(9) разобрался но в отношении данной ошибки уже не помню лекарство
10. AxiLLes89 21 26.09.20 05:02 Сейчас в теме
Привет) Статья супер) сообщения в hanhouts не отправлял?
Оставьте свое сообщение

См. также

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо

Практика программирования v8 Бесплатно (free)

В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.

12.12.2020    4741    Eugen-S    23    

Обзор полезных методов БСП 3.1.4. Часть 2

БСП (Библиотека стандартных подсистем) v8 Бесплатно (free)

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

27.04.2021    16858    rayastar    7    

Обзор полезных методов БСП 3.1.4

БСП (Библиотека стандартных подсистем) Практика программирования v8 1cv8.cf Бесплатно (free)

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

25.03.2021    43110    rayastar    51    

Звуковое управление в 1С 8.3

Практика программирования v8 1cv8.cf Бесплатно (free)

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021    7351    velemir    33    

Использование классов .Net в 1С для новичков Промо

Разработка внешних компонент Универсальные функции Практика программирования v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    86084    Serginio    116    

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions

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

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    9093    comol    31    

Полезные функции БСП (Часть 2)

БСП (Библиотека стандартных подсистем) v8 1cv8.cf Россия Бесплатно (free)

Список полезных функций из состава Библиотеки стандартных подсистем 3.1.

10.03.2020    21264    user5300    20    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    67423    ids79    27    

Как я начал администрировать сервер 1С: Предприятие 8.3 с телефона Промо

Инструменты администратора БД Мобильная разработка v8 Бесплатно (free)

Развитие инструментов управления кластером серверов 1С:Предприятие 8.3.

14.04.2017    67845    user700211_a.straltsou    30    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    44517    John_d    22    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    36279    kuzyara    38    

Шпаргалка (БСП). Добавление в новый документ механизма печати дополнительных печатных форм

Печатные формы БСП (Библиотека стандартных подсистем) v8 1cv8.cf Бесплатно (free)

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

10.10.2019    31154    John_d    21    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    41232    unichkin    74    

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

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

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

07.10.2019    40169    HostHost    41    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    53968    Yashazz    56    

Самый примитивный HTTP-сервис в мире

WEB v8 Бесплатно (free)

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

12.09.2019    25601    YPermitin    27    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    36315    tormozit    106    

[Шпаргалка] Программное создание элементов формы

Работа с интерфейсом Практика программирования v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    105567    rpgshnik    77    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    79230    ids79    56    

Отслеживание выполнения фонового задания

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

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    45701    ids79    22    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

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

20.09.2012    82988    tormozit    131    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    155987    ids79    75    

Фоновое выполнение кода в 1С - это просто

Практика программирования v8 1cv8.cf Бесплатно (free)

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

02.08.2019    61941    avalakh    27    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    107817    ids79    17    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    54681    tormozit    51    

Обработчики событий при записи объектов. Зачем и что за чем?

Математика и алгоритмы v8 Бесплатно (free)

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    115902    AlbinaAAA    49    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    49106    ids79    27    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    22656    SeiOkami    53    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    51477    tormozit    74    

Создание отчетов с помощью СКД - основные понятия и элементы

Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    77376    ids79    28    

Подсистема "Варианты отчетов". Используете ли Вы ее правильно?

Работа с интерфейсом БСП (Библиотека стандартных подсистем) v8 1cv8.cf Бесплатно (free)

Небольшая история про использование подсистемы "Варианты отчетов" из БСП. Используете ли Вы ее правильно?

04.06.2019    57017    YPermitin    55    

Регистры накопления. Структура хранения в базе данных

Инструментарий разработчика Практика программирования v8 1cv8.cf Бесплатно (free)

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    64977    YPermitin    31    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    37293    m-rv    23    

Выгрузка документа по условию

Инструментарий разработчика Практика программирования v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    18092    m-rv    3    

Как прикрутить ГУИД к регистру сведений

Перенос данных из 1C8 в 1C8 Инструментарий разработчика Практика программирования v8 Бесплатно (free)

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

16.04.2019    23454    m-rv    18    

О расширениях замолвите слово...

Инструментарий разработчика Практика программирования v8 Бесплатно (free)

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    42990    ellavs    131    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Практика программирования v8 Бесплатно (free)

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    32265    ellavs    90    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

БСП (Библиотека стандартных подсистем) Роли и права Практика программирования v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    66648    ids79    11    

Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке

Универсальные функции Зарплата Управление персоналом (HRM) Зарплата Кадровый учет v8 v8::СПР ЗКГУ3.0 ЗУП3.x БУ Бесплатно (free)

В статье размещен список стандартных процедур и функций с примерами, которые могут помочь при разработке (доработке) конфигураций Зарплата и управление персоналом ред. 3.1 и Зарплата и кадры государственного учреждения 3.1. Иногда бывает довольно сложно правильно получить данные или долго, поэтому лучшим вариантом будет использование стандартных процедур. Буду очень признателен, если Вы поделитесь своим опытом и предложите свои варианты стандартных процедур которые помогают в работе. Или предложите, как дополнить имеющиеся процедуры.

14.11.2018    149817    GeterX    136    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    45351    ids79    46    

Git + 1С. Часть 1. Как подключиться к команде разработки и начать использовать Git

Инструментарий разработчика Методология v8 1cv8.cf Бесплатно (free)

Первая статья из цикла инструкций по работе с Git в 1С-разработке. Рассмотрим, как настроить рабочее место, как получить свою "копию" проекта для разработки и приступить к полезным действиям. Все примеры будут изложены в рамках трёх практических кейсов: 1. Моя команда дорабатывает типовую конфигурацию, использует приватный репозиторий на BitBucket, в котором версионируются внешние отчеты/обработки, расширения конфигураций и правила обмена; 2. Я участвую в стартап-команде, которая разрабатывает свою конфигурацию с использованием Git и GitLab; 3. Я принимаю участие в развитии OpenSource-продукта на GitHub как заинтересованный разработчик (контрибьютор).

18.10.2018    94313    stas_ganiev    86    

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C

Математика и алгоритмы Практика программирования v8 Россия Бесплатно (free)

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

23.08.2018    49141    Rain88    49    

Тестер: частые вопросы

Практика программирования v8 Бесплатно (free)

Ошибкам бой - тесты норма жизни!

25.07.2018    31658    grumagargler    31    

Работаем с дополнительными реквизитами на форме

Практика программирования v8 Бесплатно (free)

Пара полезных процедур для работы с дополнительными реквизитами на форме. Далее в статье: 1. Как называются дополнительные реквизиты на форме и в какой момент они появляются на форме? 2. Как проверить до записи корректность заполнения пользователем дополнительного реквизита? 3. Как заполнить значение дополнительного реквизита по другому событию и обновить данные на форме? 4. Как расположить дополнительный реквизит в указанном месте на форме?

15.07.2018    53868    papche    59    

Повышаем эффективность разработки правил обмена

Практика программирования v8 КД Бесплатно (free)

Как повысить скорость и качество разработки правил обмена? Как вести групповую разработку правил обмена? Как облегчить сопровождение правил обмена после передачи в эксплуатацию? Об этом и многом другом вы можете узнать из этой статьи.

25.06.2018    30327    olegtymko    48    

Введение в механизм представлений в ЗУП ред. 3

Практика программирования v8 v8::СПР ЗУП3.x Бесплатно (free)

В нашей организации на первом же телефонном собеседовании на должность разработчика по ЗУП ред. 3 вас обязательно спросят о том, что такое "Представления".

04.06.2018    47899    xrrg    95