1. Slypower 19.04.16 12:44 Сейчас в теме

ЭСЧФ Беларусь

Всем привет. Не секрет, в Беларуси с 1 июля 2016 должна подаваться ЭСЧФ. Кто-нибудь уже работает с ней? Ведь там, вроде, уже 60 компаний Беларуси работает в тестовом режиме.
Сделал я по инструкциям, что на их сайте, но столько вопросов к их информации осталось.

Очень много полезного нам дали разработчики. Внимательно читайте их документацию в eInvVat, которую скачиваете, а так же примерами для 1С служат bat файлы из папки eInvVat\simpleapp\vbs\src\. Не поленитесь и посетить их сайт vat.gov.by. На основании этих знаний все пишут обработки. Если что не понятно, то можно прибегнуть к данной теме.
Важные и полезные ссылки на сайты и на сообщения темы.

Ссылки на сайт портала

Обработки с данной темы

Полезные сообщения темы

Коды процедур для 1С

Вопрос-Ответ

Дополняется со временем
kar911; Золушка 007; iZhenius; xav; svilsa; Mustard; Gluk_1C; jeniks; 1v7; botman4; OSA3; MaskO_rimi; Ni4ka; Igor Igorevich; Snake150984; shiko; merlin1975; cssnavi; Krasowskiy; YegorK; KhomDV; +21 Ответить
Вознаграждение за ответ
Показать полностью
Ответы
Избранное Подписка Сортировка: Древо
4. Xershi 390 19.04.16 17:20 Сейчас в теме
(1) Slypower, на счет семерки хз. Но я предложил коллеге через вебсервисы фигачить как 2 пальца будет. Создали документ, начали кнопку отправить, если отправилось галка отправки проставилась.
5592. c1nil 13.12.16 14:00 Сейчас в теме
(1) публикация - можете дополнить или ссылкой на GitHub, если не запрещено правилами форума.
5633. c1nil 14.12.16 15:21 Сейчас в теме
(1) раз уж есть код проверки протокола (хотя это совсем не верно, т.к. зависит от конфигурации), то пусть будет и это:
// Входит ли в перечень товаров согласно Указа Президента Республики Беларусь от 21 июня 2007 г. №287 "О налогообложении продовольственных товаров и товаров для детей"
//
// Параметры:
//  Код  - Строка - код ТН ВЭД ЕАЭС в формате '9999999999'
//
// Возвращаемое значение:
//   Булево   - результат проверки
//
Функция ВходитВПеречень287(Код) Экспорт

    Первый = Лев(Код, 4);
    Второй = Лев(Код, 6);
    Третий = Лев(Код, 9);
    Возврат  Код = "0101210000"
                 Или Второй = "010221"
                 Или Код = "0103100000"
                 Или Код = "0104101000"
                 Или Код = "0104201000"
                 Или Первый = "0105"
                 Или Код = "0106141090"
                 Или Первый = "0201"
                 Или Первый = "0202"
                 Или Первый = "0203"
                 Или Первый = "0204"
                 И Не Второй = "020450"
                 Или Второй = "020500"
                 Или Первый = "0206"
                 И Не ( Код = "0206101000"
                 Или Код = "0206220001"
                 Или Код = "0206291000"
                 Или Код = "0206300001"
                 Или Код = "0206300003"
                 Или Код = "0206410001"
                 Или Код = "0206490001"
                 Или Второй = "020680"
                 Или Второй = "020690"
                 ) Или Первый = "0207"
                 И Не ( Третий = "020743000"
                 Или Третий = "020745930"
                 Или Третий = "020753000"
                 Или Третий = "020755930"
                 ) Или Второй = "020810"
                 Или Код = "0209101100"
                 Или Код = "0209101900"
                 Или Второй = "160100"
                 Или Второй = "160232"
                 Или Второй = "160239"
                 Или Второй = "160241"
                 Или Второй = "160242"
                 Или Второй = "160249"
                 Или Второй = "160250"
                 Или Первый = "0401"
                 Или Первый = "0402"
                 Или Первый = "0403"
                 Или Первый = "0404"
                 Или Второй = "040510"
                 Или Второй = "040520"
                 Или Второй = "040610"
                 Или Второй = "040630"
                 И Не Код = "0406301000"
                 Или Код = "0406906900"
                 Или Код = "0406908600"
                 Или Третий = "040690990"
                 Или Третий = "151211910"
                 Или Код = "1512199002"
                 Или Код = "1512199009"
                 Или Третий = "151411900"
                 Или Третий = "151419900"
                 Или Третий = "151491900"
                 Или Третий = "151499900"
                 Или Первый = "1517"
                 Или Код = "2106909804"
                 Или Первый = "2302"
                 Или Первый = "2303"
                 Или Второй = "230990"
                 Или Первый = "1201"
                 Или Второй = "120400"
                 Или Первый = "1205"
                 Или Второй = "120600"
                 Или Код = "2304000001"
                 Или Код = "2304000009"
                 Или Первый = "2306"
                 И Не ( Код = "2306500000"
                 Или Код = "2306600000"
                 ) Или Первый = "1905"
                 И Не Код = "1905905500"
                 Или Код = "2102103100"
                 Или Код = "2102103900"
                 Или Код = "1704906100"
                 Или Код = "1704906500"
                 Или Код = "1704907100"
                 Или Код = "1704907500"
                 Или Второй = "100630"
                 Или Код = "1006400000"
                 Или Второй = "110100"
                 Или Первый = "1102"
                 Или Первый = "1103"
                 Или Первый = "1104"
                 Или Первый = "1105"
                 Или Код = "1106100000"
                 Или Код = "1107101100"
                 Или Код = "1107109100"
                 Или Первый = "1208"
                 Или Первый = "1902"
                 Или Код = "1602100010"
                 Или Код = "1702500000"
                 Или Код = "1901100000"
                 Или Код = "2104200010"
                 Или Первый = "2202"
                 И Не Код = "2202901001"
                 Или Второй = "290544"
                 Или Второй = "382460"
                 Или Первый = "0701"
                 Или Третий = "070200000"
                 Или Код = "0703101900"
                 Или Код = "1212210000"
                 Или Первый = "2001"
                 Или Первый = "2002"
                 Или Первый = "2003"
                 Или Первый = "2004"
                 Или Первый = "2005"
                 Или Первый = "2006"
                 Или Первый = "2006"
                 Или Первый = "2008"
                 Или Первый = "2009"
                 И Не Код = "2005202000"
                 Или Первый = "1701"
                 Или Код = "0409000000"
                 Или Код = "0407210000"
                 Или Код = "0407291000"
                 Или Код = "0407901000"
                 Или Код = "0408118000"
                 Или Код = "0408198100"
                 Или Код = "0408198900"
                 Или Код = "0408918000"
                 Или Код = "0408998000"
                 Или Первый = "0302"
                 Или Первый = "0303"
                 Или Первый = "0304"
                 Или Первый = "0305"
                 Или Первый = "1604"
                 И Не ( Код = "1604110000"
                 Или Код = "1604141600"
                 Или Код = "1604160000"
                 Или Код = "1604191000"
                 Или Код = "1604193100"
                 Или Код = "1604199710"
                 Или Код = "1604201000"
                 Или Код = "1604203000"
                 Или Код = "1604204000"
                 Или Код = "1604209010"
                 Или Код = "1604310000"
                 Или Код = "16043200"
                 ) Или Код = "3407000000"
                 Или Код = "3922100000"
                 Или Код = "3926100000"
                 Или Первый = "4202"
                 Или Код = "4421909800"
                 Или Код = "9619002100"
                 Или Код = "9619003100"
                 Или Код = "9619003900"
                 Или Код = "9619005101"
                 Или Код = "9619005901"
                 Или Код = "9619009001"
                 Или Код = "4820105000"
                 Или Код = "4820200000"
                 Или Код = "4820300000"
                 Или Код = "4820900000"
                 Или Код = "6101209000"
                 Или Код = "6101309000"
                 Или Код = "6101908000"
                 Или Код = "6102109000"
                 Или Код = "6102209000"
                 Или Код = "6102309000"
                 Или Код = "6102909000"
                 Или Первый = "6103"
                 Или Первый = "6104"
                 Или Первый = "6105"
                 Или Первый = "6106"
                 Или Первый = "6107"
                 Или Первый = "6108"
                 Или Первый = "6109"
                 Или Первый = "6110"
                 Или Первый = "6111"
                 Или Первый = "6112"
                 Или Первый = "6115"
                 Или Первый = "6116"
                 Или Первый = "6201"
                 Или Первый = "6202"
                 Или Первый = "6203"
                 Или Первый = "6204"
                 Или Первый = "6205"
                 Или Первый = "6206"
                 Или Первый = "6207"
                 Или Первый = "6208"
                 Или Первый = "6209"
                 Или Первый = "6211"
                 Или Код = "6216000000"
                 Или Первый = "6401"
                 Или Первый = "6402"
                 И Не ( Второй = "640212"
                 Или Код = "6402190000"
                 ) Или Первый = "6403"
                 И Не Код = "6403190000"
                 Или Первый = "6404"
                 И Не Код = "6404110000"
                 Или Первый = "6405"
                 Или Код = "6504000000"
                 Или Первый = "6506"
                 Или Второй = "871500"
                 Или Первый = "8716"
                 Или Код = "9403202009"
                 Или Третий = "940350000"
                 Или Код = "9403700009"
                 Или Второй = "940421"
                 Или Второй = "940429"
                 Или Второй = "950300"
                 Или Второй = "950490"

КонецФункции // ВходитВПеречень287()
Показать
5634. c1nil 14.12.16 15:23 Сейчас в теме
(1) ну и можно добавить тогда проверку перед подтверждением:
////////////////////////////////////////////////////////////­////////////////////
//
// Функция ЭСЧФСоответствуетПротоколуВх
//
// Описание:
//  проверяет возможность подписания входящего документа согласно протокола обмена (правил)
//
// Параметры (название, тип, дифференцированное значение)
//  Документ - ДокументСсылка.ЭлектронныйСчетФактураПолученный - номер входящего документа
//  Отказ - Булево - значение, противоположное возвращаемому
//  Ошибки - Массив, Строка - ошибки проверки
//
// Возвращаемое значение:
//  Булево - результат проверки
//
Функция ЭСЧФСоответствуетПротоколуВх( Документ, Отказ = Ложь, Ошибки = Неопределено ) Экспорт

	Если Документ.ТипЭСЧФ = ПредопределенноеЗначение("Перечисление.ТипыЭСЧФ.Исправленный") Тогда
		
		// Правило-56
		
		КвитанцияДокумента = РегистрыСведений.КвитанцииВходящих.СоздатьМенеджерЗаписи();
		КвитанцияДокумента.Год    = Документ.НомерГод;
		КвитанцияДокумента.Объект = Документ.НомерОбъект;
		КвитанцияДокумента.Номер  = Документ.НомерНомер;
		КвитанцияДокумента.Прочитать();
		
		Если Не КвитанцияДокумента.Выбран() И Ошибки <> Неопределено Тогда
			
			ОтразитьОшибку(Ошибки, "Статус не найден", "КЭСЧФ");
			
		ИначеЕсли КвитанцияДокумента.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЭСЧФ.НаСогласовании") Тогда
			
			// найти неаннулированные с номером в поле 11 или 12 из 5-го поля данного документа
			ЗапросПоНомеруПродавцаИлиКомитента = Новый Запрос;
			ЗапросПоНомеруПродавцаИлиКомитента.УстановитьПараметр("Номер", Документ.КЭСЧФ);
			МассивСтатусов = Новый Массив;
			МассивСтатусов.Добавить(ПредопределенноеЗначение("Перечисление.СтатусыЭСЧФ.Аннулирован"));
			МассивСтатусов.Добавить(ПредопределенноеЗначение("Перечисление.СтатусыЭСЧФ.ВыставленАннулированПоставшиком"));
			ЗапросПоНомеруПродавцаИлиКомитента.УстановитьПараметр("МассивСтатусов", МассивСтатусов);
			ЗапросПоНомеруПродавцаИлиКомитента.Текст = "ВЫБРАТЬ
			|	ЭлектронныйСчетФактураПолученный.Номер,
			|	КвитанцииВходящих.Статус,
			|	КвитанцииВходящих.ДатаСостояния
			|ИЗ
			|	Документ.ЭлектронныйСчетФактураПолученный КАК ЭлектронныйСчетФактураПолученный
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КвитанцииВходящих КАК КвитанцииВходящих
			|		ПО ЭлектронныйСчетФактураПолученный.НомерГод = КвитанцииВходящих.Год
			|			И ЭлектронныйСчетФактураПолученный.НомерОбъект = КвитанцииВходящих.Объект
			|			И ЭлектронныйСчетФактураПолученный.НомерНомер = КвитанцииВходящих.Номер
			|ГДЕ
			|	(ЭлектронныйСчетФактураПолученный.ПоставщикНомерСчетаКомитента = &Номер
			|			ИЛИ ЭлектронныйСчетФактураПолученный.ПоставщикНомерСчетаПродавца = &Номер)
			|	И НЕ КвитанцииВходящих.Статус В (&МассивСтатусов)";
			
			РезультатЗапросаПоНомеруПродавцаИлиКомитента = ЗапросПоНомеруПродавцаИлиКомитента.Выполнить();
			
			Если Не РезультатЗапросаПоНомеруПродавцаИлиКомитента.Пустой() Тогда
				Отказ = Истина;
				Если Ошибки <> Неопределено Тогда
					ВыборкаРезультатаЗапросаПоНомеруПродавцаИлиКомитента = РезультатЗапросаПоНомеруПродавцаИлиКомитента.Выбрать();
					ОтразитьОшибку(Ошибки, "Получатель может подписать исправленный со статусом ""На согласовании"" только тогда,
											| когда в БД нет неаннулированных ЭСЧФ, в которых в 11 или 12 поле указан номер из 5
											| поля данного исправленного ЭСЧФ со статусом ""На согласовании"".", "КЭСЧФ");
					Пока ВыборкаРезультатаЗапросаПоНомеруПродавцаИлиКомитента.Следующий() Цикл
						ОтразитьОшибку(Ошибки, "Ссылается на документ № " + ВыборкаРезультатаЗапросаПоНомеруПродавцаИлиКомитента.Номер + " со статусом " + ВыборкаРезультатаЗапросаПоНомеруПродавцаИлиКомитента.Статус
												+ " от " + ВыборкаРезультатаЗапросаПоНомеруПродавцаИлиКомитента.ДатаСостояния, "КЭСЧФ");
					КонецЦикла;
				КонецЕсли;
			КонецЕсли;
			
		КонецЕсли;
		
		// Правило-57
		
		ЗапросИсправленныйНаСогласовании = Новый Запрос;
		ЗапросИсправленныйНаСогласовании.УстановитьПараметр("КЭСЧФ", Документ.Номер);
		ЗапросИсправленныйНаСогласовании.УстановитьПараметр("НаСогласовании", ПредопределенноеЗначение("Перечисление.СтатусыЭСЧФ.НаСогласовании"));
		ЗапросИсправленныйНаСогласовании.Текст = "ВЫБРАТЬ
		|	ЭлектронныйСчетФактураПолученный.Ссылка КАК СсылкаНаИсправленныйНаСогласовании
		|ИЗ
		|	Документ.ЭлектронныйСчетФактураПолученный КАК ЭлектронныйСчетФактураПолученный
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КвитанцииВходящих КАК КвитанцииВходящих
		|		ПО ЭлектронныйСчетФактураПолученный.НомерГод = КвитанцииВходящих.Год
		|			И ЭлектронныйСчетФактураПолученный.НомерОбъект = КвитанцииВходящих.Объект
		|			И ЭлектронныйСчетФактураПолученный.НомерНомер = КвитанцииВходящих.Номер
		|ГДЕ
		|	ЭлектронныйСчетФактураПолученный.КЭСЧФ = &КЭСЧФ
		|	И КвитанцииВходящих.Статус = &НаСогласовании";
		
		РезультатЗапросаИсправленногоНаСогласовании = ЗапросИсправленныйНаСогласовании.Выполнить();
		
		Если Не РезультатЗапросаИсправленногоНаСогласовании.Пустой() Тогда
			Отказ = Истина;
			Если Ошибки <> Неопределено Тогда
				ВыборкаИсправленногоНаСогласовании = РезультатЗапросаИсправленногоНаСогласовании.Выбрать();
				ВыборкаИсправленногоНаСогласовании.Следующий();
				ОтразитьОшибку(Ошибки, "Получатель не может дать согласие на аннулирование ЭСЧФ, если к данному ЭСЧФ есть исправленный ""на согласовании""
										| (" + СокрЛП(ВыборкаИсправленногоНаСогласовании.СсылкаНаИсправленныйНаСогласовании) + "). При подписании получателем исправленного
										| ЭСЧФ, исходный ЭСЧФ должен быть аннулирован автоматически", "КЭСЧФ");
			КонецЕсли;
		КонецЕсли;
		
	КонецЕсли;

КонецФункции //ЭСЧФСоответствуетПротоколуВх
Показать
2. Slypower 19.04.16 17:15 Сейчас в теме
Возник еще вопрос. Это из данной обработки.
Как представить дату в формате: 2016-04-19
Если расписывать:
ДатаГод(Док.ДатаДок)+"-"+ДатаМесяц(Док.ДатаДок)+"-"+ДатаЧисло(Док.ДатаДок)

Ответ: 2016-4-16, а нужно: 2016-04-16
3. Xershi 390 19.04.16 17:19 Сейчас в теме
(2) Slypower, нужно использовать формат.
5. Slypower 19.04.16 17:43 Сейчас в теме
(3)Пролопатил Формат, но ничего не вышло(
(4)Так если около сотни реализаций, в каждой реализации от 20 товаров, то нужно человека садить, чтобы он эти документы на сервисе создавал и отправлял)))
7076. Slypower 01.06.17 11:54 Сейчас в теме
Очень хорошая статейка по парсингу CSV файла. Не важно как расположены колонки и как названы они. Вот код:
Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",",
    Знач ПропускатьПустыеСтроки = Неопределено)
 
    Результат = Новый Массив;
 
    // для обеспечения обратной совместимости
    Если ПропускатьПустыеСтроки = Неопределено Тогда
        ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь);
        Если ПустаяСтрока(Строка) Тогда 
            Если Разделитель = " " Тогда
                Результат.Добавить("");
            КонецЕсли;
            Возврат Результат;
        КонецЕсли;
    КонецЕсли;
    //
 
    Позиция = Найти(Строка, Разделитель);
    Пока Позиция > 0 Цикл
        Подстрока = Лев(Строка, Позиция - 1);
        Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда
            Результат.Добавить(Подстрока);
        КонецЕсли;
        Строка = Сред(Строка, Позиция + СтрДлина(Разделитель));
        Позиция = Найти(Строка, Разделитель);
    КонецЦикла;
 
    Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда
        Результат.Добавить(Строка);
    КонецЕсли;
 
    Возврат Результат;
 
КонецФункции

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

	//генерируем столбцы
	Для Каждого ИмяСтолбца Из МассивКол Цикл

		ИмяБезПробелов = СтрЗаменить(ИмяСтолбца," ",""); // убираем из имени пробелы
		Если Найти(ИмяБезПробелов,"""")<>0 Тогда
			ИмяБезПробелов=СтрЗаменить(ИмяБезПробелов,"""","");
		КонецЕсли;
		Если Найти(ИмяБезПробелов,"№")<>0 Тогда
			ИмяБезПробелов=СтрЗаменить(ИмяБезПробелов,"№","Номер");
		КонецЕсли;
		Если Найти(ИмяБезПробелов,"(")<>0  Тогда
			ИмяБезПробелов=СтрЗаменить(ИмяБезПробелов,"(","");
		КонецЕсли;
		Если Найти(ИмяБезПробелов,")")<>0  Тогда
			ИмяБезПробелов=СтрЗаменить(ИмяБезПробелов,")","");
		КонецЕсли;
		Если Найти(ИмяБезПробелов,"–")<>0  Тогда
			ИмяБезПробелов=СтрЗаменить(ИмяБезПробелов,"–","");
		КонецЕсли;

		Таблица.Колонки.Добавить(ИмяБезПробелов,,ИмяСтолбца);
		НовыйСтолбец = ЭлементыФормы.Таблица.Колонки.Добавить(ИмяБезПробелов, ИмяСтолбца);
		НовыйСтолбец.Данные = ИмяБезПробелов;

	КонецЦикла;

	Для НомерСтроки=4 по ЗагружаемыйФайл.КоличествоСтрок() Цикл

		Состояние("Обрабатывается "+Строка(Формат(?(ЗагружаемыйФайл.КоличествоСтрок()=0,0,((100*НомерСтроки)/                                                                                                ЗагружаемыйФайл.КоличествоСтрок())),"ЧЦ=3; ЧДЦ=0"))+" %");
		ОбработкаПрерыванияПользователя(); //указав данный оператор, цикл можно прервать в любой момент нажатие ctrl+break

		// получить стрoку с указанным номером и преобразуем её в массив
		Строка = ЗагружаемыйФайл.ПолучитьСтроку(НомерСтроки);
		МассивКол = РазложитьСтрокуВМассивПодстрок(Строка,Разделитель);// процедура из типовой конфигурации, разбивает строку в массив по разделителям
		НоваяСтрочка= Таблица.Добавить();

		Если МассивКол.Количество() <> Таблица.Колонки.Количество() Тогда
			Продолжить; // скорее всего в тексте содержит разделитель
		КонецЕсли;

		Для НомерСтолбца= 1 по МассивКол.Количество() Цикл
			//заполняем строчку значениями
			ТекущееЗначение = МассивКол[НомерСтолбца-1];
			ИмяКолонки = Таблица.Колонки[НомерСтолбца-1].Имя;
			НоваяСтрочка[ИмяКолонки] = ТекущееЗначение;
		КонецЦикла;

	КонецЦикла;
	
		
КонецПроцедуры
Показать


Результат:

вот и вот
svilsa; keyn5565`; +2 Ответить
8. sommid 19.04.16 18:05 Сейчас в теме
(5) слабо лопатили )
ДатаСтрокой = Формат(Дата, "ДФ=yyyy-MM-dd").
в конфигураторе если в модуле любом вызвать контекстное меню, то рядом с конструктором запросов будет и конструктор форматной строки - там побаловаться можно, сразу видя результат
Светлый ум; +1 Ответить
7077. keyn5565` 4 01.06.17 18:58 Сейчас в теме
9. sommid 19.04.16 18:06 Сейчас в теме
(8) тьфу, 7.7.. прошу прощения, там не в курсе )
7078. Slypower 01.06.17 19:38 Сейчас в теме
(7077)
(6951)
сорри, в шапке не нашел, поэтому скинул) Счас ваше сообщение туда добавлю
keyn5565`; +1 Ответить
681. AlexFort1961 1 02.06.16 08:34 Сейчас в теме
(2) Slypower,

ДатаГод(Док.ДатаДок)+"-"+?(ДатаМесяц(Док.ДатаДок)<10,"","0")+ДатаМесяц(Док.ДатаДок)+"-"+ДатаЧисло(Док.ДатаДок)
6. Gluk_1C 19.04.16 17:59 Сейчас в теме
В синкс-помощнике смотри функцию: Формат()
7. Gluk_1C 19.04.16 18:00 Сейчас в теме
Ну или
ДатаГод(Док.ДатаДок)+"-"+ Прав("00" + ДатаМесяц(Док.ДатаДок),2)+"-"+ Прав("00"+ДатаЧисло(Док.ДатаДок),2)
10. Slypower 20.04.16 09:47 Сейчас в теме
6059. keyn5565` 4 09.01.17 14:19 Сейчас в теме
код для тех кто хочет хранить XML файлы в БД
в принципе подходит для любых файлов малого размера

//Преобразует двоичные данные в Base64 и возвращает строку в base64
Функция ПолучитьТекстBase64(Объект,ТипОперации,Строка64)
	Если ТипОперации = "Преобразование" Тогда
		Двоичное = Новый ДвоичныеДанные(Объект);//Ссылка на объект
		Строка64 = Base64Строка(Двоичное);//Строка для сохранения
		//Массив64 = Преобразовать64(Строка64 , );//Для того, чтобы получить массив байтов из строки, вызываем ее так:
		Возврат Строка64
	ИначеЕсли ТипОперации = "Востановление" Тогда	
		//Востановление
		Массив64 = Преобразовать64(Строка64 , );//Для того, чтобы получить массив байтов из строки, вызываем ее так:
		Строка64 = Преобразовать64( , Массив64 );//Для обратного преобразования вызываем так:
		вДвоичное = Base64Значение(Строка64);//Преобразовать строку в двоичные
		ИмяФайла = ПолучитьИмяВременногоФайла("xml"); //Сохранение в файл
		вДвоичное.Записать(ИмяФайла);
		//УдалитьФайлы(ИмяФайла);
		Возврат ИмяФайла
	КонецЕсли;
КонецФункции

Функция Преобразовать64(Строка64 = неопределено, Массив64 = неопределено)Экспорт
	Таб64 = Новый ТаблицаЗначений;
	Таб64.Колонки.Добавить("Код");
	Таб64.Колонки.Добавить("Символ");
	Нпп = 0;
	Для Код = КодСимвола("A") По КодСимвола("Z") Цикл
		стр = Таб64.Добавить();
		стр.Код = Нпп;
		стр.Символ = Символ(Код);
		Нпп = Нпп + 1;
	КонецЦикла;
	Для Код = КодСимвола("a") По КодСимвола("z") Цикл
		стр = Таб64.Добавить();
		стр.Код = Нпп;
		стр.Символ = Символ(Код);
		Нпп = Нпп + 1;
	КонецЦикла;
	стр = Таб64.Добавить();
	стр.Код = Нпп;
	стр.Символ = "0";
	Нпп = Нпп + 1;
	Для Код = 1 По 9 Цикл
		стр = Таб64.Добавить();
		стр.Код = Нпп;
		стр.Символ = Формат(Код,"ЧЦ=1; ЧДЦ=0");
		Нпп = Нпп + 1;
	КонецЦикла;
	стр = Таб64.Добавить();
	стр.Код = Нпп;
	стр.Символ = "+";
	Нпп = Нпп + 1;
	стр = Таб64.Добавить();
	стр.Код = Нпп;
	стр.Символ = "/";
	
	Если Массив64 = неопределено Тогда 
		Если Строка64 = неопределено Тогда
			Сообщить("неверный вызов функции");
			Возврат неопределено;
		КонецЕсли;
		//Уберем переносы строк
		Строка64 = СтрЗаменить(Строка64, Символ(10), "");
		Строка64 = СтрЗаменить(Строка64, Символ(13), "");
		
		//преобразовываем строку в массив
		Если СтрДлина(Строка64) % 4 <> 0 Тогда
			Сообщить("длина строки на входе должна быть кратна 4"); 
			Сообщить(СтрДлина(Строка64)); 
			Возврат неопределено;
		КонецЕсли;
		Кол4 = Цел(СтрДлина(Строка64) / 4);
		РазмерМ = Кол4 * 3;
		Если Прав(Строка64, 2) = "==" Тогда
			РазмерМ = РазмерМ - 2;
		ИначеЕсли Прав(Строка64, 1) = "=" Тогда
			РазмерМ = РазмерМ - 1;
		КонецЕсли;   
		Массив64 = Новый Массив(РазмерМ);
		Для А = 1 По Кол4 Цикл
			Число3 = 0;
			Для Б = 1 По 4 Цикл
				Буква1 = Сред(Строка64, (А-1)*4 + Б, 1); 
				Если Буква1 = "=" Тогда
					Код4 = 0;
				Иначе
					стрН = Таб64.Найти(Буква1, "Символ");
					Если стрН = Неопределено Тогда
						Сообщить("ошибка при поиске "+ КодСимвола(Буква1)); 
					Иначе 
						Код4 = стрН.Код;
					КонецЕсли;
				КонецЕсли;
				Число3 = Число3 * 64 + Код4;
			КонецЦикла;
			Ост = Число3 % 256;
			Индекс = (А-1)*3 + 2;
			Если Индекс <= РазмерМ - 1 Тогда
				Массив64[Индекс] = Ост;
			КонецЕсли;
			Число3 = (Число3 - Ост) / 256;
			Ост = Число3 % 256;
			Индекс = (А-1)*3 + 1;
			Если Индекс <= РазмерМ - 1 Тогда
				Массив64[Индекс] = Ост;
			КонецЕсли;
			Число3 = (Число3 - Ост) / 256;
			Ост = Число3 % 256;
			Массив64[(А-1)*3 + 0] = Ост;
		КонецЦикла;
		Возврат Массив64;
	Иначе //Преобразовываем массив в строку
		Строка64 = "";
		Кол3 = Цел(Массив64.Количество() / 3);
		Если Массив64.Количество() % 3 <> 0 Тогда
			Кол3 = Кол3 + 1;
		КонецЕсли;
		Для А = 1 По Кол3 Цикл
			Число3 = Массив64[(А-1)*3]; 
			Если (А-1)*3+1 <= Массив64.ВГраница() Тогда
				Код3 = Массив64[(А-1)*3+1];
			Иначе
				Код3 = 0;
			КонецЕсли;
			Число3 = Число3*256 + Код3;
			Если (А-1)*3+2 <= Массив64.ВГраница() Тогда
				Код3 = Массив64[(А-1)*3+2];
			Иначе
				Код3 = 0;
			КонецЕсли;
			Число3 = Число3*256 + Код3;
			
			Ост4 = Число3 % 64;
			Число3 = (Число3 - Ост4) / 64;
			Ост3 = Число3 % 64;
			Число3 = (Число3 - Ост3) / 64;
			Ост2 = Число3 % 64;
			Число3 = (Число3 - Ост2) / 64;
			Ост1 = Число3 % 64;
			Число3 = (Число3 - Ост1) / 64;
			стрН = Таб64.Найти(Ост1, "Код");
			Если стрН = неопределено Тогда
				Сообщить("Ошибка при поиске");
			Иначе
				Строка64 = Строка64 + стрН.Символ;
			КонецЕсли;
			стрН = Таб64.Найти(Ост2, "Код");
			Если стрН = неопределено Тогда
				Сообщить("Ошибка при поиске");
			Иначе
				Строка64 = Строка64 + стрН.Символ;
			КонецЕсли;
			стрН = Таб64.Найти(Ост3, "Код");
			Если стрН = неопределено Тогда
				Сообщить("Ошибка при поиске");
			Иначе
				Строка64 = Строка64 + стрН.Символ;
			КонецЕсли;
			стрН = Таб64.Найти(Ост4, "Код");
			Если стрН = неопределено Тогда
				Сообщить("Ошибка при поиске");
			Иначе
				Строка64 = Строка64 + стрН.Символ;
			КонецЕсли;
		КонецЦикла;
		//Если количество символов не делится на 3, то на конце должны быть
		//знаки "="
		Если Массив64.Количество() % 3 = 1 Тогда
			Строка64 = Лев(Строка64, СтрДлина(Строка64)-2)+ "=="; 
		ИначеЕсли Массив64.Количество() % 3 = 2 Тогда
			Строка64 = Лев(Строка64, СтрДлина(Строка64)-1)+ "="; 
		КонецЕсли;
		Возврат Строка64;
	КонецЕсли;
КонецФункции
Показать

Толком ни разу так и не воспользовался но может кому то пригодиться
(1с8)
11. Vortigaunt 23 20.04.16 10:08 Сейчас в теме
ДатаГод(Док.ДатаДок)+"-"+Формат(ДатаМесяц(Док.ДатаДок),"Ч(0)2.0")+"-"+Формат(ДатаЧисло(Док.ДатаДок),"Ч(0)2.0")
Slypower; +1 Ответить
12. Slypower 20.04.16 10:38 Сейчас в теме
13. Slypower 20.04.16 11:28 Сейчас в теме
Еще одна дилемма - вырезать номер договора из названия.
Имеется: "договор №12345 от 01.01.2015"
Как вывести номер договора: "12345", при условии, что он может быть разным по длине?
Как мог бы найти выход:
1. Можно вывести значение: "договор №12345", обрезав право. Это Легко.
2. Потом вывести "12345", обрезов лево. Это как сделать?
Постоянные значения: "договор от" - 10 символов. "от 01.01.2015" - 13 символов.
14. Cooler 20 20.04.16 11:41 Сейчас в теме
(13) Slypower,
Постоянные значения: "договор от" - 10 символов. "от 01.01.2015" - 13 символов.
"Народное творчество" и просто опечатки пользователей будут регулярно делать эти "постоянные" значения непостоянными.

Я бы сделал так:
1. Нашел в строке позицию слова "договор" и взял правую часть строки от этой позиции +7 (длина слова "договор"). Получилось бы " №12345 от 01.01.2015"
2. В получившейся подстроке нашел бы слово "от" и взял левую часть строки до этой позиции, получил бы " №12345 "
3. Заменил бы символ "№" на пробел и применил СокрЛП().

Но, опять-таки, предвижу вариант, когда "креативный" пользователь вколотит "дог.12345 от 01.01.15" и вся эта затея провалится.
16. Slypower 20.04.16 11:58 Сейчас в теме
(14)2. Мы не можем взять правильно левую часть до слова "от", т.к. сам номер "№12345" может быть "№12345/12/12". Тут слева мы не можем брать, нужно отнимать правую сторону. Только вот вычитание для строковых величин невозможно.
(15)да, только в названии. Сделать новый реквизит и сидеть целый день и вносить этот реквизит вручную для десяток тысяч контрагентов? Не вариант(
17. Cooler 20 20.04.16 12:10 Сейчас в теме
(16) Slypower,
Мы не можем взять правильно левую часть до слова "от", т.к. сам номер "№12345" может быть "№12345/12/12".
Если вы не можете, то это не значит, что все не могут.

Это значит, что вы просто не умеете:
СтрНомерДата=Прав(ИсхСтрока,Найти(ИсхСтрока,"договор")+7);
СтрНомер=Лев(СтрНомерДата, Найти(СтрНомерДата,"от")-1);
Slypower; +1 Ответить
19. Slypower 20.04.16 12:29 Сейчас в теме
(17)Сделал так:
НомерДоговора = Сред(док.Договор.Наименование,10); 
НомерДоговораКонечное = СокрЛП(Лев(НомерДоговора, Найти(НомерДоговора,"от")-1));

Вывод хороший. И сразу виден вывод из (14) "Но, опять-таки, предвижу вариант, когда "креативный" пользователь вколотит "дог.12345 от 01.01.15" и вся эта затея провалится.")))))
(18) Согласен. Я думал, создать обработку и аналогично данным строкам заполнить реквизиты. Может так и сделаем. Только лишние телодвижения потом при создании нового договора, чтобы наименование формировалось "договор №12345 от 01.01.2015", но это уже совсем другая история))
20. Xershi 390 20.04.16 12:46 Сейчас в теме
(19) Slypower, логичнее номер хранить в отдельном реквизите. Просто в клюшке не думали об этом раньше))
67. Alex911k 03.05.16 09:50 Сейчас в теме
Вот пришло письмо, обещанное 2 мая.
Добрый день.
Ссылка на просмотр записи вебинара: https://webinars.softlinegroup.com/mira/miravr/3974463496
Работа с порталом АИС УСФ доступна по ссылке http://vat.gov.by/
Вся информация по работе с электронными счетами фактурами находится на портале МНС http://www.nalog.gov.by/ru/electronic_invoice_ru/
XSD-схемы и описания XML-файлов, а так же инструкции и файлы для работы с веб-сервисом в архиве: https://www.dropbox.com/s/1amqxwtgwfcfjcy/eInvVat.7z?dl=0


С уважением,
Служба технической поддержки

Номера телефонов для обращения с/х по различным вопросам работы с АИС «Учет счетов-фактур»:
по техническим: +375 17 328-32-96, +375 17 328-33-05, +375 17 223-78-23,
по организационным: тел. (017)2297994, (017) 2297987,
по методологическим: тел. (017)2297927, (017)2297928, (017)2202347.
72. pasha_2001 03.05.16 11:52 Сейчас в теме
(67) Alex911k, может им запрос по мылу отправить с просьбой выложить исходники 1с?
109. Alex911k 04.05.16 16:23 Сейчас в теме
Вот пришло ещё письмо от техподдержки.
Добрый день
В рамках демонстрации использования интеграционного решения с функциями подписания и отправки электронных счетов-фактур на веб-сервис АИС УСФ, был показан пример вызова из системы 1С. Прилагаем данный пример. Надеемся он будет вам полезен для доработки ваших учетных систем.

С уважением,
Служба технической поддержки
Номера телефонов для обращения с/х по различным вопросам работы с АИС «Учет счетов-фактур»:
по техническим: +375 17 328-32-96, +375 17 328-33-05, +375 17 223-78-23,
по организационным: тел. (017)2297994, (017) 2297987,
по методологическим: тел. (017)2297927, (017)2297928, (017)2202347.
Ссылка на доковский файл
https://onedrive.live.com/redir?resid=CB1FD4FA8125D79A!93499&authkey=!APxIv4txF8QtAF4&ithint=file%2cdocx
Parazyte; +1 Ответить
320. Alex911k 20.05.16 14:24 Сейчас в теме
Новое письмо от новакома
Добрый день.
Информируем Вас о том, что обновилась новая версия ПО для массовой подписи ЭСЧФ.
Данное ПО доступно по ссылке: vat.gov.by
Номера телефонов для обращения с/х по различным вопросам работы с АИС «Учет счетов-фактур»:
по техническим: +375 17 328-32-96, +375 17 328-33-05, +375 17 223-78-23,
по организационным: тел. (017)2297994, (017) 2297987,
по методологическим: тел. (017)2297927, (017)2297928, (017)2202347.
325. Nykos 20.05.16 14:53 Сейчас в теме
(320) Alex911k, а саму ссылку можешь скинуть?
328. shiko 20.05.16 15:02 Сейчас в теме
(320) Alex911k, а ссылку можно увидеть откуда скачать ??????
330. Slypower 20.05.16 15:05 Сейчас в теме
(328) shiko, http://www.nalog.gov.by/ru/electronic_invoice_ru/

Интересная работа портала. 1С выдает, что все проверки прошла счет-фактура, файл выгрузился на портал, все прошло. На портале его нет. Этот же файл пробую загружать на портал с портала кнЗагрузить, то ошибка в структуре. Что за ерунда -то((
332. shiko 20.05.16 15:29 Сейчас в теме
(330) Slypower, какая ошибка у меня была ругалась на секцию dateIssuance, не нравилась она порталу, закоментил и все прекрасно улеглось. На сколько я понял она в файле не нужна, добавляется автоматом когда фаил передается на портал. если потом СФ выгрузить с портала в xml, она в файле присудствует с датой выгрузки СФ.
347. Gluk_1C 23.05.16 16:13 Сейчас в теме
418. shiko 25.05.16 17:25 Сейчас в теме
В тех поддержку написал письмо по поводу выгрузки и что сервис выдает что фаил принят но когда захожу в личный кабинет файла нет.

Получил ответ

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

С уважением,
Служба технической поддержки
Номера телефонов для обращения с/х по различным вопросам работы с АИС «Учет счетов-фактур»:
по техническим: +375 17 328-32-96, +375 17 328-33-05, +375 17 223-78-23,
по организационным: тел. (017)2297994, (017) 2297987,
по методологическим: тел. (017)2297927, (017)2297928, (017)2202347."
985. Slypower 10.06.16 17:15 Сейчас в теме
From: Я
Sent: Friday, June 10, 2016 3:34 PM
To: Техническая поддержка ЭСЧФ <support_EINVOICE@novacom.by>
Subject: Вопросы по порталу

Добрый день. Есть пару вопросов-предложений
1) Хотелось бы на портале иметь возможность удалять поступившие нам ЭСЧФ. Могут выставить неправильных, и они будут мешать. Со временем их будет сотни, и это неудобно, будет каша и потеряются некоторые неподписанные.
2) Хотелось бы проверять статус не по одной счет-фактуре, а из периода дат. Мы будем выгружать раз в неделю/месяц много фактур, и как нам проверить статус, подписана или аннулирована? Оповещений же нет никаких.
3) Хотелось бы проверять входящие по периоду дат. Организации могут выставлять не до 5 числа месяца, а и позже. Так вот тоже можно будет путаться. Если будет проверка методом GetList(датаначала, датаконец), было очень хорошо.
4) Спасибо за понимание.


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

С уважением,
Служба технической поддержки
Номера телефонов для обращения с/х по различным вопросам работы с АИС «Учет счетов-фактур»:
по техническим: +375 17 328-32-96, +375 17 328-33-05, +375 17 223-78-23,
по организационным: тел. (017)2297994, (017) 2297987,
по методологическим: тел. (017)2297927, (017)2297928, (017)2202347.
1004. selus 12.06.16 13:18 Сейчас в теме
Пересылаю очередной ФЕЕРИЧЕСКИЙ БРЕД выданный службой ТП ЭСЧФ

ПЕЧАЛЬНО даже округлить не могут. ОХРЕНЕТЬ уровень программирования в РБ!!!

------- Пересылаемое сообщение -------
От: "Техническая поддержка ЭСЧФ" <support_EINVOICE@novacom.by>
Кому: "selus@mail.ru" <selus@mail.ru>
Копия:
Тема: RE: Еще одна Странная ошибка передачи Похоже сегодня портал не заработает
Дата: Fri, 10 Jun 2016 15:47:42 +0300

Добрый день.
По поводу Вашей xml, там проблема в totalCostVat="274904000.329999" портал принимает только 3 знака после запятой.
При ручной загрузке портал округляет и поэтому дает подписать и отправить.

С уважением,
Служба технической поддержки
Номера телефонов для обращения с/х по различным вопросам работы с АИС <Учет счетов-фактур>:
по техническим: +375 17 328-32-96, +375 17 328-33-05, +375 17 223-78-23,
по организационным: тел. (017)2297994, (017) 2297987,
по методологическим: тел. (017)2297927, (017)2297928, (017)2202347.
4620. Slypower 19.10.16 15:48 Сейчас в теме
Нужна помощь наших Гуру 8рок.
Есть код:
Функция VerifyAllSigns(InvVatXml)
	Перем i, signCount;
	Перем InvVatNumber;
	ОшибкаПодписи=0;

	InvVatNumber = InvVatXml.Document.GetXmlNodeValue("issuance/general/number"); 
	
	signCount = InvVatXml.GetSignCount;
	
	if signCount = 0 then
		Сообщить(  "Ошибка: документ №" + InvVatNumber +  " не содержит ЭЦП");
		VerifyAllSigns = 1;
		//возврат;
	endif;
	
	for i = 0 to signCount - 1 do 
		oid = "2.5.4.3"; //(commonName)
		str = InvVatXml.GetSignProperty(i, oid, 0);
		//Сообщить(  "Проверка подписи " + str);
		
		res = InvVatXml.VerifySign(i, 0);
		if res <> 0 then
			Сообщить( "Ошибка проверки подписи: " + EVatService.LastError);
			ОшибкаПодписи=1;
			VerifyAllSigns = 2;
			Прервать;
		else
			ОшибкаПодписи=0;
			Сообщить("ЭЦП проверена. Дата подписания: " + InvVatXml.GetSignProperty(i, "SIGNDATE", 0));
		endif;				
	EndDo;
	
	VerifyAllSigns = 0
КонецФункции // VerifyAllSigns(InvVatXml)
Показать

Так вот, на 7.7 работает без проблем, а на 8-ке валится с ошибкой:
{Форма.Форма.Форма(17)}: Значение не является значением объектного типа (Document)
	InvVatNumber = InvVatXml.Document.GetXmlNodeValue("issuance/general/number"); 

Поясните, почему такое происходит и чем тут эта 8ка относится от 7.7?

Примечательно, на тестовом такой проблемы нет, почему тогда это наблюдается на рабочем?
4621. Xershi 390 19.10.16 16:21 Сейчас в теме
(4620) Slypower, смотри в отладке чему равно InvVatXml.
В 1с8 есть такая кнопка в отладке остановка по ошибке. Перед тем как вывалить ошибку тебе остановит на ошибке и сможешь проанализировать входные параметры.
4622. Slypower 19.10.16 16:26 Сейчас в теме
(4621) Xershi, смотрел, ничего не выдает. Может все же портал глючит? На тестовом выдает 1, а на рабочем ничего.
4623. Xershi 390 19.10.16 16:29 Сейчас в теме
(4622) Slypower, номер то 25 знаков какой 1?)
4624. Slypower 19.10.16 16:33 Сейчас в теме
(4623) Xershi, У меня строка: InvVatXml = EVatService.GetEDoc(InvVatNumber); , откуда получаем номер. Вот я и перепутал вопрос))) получал отсюда: InvVatNumber - выдает 25 знаков, InvVatXml - выдает 1 (на тестовом).
Кнопку "Остановка по ошибке" не нашел еще(
4625. Xershi 390 19.10.16 17:34 Сейчас в теме
(4624) Slypower, отладка - остановка по ошибке - галка останавливаться по ошибке
Slypower; +1 Ответить
4637. wasiliy 20.10.16 01:10 Сейчас в теме
(4620) Slypower,
Называется функцией, если верить коду, выглядит как процедура.
4640. Slypower 20.10.16 09:30 Сейчас в теме
(4637) wasiliy, ну читать я умею, но я же не писал, что процедура, а написал код. И от этого вашего знания, проблема не решается
4670. wasiliy 20.10.16 13:27 Сейчас в теме
(4640) Slypower,
Я же не телепат, в таком случае если все знаете возьмите типовую обработку из 1с 8, там код похож и сравните, что у вас не работает.
4642. lazovit 20.10.16 09:38 Сейчас в теме
(4620) Slypower,
в InvVatXml передаете не то что надо, т.е. при вызове функции ли процедуры подсовываете не то что надо
4644. Slypower 20.10.16 09:51 Сейчас в теме
(4642) lazovit, да я разобрался в чем дело, дело в том, что 8-ка отличается от 7.7, поэтому не получается. Немного переделать код под другую логику и все заработает.
4669. Igor Igorevich 20.10.16 13:23 Сейчас в теме
(4620) Slypower, восьмерка тут не причем, портал не отдает нужную инфу.
А тестовый - красавец, работает хорошо, но это почти уже никому не надо.
4671. Slypower 20.10.16 13:42 Сейчас в теме
(4669) Igor Igorevich, ну дело было в обработке. Xershi в (4627) дал направление, которое мне и помогло реализовать для 8ки. Все работает теперь
4685. Igor Igorevich 21.10.16 15:15 Сейчас в теме
(4671) Slypower, У меня ночью все работает хорошо, а днем по прежнему выдает ошибки.
Один раз запустишь - ошибки на одних ЭСЧФ, другой раз - ошибки могут быть уже на других ЭСЧФ.
Писал в поддержку по конкретным ошибкам - ответили, что в их базе по данным ЭСЧФ нет ошибок, попробуйте зайти на портал завтра.
И как тут не грешить на портал ?
18. Xershi 390 20.04.16 12:22 Сейчас в теме
(16) Slypower, обработки для этого придумали.

Так в чем у вас проблема отпарсить строку?
15. Xershi 390 20.04.16 11:49 Сейчас в теме
(13) Slypower, у вас номер договора написан только в названии?
Может тогда сделать отдельный реквизит номер договора?
Ну а так функции работы со строками Лев, Прав, Сред.
21. Slypower 20.04.16 13:37 Сейчас в теме
Вот теперь первоначальный вопрос. Есть те, кто уже тестируют данные выгрузки из 1С в ЭСЧФ?
22. Xershi 390 20.04.16 14:06 Сейчас в теме
(21) Slypower, я думал подождать. Может сольют конфу от франчайзи и слизать готовый вариант.
Коллеге предложил делать через вебсервисы, но он не захотел их изучать.
Поэтому пока мы даже ничего не пишем. К деноминации готовим базы.
34. Gladkov_Anton 73 21.04.16 17:49 Сейчас в теме
(22) Xershi, сливать конфу от франчайзи не очень корректно.
Мы же тратим средства на разработку в расчёте на реализацию нашего труда.

Такие вещи правильнее покупать. Это не дорого для Вас и приятно для нас)
36. Xershi 390 22.04.16 10:40 Сейчас в теме
(34) Gladkov_Anton, все все знают. Вопрос не в этом.
23. Slypower 20.04.16 15:42 Сейчас в теме
Готовая есть тут для 8, но она платная. Написать легко. Я подготовил, пока в виде внешней обработке (с небольшими расшифровками в коде), могу скинуть. Только вот еще не вся инфа мне понятно. Где брать Номер ЭСЧФ, как он меняться будет и еще много вопросов.
Деноминация - это вообще бяда: База огромная, стандартными свертками не сворачивается Книга продаж.
Директор сказал, сделать ЭСЧФ. Будем может внедрять в процедуру ПриПроведении. Результат: создаются файлы xml как в примере. Ну а потом загружать их всех вечером на сайт. Пока такая задумка. Лучше, конечно, все доки в один файл, но хз, можно ли так и будут ли они размером меньше 1 МБ
24. Xershi 390 20.04.16 16:03 Сейчас в теме
(23) Slypower, это же хмл. Объем зависит от количества текста.
25. Slypower 20.04.16 16:11 Сейчас в теме
(24) Основное различие в количестве текста - количество товара в реализации
26. Xershi 390 20.04.16 16:12 Сейчас в теме
(25) Slypower, тут тогда нужно делать транзакцию с определенным объемом документов и проблем не будет.
27. pumbaE 604 20.04.16 16:29 Сейчас в теме
(23) Slypower, ставите признак "требуется выгрузка" и "выгружен", при проведении только ставим "требуется выгрузка", потом выгружаем все обработкой и проставляем "выгружен".
33. Gladkov_Anton 73 21.04.16 17:42 Сейчас в теме
(23) Slypower, Выгружать несколько документов одним запросом не получится.
Дело в том, что каждая ЭСЧФ должна быть подписана электронным ключом отдельно.
И по каждой будет генерироваться отдельный файл-ответ (тикет)

Мы со своей стороны отправляли пожелания по работе веб-сервиса разработчикам портала и Авесту.
Разработчик портала подтвердил, что функционал веб-сервисов будет расширен.
Пожелания организаций участвующих в тестировании будут учтены.
См. http://www.export.by/?act=news&mode=view&id=67735

Для подписи будет использоваться ключ от Авеста.
Они же ведут разработку транспорта для доставки xml.
Будет использоваться зашифрованный канал (TLS)
Инициализировать его из 1с просто так не получится. Поэтому использовать веб-сервисы (SOAP) тоже не получится.

На текущий момент Авест предложил утилиту, которая позволяет подписать и отравить ЭСЧФ из папки.
Запуск утилиты производится из командной строки. Ответы (тикиты) так же будут складываться в папку.

Такой подход существенно затрудняет интеграцию.
Мы со свой стороны описали сложности интеграции, приложили прошении о переходе на использование COM-объектов или Native API
Такой вариант позволил бы производить работу с TLS и ЭЦП прозрачно для учетных систем.

Решения по данному вопросу пока нет. Обещали рассмотреть на следующей неделе.
Slypower; sommid; +2 Ответить
35. Slypower 22.04.16 09:46 Сейчас в теме
(33)Мы решили выгружать одним запросом все документы в папку, а потом уже вручную их загружать на сайт по одному документу, что очень неудобно и затратно.
Утилита от Авест заказывается у них? На сайте Министерства по налогам и сборам РБ, где вся информация по ЭСЧФ нет ее. Будет ждать информации. Спасибо, что сообщили. Если будет какие новшества, надеюсь, они выложат всю информацию
37. Gladkov_Anton 73 22.04.16 13:18 Сейчас в теме
(35) Slypower, утилиту думаю предоставили пока только тестировщикам.
Очень надеюсь, что на следующей неделе все таки появится COM-объект для интеграции и потребность в "папках и файлах" отпадет.
38. Xershi 390 22.04.16 13:20 Сейчас в теме
(37) Gladkov_Anton, лучше бы веб-сервисы подружили и тогда вообще во всем отпадет надобность.
39. Gladkov_Anton 73 22.04.16 14:06 Сейчас в теме
(38) Xershi, отказали. Отказ мотивировали необходимостью реализовать шифрование канала связи собственными средствами.
41. Xershi 390 23.04.16 10:29 Сейчас в теме
(39) Gladkov_Anton, буду ждать развития темы, короче у нас как всегда все через одно место...
40. botman4 4 22.04.16 23:35 Сейчас в теме
(37) Gladkov_Anton, COM-объект.... для интеграции... у нас в РБ? )))))
523. oks25 27.05.16 15:07 Сейчас в теме
Может,кто подскажет, в чем ошибка?? Спасибо
Начало записи: D:\2015-11-18\XML\2016\doc_
Время начала: 14:44:27
стрИмяФайла1=D:\2015-11-18\XML\2016\doc_100000002.xml
100000002.xml
номер договора 100000002
прм_ИмяФайла=D:\2015-11-18\XML\2016\doc_ВЕ0161151.xml
xml_file=xml_fso.CreateTextFile(прм_ИмяФайла, -1, 0); //создать файл, перезаписывая существующий.
{D:\2015-11-18\EXTFORMS\ВЫГРУЗКА_ЭСЧФ_2705.ERT(35)}: :
Прикрепленные файлы:
526. stavrosoleg 7 27.05.16 15:20 Сейчас в теме
(523) 35 строка кода? Если это "xml_file=xml_fso.CreateTextFile(прм_ИмяФайла, -1, 0); //создать файл, перезаписывая существующий.", то Вы пытаетесь записать ОТКРЫТЫЙ до этого файл с его подменой.
535. oks25 27.05.16 16:15 Сейчас в теме
(526) stavrosoleg, Спасибо огромное, извините за глупые вопросы ,кто-то уже на финишной прямой,а мы только стартуем!
536. oks25 27.05.16 16:35 Сейчас в теме
(526) stavrosoleg, а не подскажите каким мемодом очиститьфайл() перед созданием?
2142. an2007 11.07.16 13:59 Сейчас в теме
Пытаюсь разобрать документ, делаю по примеру выше, ошибка:
	InvList = EVatService.GetList(ДатаНачала);
	Для i = 1 по InvList.Count  Цикл
		InvVatNumber = InvList.GetItemAttribute(i, "document/number");
		InvVatXml = EVatService.GetEDoc(InvVatNumber);
		УНП = InvVatXml.Document.GetXmlNodeAttribute("issuance/provider/unp");

InvVatXml = EVatService.GetEDoc(InvVatNumber);
{D:\CONFIG\EXTFORMSADD\EINVVATSERVICE.ERT(536)}: Плохой тип переменной
2144. tyn 11.07.16 14:09 Сейчас в теме
(2142) an2007,
Для i = 0 по InvList.Count-1  Цикл
2151. an2007 12.07.16 08:09 Сейчас в теме
(2144) tyn, не помогает:
	InvList = EVatService.GetList(ДатаНачала);
	Для i = 0 по InvList.Count  Цикл
		InvVatNumber = InvList.GetItemAttribute(i, "document/number");
		InvVatXml = EVatService.GetEDoc(InvVatNumber);
		УНП = InvVatXml.Document.GetXmlNodeAttribute("issuance/provider/unp");

Ошибка на первом документе.
2153. an2007 12.07.16 08:43 Сейчас в теме
2154. Nykos 12.07.16 08:52 Сейчас в теме
в чем проблема была?(2153) an2007,
2155. an2007 12.07.16 08:57 Сейчас в теме
(2154) Nykos, я делал перебор от 1..count, надо 0..count-1
2156. Slypower 12.07.16 09:25 Сейчас в теме
(2155) an2007, -> (2144) tyn, как так? как так не сразу понял?)))))))))
4690. selus 22.10.16 09:36 Сейчас в теме
Требуется помощь! Может кто с этим сталкивался! Техподдержка молчит (уже направил им три письма).

Привожу последнее:

Получаю входящие.

Запись: 691756132-2016-0000001294 от 12.09.16 осн.
ФайлДанных.Загрузить(ИмяФайла);
{D:\77NASTR\ПОРТАЛ_ЭСЧФ_НТС_ПОЛИГРАФИЯ\EXTFORMS\ОБРАБОТКИ_ЗАГРУ­ЗКИ_ПЕРЕДАЧИ\ПРИЕМ_ИЗ_ПОРТАЛА_МНС.ERT(523)}: : Attribute '{http://www.w3.org/2001/XMLSchema-instance}schemaLocation' has an invalid value according to the DTD/Schema.
[<issuance xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.w3schools.com" xsi:schemaLocation="http://www.w3schools.com" sender="691756132"> (error position = 164)]

У кого ошибка
1. у меня (не смог загрузить)
2. у поставщика (неверное пространство имен http://www.w3.org/2001/XMLSchema-instance}schemaLocation типичное для XSD а не XML
3. У Вас на портале (Почему пропускает такое)

К сожалению такие ошибки учащаются. Прошу разьяснить и (или) принять меры.

Несколько поставщиков шлют такое. У меня выставить такое не получается. Проверку не проходит и портал не принимает. КАК УМУДРЯЮТСЯ ТАКОЕ ВЫСТАВЛЯТЬ?????????

И еще вопрос. Ко мне часто обращаются контрагенты с просьбой убрать тэг description из </rosterItem></roster>. Но в схеме этот тэг прописан как обязательный и проверку не проходит. Тем не менее наши контрагенты и я получаем СФ без этого тега.
В связи с этим вопрос: Как это возможно? Как правильно?
Если это правильно, то как этого добиться не выключая проверки?

4693. Xershi 390 22.10.16 11:58 Сейчас в теме
(4690) selus, позвони поставщику и объясни что бы не косячили!
47. pasha_2001 29.04.16 12:15 Сейчас в теме
(23) Slypower, по поводу номера ЭСЧФ. Он формируется по следующему принципу
9 первых цифр - УНП пользователя, который составляет ЭСЧФ - 4 цифры года, в который составляется ЭСЧФ - 10 цифр свободного номера по порядку с учетом лидирующих нулей.
Последовательность последних 10 цифр в году для каждого УНП должна быть уникальна. На начало каждого года, для каждого с/х (УНП) создается последовательность номеров (десять разрядов) от 1 до 9999999999. При заполнении ЭСЧФ, его номер формируется автоматически следующим образом: УНП - Год (текущий) - свободный номер из последовательности. Для каждого ЭСЧФ номер должен быть уникальным для данного УНП в текущем году.
Выложи плз обработку по выгрузке в xml
5361. Igor Igorevich 29.11.16 11:37 Сейчас в теме
Обновление СОС из 1с.
Искал не нашел, пришлось самому сделать, ничего сложного, но может кому-нибудь пригодится.

Процедура ОбновитьСОС()
    
	// удаляем старые СОС
	КомандаСистемы("del %TEMP%\*.crl >NUL: 2>&1"); 
	
	скачатьФайл  = """c:\Program Files\Avest\AvPCM_MNS\wget"" -q -T 30 -O %TEMP%\";  // для 32-х битных систем
	импортСОС	 = """c:\Program Files\Avest\AvPCM_MNS\AvCmUt3.exe"" -C %TEMP%\";
	сайтФайлаМНС = " %PX_USER% %PX_PASS% http:" + Симв(47) + Симв(47) + "www.portal.nalog.gov.by/ca/";
	сайтФайлаПКИ = " %PX_USER% %PX_PASS% http:" + Симв(47) + Симв(47) + "pki.gov.by/certs/-/";   
	выводВНоль	 = " >NUL";
    
	// загрузка СОС Корневой Удостоверяющий центр Министерства по налогам и сборам 
	имяФайла = "mns-ca.crl";
	выполненоУспешно = 0;
	Попытка
		КомандаСистемы(скачатьФайл + имяФайла + сайтФайлаМНС + имяФайла);  
		выполненоУспешно = 1;
	Исключение
		Сообщить("СОС " + имяФайла + " - не скачан !!!");
	КонецПопытки;
    
	Если выполненоУспешно = 1 Тогда
		КомандаСистемы(импортСОС + имяФайла + выводВНоль);
	КонецЕсли;   
	
	// загрузка СОС Корневой УЦ РУП "Информационно-издательский центр по налогам и сборам"
	имяФайла = "rup.crl";
	выполненоУспешно = 0;
	Попытка
		КомандаСистемы(скачатьФайл + имяФайла + сайтФайлаМНС + имяФайла);  
		выполненоУспешно = 1;
	Исключение
		Сообщить("СОС " + имяФайла + " - не скачан !!!");
	КонецПопытки;
    
	Если выполненоУспешно = 1 Тогда
		КомандаСистемы(импортСОС + имяФайла + выводВНоль);
	КонецЕсли;
	
	// загрузка СОС Корневой удостоверяющий центр (КУЦ)
	имяФайла = "kuc.crl";
	выполненоУспешно = 0;
	Попытка
		КомандаСистемы(скачатьФайл + имяФайла + сайтФайлаПКИ + имяФайла);  
		выполненоУспешно = 1;
	Исключение
		Сообщить("СОС " + имяФайла + " - не скачан !!!");
	КонецПопытки;
    
	Если выполненоУспешно = 1 Тогда
		КомандаСистемы(импортСОС + имяФайла + выводВНоль);
	КонецЕсли;
	
	// загрузка СОС Республиканский удостоверяющий центр (РУЦ)
	имяФайла = "ruc.crl";
	выполненоУспешно = 0;
	Попытка
		КомандаСистемы(скачатьФайл + имяФайла + сайтФайлаПКИ + имяФайла);  
		выполненоУспешно = 1;
	Исключение
		Сообщить("СОС " + имяФайла + " - не скачан !!!");
	КонецПопытки;
    
	Если выполненоУспешно = 1 Тогда
		КомандаСистемы(импортСОС + имяФайла + выводВНоль);
	КонецЕсли;
	
	// удаляем лог-файл.
	КомандаСистемы("del " + СокрЛП(КаталогИБ()) + "AvCmUt3.log");

КонецПроцедуры

//*******************************************   

Процедура ОбработкаОшибок(текстОшибки)
    
   	......  
   	
   	строкаПоиска = "истек срок действия СОС"; // Строка записана по памяти.
	Если Найти(текстОшибки,строкаПоиска)>0 Тогда
   		ОбновитьСОС(); 

   		текстПредупреждения = "СОС обновлены. Попробуйте выполнить операцию повторно.";
   		Предупреждение(текстПредупреждения);
   	КонецЕсли; 
   	
   	......
   	
КонецПроцедуры
Показать
1v7; Rick09; Ni4ka; keyn5565`; Slypower; +5 Ответить
5362. Xershi 390 29.11.16 11:47 Сейчас в теме
(5361) батник мне кажется проще в винде поставить для обновления.
5363. Slypower 29.11.16 11:50 Сейчас в теме
(5362) тут дело в том, что может пригодится такое решения в данном случае: я, чисто гипотетически, "продал" свою обработку покупателям. СОС тоже за доплату туда допилил. И вот чтобы не кидать никакие батники никуда, чтобы папки не докидывать и не забивать голову и так не оч умному покупателю, я в 1С так сделаю, и он будет рад и будет считать меня богом. Не ну а что))))))
5364. Xershi 390 29.11.16 11:57 Сейчас в теме
(5363) тогда уже лучше регламентное задание написать)
Но как кнопка тоже неплохо.
5365. Snake150984 29.11.16 12:57 Сейчас в теме
(5363) а разве сам батник для обновления не лежит в папке авеста? почему просто его не вызвать используя 5 строк кода. Он же все равно есть. Но как решение - имеет место быть.
5366. Slypower 29.11.16 13:51 Сейчас в теме
(5365) есть разные бат файлы. Например: get_crl.bat в папке c:\Program Files (x86)\Avest\AvPCM_nces\. Он обновляет СОСы, но столкнулся с ситуацией, когда нужно скачивать сосы с портала и обновлять их.
а вот get_crl.bat из папки: c:\Program Files (x86)\Avest\AvPCM_MNS\ у меня ничего не делает.
Snake150984; +1 Ответить
5367. keyn5565` 4 29.11.16 13:53 Сейчас в теме
5423. keyn5565` 4 01.12.16 15:08 Сейчас в теме
(5361)
Переписал под 8-ку и скрестил со своей процедурой.

Перем Рез;
Перем ИМНС_СОС;
Перем НЦЭУ_СОС ;

Процедура КоманднаяПанель1ОбновитьСОС(Кнопка)Экспорт
	ПутьАвест ="";
	
	Если ИМНС_СОС Тогда 
		Если Рез = 64 Тогда
			ПутьАвест = """C:\Program Files (x86)\Avest\AvPCM_MNS\""";
		Иначе
			ПутьАвест = """C:\Program Files\Avest\AvPCM_MNS\""";
		КонецЕсли;
	ИначеЕсли НЦЭУ_СОС Тогда
		Если Рез = 64 Тогда
			ПутьАвест = """C:\Program Files (x86)\Avest\AvPCM_nces\""";
		Иначе
			ПутьАвест = """C:\Program Files\Avest\AvPCM_nces\""";
		КонецЕсли;
	Иначе
		Предупреждение("Выберите вид сертификата");
		Возврат;
	КонецЕсли;
	
	Попытка
		Если ИМНС_СОС Тогда 
			Если Рез = 64 Тогда
				КомандаСистемы("get_crl.bat",ПутьАвест);
			Иначе
				КомандаСистемы("get_crl.bat",ПутьАвест);
			КонецЕсли;
		ИначеЕсли НЦЭУ_СОС Тогда
			Если Рез = 64 Тогда
				КомандаСистемы("get_crl.bat",ПутьАвест);
			Иначе
				КомандаСистемы("get_crl.bat",ПутьАвест);
			КонецЕсли;
		Иначе
			Предупреждение("Виберите вид сертификата");
		КонецЕсли;
	Исключение
			
		ОбновитьСОС(ПутьАвест);
		
	КонецПопытки;
КонецПроцедуры

Процедура ОбновитьСОС(ПутьАвест)
    
    // удаляем старые СОС
    КомандаСистемы("del %TEMP%\*.crl >NUL: 2>&1"); 
    
    скачатьФайл  =	ПутьАвест + """wget"" -q -T 30 -O %TEMP%\";  
    импортСОС     = ПутьАвест + "AvCmUt3.exe"" -C %TEMP%\";
    сайтФайлаМНС = " %PX_USER% %PX_PASS% http://www.portal.nalog.gov.by/ca/";
    сайтФайлаПКИ = " %PX_USER% %PX_PASS% http://pki.gov.by/certs/-/";   
    выводВНоль     = " >NUL";
   	
	// загрузка СОС Корневой Удостоверяющий центр Министерства по налогам и сборам 
    имяФайла = "mns-ca.crl";
    выполненоУспешно = 0;
    Попытка
        КомандаСистемы(скачатьФайл + имяФайла + сайтФайлаМНС + имяФайла);  
        выполненоУспешно = 1;
    Исключение
        Сообщить("СОС " + имяФайла + " - не скачан !!!");
    КонецПопытки;
    
    Если выполненоУспешно = 1 Тогда
        КомандаСистемы(импортСОС + имяФайла + выводВНоль);
    КонецЕсли;   
    
    // загрузка СОС Корневой УЦ РУП "Информационно-издательский центр по налогам и сборам"
    имяФайла = "rup.crl";
    выполненоУспешно = 0;
    Попытка
        КомандаСистемы(скачатьФайл + имяФайла + сайтФайлаМНС + имяФайла);  
        выполненоУспешно = 1;
    Исключение
        Сообщить("СОС " + имяФайла + " - не скачан !!!");
    КонецПопытки;
    
    Если выполненоУспешно = 1 Тогда
        КомандаСистемы(импортСОС + имяФайла + выводВНоль);
    КонецЕсли;
    
    // загрузка СОС Корневой удостоверяющий центр (КУЦ)
    имяФайла = "kuc.crl";
    выполненоУспешно = 0;
    Попытка
        КомандаСистемы(скачатьФайл + имяФайла + сайтФайлаПКИ + имяФайла);  
        выполненоУспешно = 1;
    Исключение
        Сообщить("СОС " + имяФайла + " - не скачан !!!");
    КонецПопытки;
    
    Если выполненоУспешно = 1 Тогда
        КомандаСистемы(импортСОС + имяФайла + выводВНоль);
    КонецЕсли;
    
    // загрузка СОС Республиканский удостоверяющий центр (РУЦ)
    имяФайла = "ruc.crl";
    выполненоУспешно = 0;
    Попытка
        КомандаСистемы(скачатьФайл + имяФайла + сайтФайлаПКИ + имяФайла);  
        выполненоУспешно = 1;
    Исключение
        Сообщить("СОС " + имяФайла + " - не скачан !!!");
    КонецПопытки;
    
    Если выполненоУспешно = 1 Тогда
        КомандаСистемы(импортСОС + имяФайла + выводВНоль);
    КонецЕсли;
    
    // удаляем лог-файл.
	КомандаСистемы("del " + СокрЛП(ПутьАвест) + "AvCmUt3.log");

КонецПроцедуры
//Определяет разрядность системы
WshShell 				= Новый COMОбъект("WScript.Shell");
Рез 	 				= ?(Найти(WshShell.Environment("SYSTEM").item("PROCESSOR_ARCHITECTURE"), "64") > 0, 64, 32);
Показать
Slypower; +1 Ответить
28. Slypower 20.04.16 18:26 Сейчас в теме
Местные гуру, назрел вопрос.
пишу
Если xml_fso.FileExists(КаталогИБ()+"XML\2016\doc_1000000002.xml")=1 Тогда
 код;
КонецЕсли;

Файл там есть, но он его не находит((( почему?
29. Slypower 20.04.16 18:30 Сейчас в теме
Почему xml_fso.FileExists(КаталогИБ()+"XML\2016\doc_1000000002.xml") = -1
IronSamael; +1 Ответить
30. Cooler 20 20.04.16 18:51 Сейчас в теме
(29) Slypower,
xml_fso.FileExists
А это на каком языке программирования написано, если не секрет?
31. Xershi 390 21.04.16 08:50 Сейчас в теме
(30) Cooler, наверно на 1с7. Там вк наверно подключили и далее метод его обработки.
32. Slypower 21.04.16 09:24 Сейчас в теме
(30) Примеры использования объекта FileSystemObject (FSO) в 1С. Пример по ссылке:http://kb.mista.ru/article.php?id=73 Очень удобно. А по поводу (29), разобрался, там же в книге и написано, что Возвращает -1, если указанный файл существует, иначе 0.
7455. keyn5565` 4 23.07.18 20:06 Сейчас в теме
(7454)
попробуйте поменять часть на:
Попытка
		НаименованиеПолноеПортал	= СокрЛП(СведенияXML.ROW.VNAIMP);
		НаименованиеПортал			= СокрЛП(СведенияXML.ROW.VNAIMK);		
		ЮрАдресПортал 				= СокрЛП(СведенияXML.ROW.VPADRES);
	Исключение
		Попытка
			НаименованиеПолноеПортал	= СокрЛП(СведенияXML.ROW[0].VNAIMP);
			НаименованиеПортал			= СокрЛП(СведенияXML.ROW[0].VNAIMK);		
			ЮрАдресПортал 				= СокрЛП(СведенияXML.ROW[0].VPADRES);
			
		Исключение
			Сообщить(СведенияXML.body.h1, СтатусСообщения.ОченьВажное);
			Возврат;
		Конецпопытки
	Конецпопытки
Показать
42. Slypower 27.04.16 13:37 Сейчас в теме
Добрый день!
29 апреля 2016 года в 10.30 планируется проведение вебинара с участием производителя криптосредств (ЗАО «Авест») для ит-специалистов компаний, участвующих в опытной эксплуатации. На вебинаре будут продемонстрированы интеграционные возможности для организации взаимодействия учетных систем с порталом.

Этот вебинар проходил ли ранее? Если, то посещал ли его кто? Стоит туда идти или не скажут ничего интересного?
43. Gladkov_Anton 73 27.04.16 17:56 Сейчас в теме
(42) Slypower, Это вебинар, посвященный интеграции с ЭЦП.
Проводится с участием "Авест".
Ранее не проводился.

Обещают показать как надо интегрировать учетные системы с порталом.
Если вы специалист в области ИТ и занимаетесь интеграцией механизмов работы с ЭСЧФ в свои системы - однозначно стоит подключиться к вебинару или как минимум подключить ответственного у Вас за это направление
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Казань
Полный день

Программист 1С
Санкт-Петербург
зарплата от 130 000 руб. до 150 000 руб.
Полный день

Ведущий программист 1С
Екатеринбург
зарплата от 100 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 60 000 руб. до 110 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата от 120 000 руб.
Полный день