Создание динамически подгружаемых печатных форм на 8.2, как это было реализовано в 1С:7.7

Публикация № 655604

Разработка - Практика программирования

Печать внешняя xml

При создании собственной, легкой, автономной конфигурации для филиалов на управляемых формах необходимо было решить одну задачу: «БЕЗ обновления конфигураций необходимо легко и быстро обновлять/добавлять печатные формы для любого документа в 1С». Очень понравилось ранее существовавшее решение по динамической подгрузке внешних печатных форм в 1С 7.7. Его и реализуем.

Вопросы безопасности пока опустим, это тема для отдельных разговоров, но это решение позволяло нам через GPRS соединение в филиале обновлять выборочные печатный формы «на фоне», не останавливая работу в 1С и не отвлекая филиал от работы. Им даже никаких действия для обновления предпринимать не надо, по мере обновления файлов в папке, формы автоматические будут подхватываться.
Описывая далее наше решение, следует помнить, что в разработке собственной конфигурации мы умышленно не используем «библиотеку стандартных процедур», дабы не увеличивать размер и  нагрузку для конфигурации филиала.
Конечно, некоторые общие модули кастрировав, мы все же перенесли в свою конфигурацию (например: «АдресныйКлассификатор, СтроковыеФункцииКлиентСервер»).

И так план решения поставленной задачи:

  1. Выделяем каталог где хранятся печатные внешние формы. В нашем случае: «%КаталогБД%/ExtForms/PrnForms»
  2. В данный каталог складываем одноимённые файлы печатной формы ERF и XML с описанием формы, например: «ЗакупочныйАкт.erf» и «ЗакупочныйАкт.xml»
  3. При открытии любой формы документов (справочников) собираются список печатных форм из файлов XML и создаются на форме соответствующие кнопки печать.
  4. При старте формирования печатной формы, загружается внешняя печатная форма и открывается ее форма.

Реализуем:

1. Этап

Создаем константу для хранения каталога печатных форм: «КаталогПечатныхФорм». Тип(«Строка») . Длина(255). Ее, кстати, заполнять не обязательно, если не заполнена будем использовать условленный в плане путь «по умолчанию».

Создаем Общий модуль «_ВнешниеПечатныеФормы» доступный с клиентов и с сервера.

Добавляем функцию:

//Получает каталог Печатных форм
Функция КаталогПечатныхФорм() Экспорт
	СтрКаталогПечатныхФорм = СокрЛП(ОбщегоНазначения.ЗначениеКонстантыПоИмени("КаталогПечатныхФорм"));
	#Если ВебКлиент Тогда
		Если ПустаяСтрока(СтрКаталогПечатныхФорм) Тогда
		СтрКаталогПечатныхФорм = "D:\Filial82\ExtForms\PrnForms\";
		КонецЕсли;
	    Возврат СтрКаталогПечатныхФорм;
	#Иначе
		Если ПустаяСтрока(СтрКаталогПечатныхФорм) Тогда
			СтрКаталогПечатныхФорм = НСтр(СтрокаСоединенияИнформационнойБазы(), "File");
			Если ЗначениеЗаполнено(СтрКаталогПечатныхФорм) Тогда    //Файловая версия
				Возврат СтрКаталогПечатныхФорм + ?(Прав(СтрКаталогПечатныхФорм,1)="\","","\")+"ExtForms\PrnForms\";
			Иначе
				СтрКаталогПечатныхФорм = КаталогПрограммы();
				Возврат СтрКаталогПечатныхФорм + ?(Прав(СтрКаталогПечатныхФорм,1)="\","","\")+"ExtForms\PrnForms\";
			КонецЕсли;		
		Иначе	
		    Возврат СтрКаталогПечатныхФорм;
		КонецЕсли;
	#КонецЕсли
КонецФункции

2. Этап

Определяем для себя формат файла XML

Например для печатной формы "Закупочный акт" создаем файл: «ЗакупочныйАкт.xml»

<?xml version="1.0" encoding="windows-1251"?>
<ПечатнаяФорма ИД="ЗакупочныйАкт" ИмяФормы="ЗакупочныйАкт" ИмяВСпискеМеню="Закупочный акт" ИмяКнопки="Закупочный акт" ОтображатьКнопку="Авто" Иконка="Печать">
<СсылкаНаОбъект>ДокументСсылка.ЗакупочныйАкт</СсылкаНаОбъект>
</ПечатнаяФорма>

Добавляем в общий модуль «_ВнешниеПечатныеФормы» функцию получения массива печатных форм для объекта

//Возвращает массив печатных форм
//Пример1: ПолучитьМассивПечатныхФорм("ДокументСсылка","РКО");
//Пример2: ПолучитьМассивПечатныхФорм("СправочникСсылка","Контрагенты");
Функция ПолучитьМассивПечатныхФорм(стрТипОбъекта,стрВидОбъекта) Экспорт
	Перем МассивПечатныхФорм;
	МассивПечатныхФорм=Новый Массив;
	КаталогПечатныхФорм = Новый Файл(КаталогПечатныхФорм());
	Если НЕ КаталогПечатныхФорм.Существует() Тогда
		Сообщить("Каталог печатных форм не существует: "+КаталогПечатныхФорм());
		Возврат МассивПечатныхФорм;
	КонецЕсли;
	Для каждого ФайлXML из НайтиФайлы(КаталогПечатныхФорм.ПолноеИмя,"*.xml",Ложь) 
Цикл
		Попытка
			ФайлERF=Новый Файл(Сред(ФайлXML.ПолноеИмя,1,СтрДлина(ФайлXML.ПолноеИмя)-4)+".erf");
			Если НЕ ФайлERF.Существует() Тогда
				Продолжить;
			КонецЕсли;
			ЧитатьХМЛ = Новый ЧтениеXML;
			ЧитатьХМЛ.ОткрытьФайл(ФайлXML.ПолноеИмя);
			ПостроитьДУМ = Новый ПостроительDOM; 
			ДокументДУМ = ПостроитьДУМ.Прочитать(ЧитатьХМЛ);
			КорневойУзел = ДокументДУМ.ПервыйДочерний;
			Если НЕ КорневойУзел.ЕстьАтрибуты() Тогда
				Продолжить;
			КонецЕсли;
			Если КорневойУзел.ЕстьДочерниеУзлы() Тогда
				Для Каждого УзелСсылкаНаОбъект ИЗ КорневойУзел.ПолучитьЭлементыПоИмени("СсылкаНаОбъект") Цикл
					Если (стрТипОбъекта+"."+стрВидОбъекта = УзелСсылкаНаОбъект.ТекстовоеСодержимое) Тогда
						СтруктураДанныхВМассив = Новый Структура("ТипОбъекта,ВидОбъекта,ФайлПолныйПуть,ИД,ИмяФормы,ИмяВСпискеМеню,ИмяКнопки,ОтображатьКнопку,Иконка");
						СтруктураДанныхВМассив.ТипОбъекта = стрТипОбъекта;
						СтруктураДанныхВМассив.ВидОбъекта = стрВидОбъекта;
						СтруктураДанныхВМассив.ФайлПолныйПуть = ФайлERF.ПолноеИмя;
						СтруктураДанныхВМассив.ИД = КорневойУзел.ПолучитьАтрибут("ИД");
						СтруктураДанныхВМассив.ИмяФормы = КорневойУзел.ПолучитьАтрибут("ИмяФормы");
						СтруктураДанныхВМассив.ИмяВСпискеМеню = КорневойУзел.ПолучитьАтрибут("ИмяВСпискеМеню");
						СтруктураДанныхВМассив.ИмяКнопки = КорневойУзел.ПолучитьАтрибут("ИмяКнопки");
						СтруктураДанныхВМассив.ОтображатьКнопку = КорневойУзел.ПолучитьАтрибут("ОтображатьКнопку");
						СтруктураДанныхВМассив.Иконка = КорневойУзел.ПолучитьАтрибут("Иконка");
					МассивПечатныхФорм.Добавить(СтруктураДанныхВМассив);
						Прервать;
					КонецЕсли;
				КонецЦикла;
			КонецЕсли;
			ПостроитьДУМ = Неопределено;
			ЧитатьХМЛ.Закрыть();
		Исключение
		КонецПопытки;
	КонецЦикла;	 	
	Возврат МассивПечатныхФорм;
КонецФункции

Тут конечно можно все оптимизировать… но это я оставляю для вашего творчества 😉

3. Этап

Добавляем в  модуль  «_ВнешниеПечатныеФормы» процедуру генерации кнопок «Печать», вызываемую с формы документа на основании полученного массива XML из 2 этапа

Процедура СоздатьКнопкиПечатныхФорм(массивПечФорм, ЭтаФорма, Элементы, Команды) Экспорт
	текПечФорм =  Новый Cтруктура("ТипОбъекта,ВидОбъекта,ФайлПолныйПуть,ИД,ИмяФормы,ИмяВСпискеМеню,ИмяКнопки,ОтображатьКнопку,Иконка");
	СписокДобавленныхКоманд= Новый Массив;
	Если массивПечФорм.ВГраница()>-1 Тогда 
		Для Каждого текПечФорм Из массивПечФорм Цикл
			Если (текПечФорм.ОтображатьКнопку="Всегда") ИЛИ (массивПечФорм.ВГраница()=0) Тогда
				КомандаФормы  =  Команды.Добавить(Строка(текПечФорм.ИД));
				КомандаФормы.Действие = "ПроцедураОбработкиНажатияПечать";       
				ТекКнопка = Элементы.Добавить(Строка(текПечФорм.ИД),Тип("КнопкаФормы"),ЭтаФорма.КоманднаяПанель);       
				ТекКнопка.Заголовок = текПечФорм.ИмяКнопки;  
				Если ЗначениеЗаполнено(текПечФорм.Иконка) Тогда
					ТекКнопка.Картинка = ПолучитьИконкуКнопки(текПечФорм.Иконка);
					ТекКнопка.Отображение = ОтображениеКнопки.КартинкаИТекст;
				Иначе
					ТекКнопка.Отображение = ОтображениеКнопки.Текст;
				КонецЕсли;
				ТекКнопка.ИмяКоманды = Строка(текПечФорм.ИД); 
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	Если массивПечФорм.ВГраница()>0 Тогда 
		ГруппаПечать = Элементы.Добавить("ГруппаПечать",Тип("ГруппаФормы"),ЭтаФорма.КоманднаяПанель);       
		ГруппаПечать.Заголовок="Печать...";
		Для Каждого текПечФорм Из массивПечФорм Цикл
			КомандаФормы  =  Команды.Добавить(Строка(текПечФорм.ИД)+"Список");
			КомандаФормы.Действие = "ПроцедураОбработкиНажатияПечать";       
			ТекКнопка = Элементы.Добавить(Строка(текПечФорм.ИД)+"Список",Тип("КнопкаФормы"),ГруппаПечать);       
			ТекКнопка.Заголовок = текПечФорм.ИмяВСпискеМеню;  
			Если ЗначениеЗаполнено(текПечФорм.Иконка) Тогда
				ТекКнопка.Картинка = ПолучитьИконкуКнопки(текПечФорм.Иконка);
				ТекКнопка.Отображение = ОтображениеКнопки.КартинкаИТекст;
			Иначе
				ТекКнопка.Отображение = ОтображениеКнопки.Текст;
			КонецЕсли;
			ТекКнопка.ИмяКоманды = Строка(текПечФорм.ИД)+"Список"; 
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

Сюда же прикладываем небольшую заглушку для подхвата иконок на кнопки "Печать"

Функция ПолучитьИконкуКнопки(ИмяИконки)
	Попытка
		Если ИмяИконки="Файл" Тогда
			Возврат БиблиотекаКартинок.Печать;      //Пока так
		Иначе	
			Возврат БиблиотекаКартинок[ИмяИконки];
		КонецЕсли;
	Исключение
		Возврат БиблиотекаКартинок.Печать;
	КонецПопытки;
КонецФункции

4. Этап

Теперь во всех формах документов добавляем следующий код:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	//необходимо для генерации кнопок печать на форме
	МассивПечатныхФорм=_ВнешниеПечатныеФормы.ПолучитьМассивПечатныхФорм("ДокументСсылка",Объект.Ссылка.Метаданные().Имя);
	_ВнешниеПечатныеФормы.СоздатьКнопкиПечатныхФорм(МассивПечатныхФорм,ЭтаФорма,Элементы,Команды);
КонецПроцедуры

//ВНЕШНИЕ ПЕЧАТНЫЕ ФОРМЫ
&НаКлиенте
Функция ПроверкаНаЗаписьПередПечатью(ЭтаФорма) Экспорт
              //тут ваши проверки перед печатью
              //…
	Возврат Истина;  //или Ложь если не разрешить печать
КонецФункции

&НаСервере
Функция ПодключитьВнешнююОбработку(АдресХранилища)
	Возврат ВнешниеОтчеты.Подключить(АдресХранилища,,Ложь);
КонецФункции 

&НаСервере
Функция ПолучитьМассив()
	Возврат _ВнешниеПечатныеФормы.ПолучитьМассивПечатныхФорм("ДокументСсылка",Объект.Ссылка.Метаданные().Имя); 
КонецФункции

&НаКлиенте
Процедура ПроцедураОбработкиНажатияПечать(Элемент)
	Если НЕ Объект.Проведен Тогда
		Сообщить("Перед выводом на печать необходимо провести документ.");
		Возврат;
	КонецЕсли;
	МассивПечатныхФорм =  ПолучитьМассив();
	ИмяВызваннойКнопки = Элемент.Имя;
	АдресХранилища = "";
	Для Каждого элМассиваПечФорм из МассивПечатныхФорм Цикл
		Если (ИмяВызваннойКнопки = элМассиваПечФорм.ИД) или (ИмяВызваннойКнопки = (элМассиваПечФорм.ИД + "Список"))Тогда
			Если НЕ ПроверкаНаЗаписьПередПечатью(ЭтаФорма) Тогда
				Возврат;
			КонецЕсли;
			ДополнительныеПараметры = Неопределено;//В некоторых документах возможно тут нужны дополнительные параметры
			Результат = ПоместитьФайл(АдресХранилища, элМассиваПечФорм.ФайлПолныйПуть, , Ложь);       
			ИмяОбработки = ПодключитьВнешнююОбработку(АдресХранилища);
			ФормаОтчета= ПолучитьФорму("ВнешнийОтчет." + ИмяОбработки + ".Форма");
			Попытка
				ФормаОтчета.Отчет.СсылкаНаОбъект = Объект.Ссылка;
			Исключение
				Сообщить("Не удалось установить ссылку на объект в печатной форме.");
				Возврат;
			КонецПопытки;
			Если  НЕ ДополнительныеПараметры = Неопределено Тогда
				Попытка
					ФормаОтчета.Отчет.ДополнительныеПараметры = ДополнительныеПараметры;
				Исключение
					//ну и не надо значит
				КонецПопытки;
			Конецесли;
			ФормаОтчета.Открыть();
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
5. Этап
Создаем внешний отчет.
Во внешней печатной форме обязательно добавляем реквизит «СсылкаНаОбъект» с типом: ссылка на конкретный вид документа.
В некоторых случаях можно добавить реквизит «ДополнительныеПараметры» с любым типом, чтобы получать дополнительный параметр при вызове из формы документа.

В модуль объекта добавляем экспортную процедуру «Печать»:

Функция Печать() Экспорт
   ТабДокумент = Новый ТабличныйДокумент
   //….
   Возврат  ТабДокумент;
КонецФункции

И в модуль формы внешней печатной формы добавляем:

&НаСервере
Функция ВызватьПечать()
	ЭтотОбъект = РеквизитФормыВЗначение("Отчет");
	ТабДок = ЭтотОбъект.Печать();
	Возврат ТабДок;
КонецФункции
&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ТабДок = ВызватьПечать();
	ТабДок.ОтображатьСетку = Ложь;
	ТабДок.Защита = Ложь;
	ТабДок.ТолькоПросмотр = Ложь;
	ТабДок.ОтображатьЗаголовки = Ложь;
	ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
	ТабДок.АвтоМасштаб = Истина;
	ТабДок.Показать();
	Отказ = Истина;
КонецПроцедуры

В принципе готово.
В справочниках все тоже самое, только вместо слов «ДокументСсылка» ставим «СправочникСсылка».

Работает эта система уже несколько лет, с 2013 года без сбоев. А если учесть то, что печатные формы, из-за постоянного изменения законодательства, приходится менять(добавлять) чуть ли не квартал, то такой подход сохранил нам много времени на обновлениях при 160 филиалах.

PS/ На дополнительные вопросы, включая вопросы о причинах наших поступков и решений, буду отвечать в комментариях .

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. platon_ 10 28.07.17 17:15 Сейчас в теме
А чем Механизм Внешних Печатных Форм из БСП не устроил?
3. dima_home 123 29.07.17 10:50 Сейчас в теме
(1) Антон.
Давайте с начало рассмотрим различия:
1. Наша реализация: При открытии формы документа каждый раз заново собираются печатные формы из локального каталога.
Реализация БСП: Для подключения нужно зайти в 1С (администратору) и подгрузить печатную форму.
2. Наша реализация: С помощью ftp или dropbox можно синхронизировать печатные формы сразу в 160 филиалах (с полностью автономными 1С - не РИБ)
Реализация БСП: Нужно подключаться в каждую 1С и подгружать форму вручную либо организовывать РИБ.
3. Наша реализация: Позволяет указывать кнопке печатной формы, где она должна быть: в раскрывающимся списке печать или в виде отдельной кнопки прямо на форме. Позволяет менять иконку, в планах было даже подгружать любую иконку, даже динамически с диска.
Реализация БСП: Печатные формы только в список (но возможно я не прав).

А теперь рассмотрим условия, в которых все делалось:
1. 2013 год (управляемые формы только входили в оборот).
2. Все филиалы находятся не в городе, а по селам. Интернет во многих филиалах – очень нестабильное GPRS соединение с ограниченным объемам трафика в день (Москвичам не понять этого со своим 3G и 4G).
3. Не всегда удается даже удаленно подключиться по UVNC с максимальным сжатием (2х битный цвет) , не говоря уже чтобы удаленно подключаться администратору и работать в 1С.
4. В некоторых филиалах обновление 1С - это отправка флэшек с автозапуском копирования файла cf в заранее прописанный каталог, и при перезагрузке компьютера автоматическое обновление 1С из cf.
5. Ни при каких обстоятельствах не должны останавливаться продажи на долго.
6. Конфигурация для филиалов делалась с нуля, исключительно заточенной под наши задачи. Стандартные решения от 1С тихо курят в сторонке ;).

Выводы:
1. RDP не приемлем. Нет связи, а ее иногда не было целыми неделями, нет продаж.
2. РИБ (есть опыт - могу поделится но уже отдельно) при изменениях конфигурации, или при массовых действиях с данными может тоже приводить к коллапсу обмена и к неработоспособности 1С филиала.
3. Подключение администратора удаленно для добавления печатных форм (как при БСП) в виду количества филиалов и низкого качества связи является не лучшим решением.
4. Местные сотрудники, работающие в региональных филиалах , как правило не могут отличить монитор от системного блока, и просить их что либо делать с 1С та еще задача ;)

В итоге:
Идеальным решением было - организовать обмен с филиалом через негарантированную связь, с защитой от порченных файлов, с поддержкой скачивания частями, по пассив FTP. Пытались даже аналог dropbox прикрутить, не взлетело, были случаи когда файлы просто отказывались синхронизироваться или просто исчезали.
Соответственно, когда по FTP приходили печатные формы в архиве, они при перезагрузке компьютера, при удачном разархивировании (защита от порчи файлов при передачи), копировались в папку с PrnForms. А 1С автоматом их подхватывала.
Аналогичное решение применяли к всякого рода дополнительным файлам (инструкциям) доступным из 1С.

Думаю наше решение (возможно не реализация) было самым оптимальным.
sbcode; juricher; suepifanov; +3 Ответить
2. CheBurator 3427 29.07.17 01:14 Сейчас в теме
В настроечные иксемель файлы можно пихать еще всякие ограничения, типа
Кроме="тутпереченьгуидовконтрагентовккоторымнеприменяетсядан­наяпечформа"

в той же 77 недостатком ВПФ является то что они не делятся на ОТЧЕТЫ (не изменяют базу) и ОБРАБОТКИ (изменяют базу). по уму - ВПФ должны быть разделены на "ПЕЧФОРМЫ" и "ДЕЙСТВИЯ" (действия могут тоже формировать печформы, но это побочный плюс действий).
4. dima_home 123 29.07.17 10:56 Сейчас в теме
(2) Сергей. Конечно я в статье описал только пример для печатных форм.
У нас конечно были реализованы и погрузка самовыполняемых задач в 1С. И в 1С был раздел дополнительные возможности куда налету подцеплялись инструкции, и иные общие формы (не под документы) типа: xls/doc,pdf,html,erf,epf.
Прикрепленные файлы:
5. dima_home 123 29.07.17 11:11 Сейчас в теме
Сразу отвечу на будущие вопросы: "Почему не использовали стандартные 1С, а занялись своей разработкой".

Основная причина: Неконтролируемый рост размеров стандартных конфигураций, и их неудержимые попытки занять весь интернет канал, пытаясь "слить/залить что-то" в/из 1С.
У нас например в одном филиале: база живет с 2013 года. Ее размер 108 Мбайт, при среднем 30000 документов в год по рознице и 5000 документов в год по оптовым продажам. При этом почти половина размера базы занимает стандартный классификатор адресов. Все это крутится(летает) на обычном пентиуме (P4).
Вторая причина: В любую секунду можно выбросить жесткий диск с 1С в филиале и установить пустую базу, начальные остатки (не путать с восстановлением старых документов) и настройки можно выгрузить из центральной базы, при этом это никак не скажется на возможности учета (даже в части возврата прошлых продаж)...
и ее много других решений, на много опередивших стандартные решения от 1С.
juricher; +1 Ответить
6. Vortigaunt 82 09.08.17 12:40 Сейчас в теме
(5) Заинтересовало, каким образом реализован обмен между центральной базой и филиалами?
7. dima_home 123 13.08.17 21:39 Сейчас в теме
На FTP сервере (в локальной сети с головной базой 1С) создаются две папки IN_FILIAL и OUT_FILIAL
На компьютере филиала создаются локальные аналогичные папки.
Каждый N-час со стороны филиала инициируется передача файлов из "LOCAL\OUT_FILIAL" в
"FTP\N_FILIAL\OUT_FILIAL" и забор файла из "FTP\N_FILIAL\IN_FILIAL" в "LOCAL\IN_FILIAL".
Файлы могут быть XML/ZIP, ZIP файлы автоматически разворачиваются по окончанию загрузки. Используются возможности докачки файла. При неудачном получении/отправки файл удаляется в приемнике и его передача начинается званого в следующем сеансе.
Всегда приоритет на обмен XML файлами, при их отсутствии принимаются ZIP - это позволяет избежать заторы обмена важных данных, если вдруг крупный файл ZIP не удается передать.
Прикреплю выдержку из инструкции по работе с обменом в филиале.

Теперь виды файлов:
Из Головы в филиал:
NMK - Номенклатура - в виде txt файла, так как это самый большой файл (65к наименований номенклатуры) и XML такого размера 1С просто не может переварить. При передаче файл zip-пуется;
CEN - Цены на номенклатуру - xml
DDS- ВыпискаБанка- xml
DIS- дисконтные карты- xml
FIO- физ лица сотрудников (для подотчета)- xml
INV- документы инвентаризации - xml
SOS- состыковка контрагентов (про контрагентов надо отдельную тему создавать про их состыковку и обмен.)
...ну и так далее не буду все перечислять... каждого вида документа есть свой вид файла xml

Из филиала в голову:
Также все документы выгружаются в отдельные файлы xml. Кроме розницы, розница выгружается по закрытию торгового дня.

Файлы создаются каждый раз при проведении документов в каталоге "LOCAL\OUT_FILIAL" в базе филиала, и в каталоге "FTP\N_FILIAL\IN_FILIAL" в головной базе. Если проводится один и тот же документ, файл перезаписывается.

И еще:
Некоторые файлы передаются только в одну сторону... например номенклатура и цены только из головы в филиал, или розничная выручка только из филиала в голову.

Но некоторые файлы могут бегать в обе стороны...например "реализация оптовая (торг-12)"... ее можно создать в филиале, затем исправить в голове. Задачи соответствия документов при одновременном проведении сводится к назначению последней руки - т.е. всегда когда проводится документ реализации в филиале (в ручную или при приеме документа из головы) происходит выгрузки документа из филиала в голову, при этом когда голова принимает документ, выгрузка в филиал не происходит.

Что касается согласования справочников.
Номенклатура/сотрудники/цены/дисконт только из головы, так что здесь нет проблем, а вот справочник контрагентов - целая система сопоставления независимых справочников (наше ноу-хау). Контрагенты могут создаваться раздельно или одновременно на любой стороне и будут все равно связаны.

Любые документы (в любую сторону) можно заказывать повторно и загружать поверх.

Еще, для отслеживания расхождений в базах, при закрытии торгового дня отправляется автоматически отправляется из филиала сверка остатков товаров, продаж...при наличии расхождений уведомляется менеджер филиала.
Прикрепленные файлы:
Обмен.pdf
8. dima_home 123 14.08.17 14:51 Сейчас в теме
Вот пример файла xml, все ценное заменено *****
Прикрепленные файлы:
8_GLV_RNK_20170404_117.xml
Оставьте свое сообщение

См. также

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

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

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

10.12.2016    37562    unichkin    74    

Процедура генерации отдельных элементов формы для даты и времени

Работа с интерфейсом v8::УФ 1cv8.cf Бесплатно (free)

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

03.10.2020    495    drmaxart    0    

Рендеринг элементов управляемого интерфейса

Работа с интерфейсом v8 v8::УФ Россия Бесплатно (free)

Реализация отображения всего состояния формы проще, чем работа по изменениям. Однако использование идеи разделения алгоритмов на программные слои MVC и построения реактивных систем позволяет получить не только простые и масштабируемые решения, но и производительные интерфейсы. Рассмотрим примеры таких реализаций на основе использования фреймворка «Управление состоянием»: Информационная надпись, Заголовок формы, Свертываемая группа, Отключаемые панели.

22.09.2020    2529    kalyaka    5    

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

Работа с интерфейсом v8::УФ Бесплатно (free)

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

14.08.2020    2465    DrZombi    14    

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

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

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

15.10.2018    30544    tormozit    100    

Использование флажков в динамических списках

Практика программирования Работа с интерфейсом v8::УФ Бесплатно (free)

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

04.08.2020    3077    nekit_rdx    23    

Использование ПоказатьВопрос() в событии НачалоВыбора()

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

На ИТС описано, как избегать использования модальности в событиях ПередЗаписью() и ПередЗакрытием() (можно ознакомиться по ссылке http://its.1c.ru/docs/v8nonmodal/). А что делать, если нужно задать вопрос пользователю в событии НачалоВыбора(). В данной статье приведу пример реализации с использованием асинхронного вызова ПоказатьВопрос(). Статья предназначена в основном для начинающих программистов, недавно столкнувшихся с управляемыми формами.

20.07.2020    1418    biimmap    2    

Открытие управляемой формы 1С 8.3 с измененным несохраненным объектом

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

Как загрузить в управляемую форму программно изменённый несохранённый документ (или элемент справочника).

13.07.2020    3069    plainer    11    

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

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

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

20.09.2012    78203    tormozit    131    

Обработка нажатия клавиши

Работа с интерфейсом v8::УФ Бесплатно (free)

Один из способов обработки события нажатия клавиши.

10.06.2020    2585    RotaninV    7    

Серверные вызовы, которые нельзя вызывать

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

Не баян, а классика. Рассмотрим особенность платформы настолько же древнюю, как сами УФ.

12.05.2020    6337    SeiOkami    31    

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

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

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

08.05.2020    21749    user5300    16    

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

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

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

11.07.2007    48675    tormozit    41    

Как ограничить поля отбора в динамическом списке и ничего не сломать

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

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

06.05.2020    5002    SeiOkami    3    

5 шагов по изменению резервирования товаров в УТ 11.4

Оптовая торговля Практика программирования v8::ОУ v8::УФ УТ11 Россия УУ Бесплатно (free)

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

19.03.2020    4607    Igorro82IT    16    

Об обновлениях

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

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

12.02.2020    2633    ipoloskov    27    

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

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

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

10.09.2017    45022    tormozit    74    

Детектор завершения согласования для 1С: Документооборот КОРП

Практика программирования Документооборот и делопроизводство v8::УФ ДО УУ Бесплатно (free)

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

04.02.2020    3022    shiaju    3    

Как вывести итоговый вес и объем на форму документа Заказ клиента. УТ 11.4

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

Всем привет, долго ломал голову, но с помощью тыка и подсказок более опытных программистов, вот что мне удалось достичь и как это я сделал. Открываем конфигуратор - заходим в Документы-Заказ-Клиенту-Формы-ФормаДокумента, все будем делать только здесь, снизу формы две вкладки, в общем сама форма и модуль (как открыть, смотри рисунок - открыть форму).

16.01.2020    4183    VID1234    6    

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

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

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

15.01.2020    24623    John_d    22    

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

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

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

25.04.2019    16121    m-rv    2    

Как работают управляемые формы и тонкий клиент 1С – взгляд "из-под капота"

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

Переход на управляемые формы перевернул процесс разработки на 1С, заставив программистов менять привычные подходы к описанию логики работы интерфейса. Руководитель компании «Цифровой Кот» Юрий Лазаренко в своем докладе на конференции Infostart Event 2019 Inception рассказал о том, как устроены управляемые формы и как правильно работать с тонким клиентом платформы 1С:Предприятие.

23.12.2019    12828    TitanLuchs    23    

Изменение макета в карточке номенклатуры(УТ 11, КА 2)

Практика программирования Работа с интерфейсом v8::УФ ERP2 УТ11 КА2 Бесплатно (free)

Краткая памятка по выведению добавленного реквизита в справочнике Номенклатура в стандартную карточку номенклатуры в УТ 11, КА 2, ERP 2.

24.10.2019    4481    darkultro37    4    

Формы. Трудности программной работы

Работа с интерфейсом v8 v8::УФ 1cv8.cf Бесплатно (free)

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

06.10.2019    11858    YPermitin    31    

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

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

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

16.04.2019    20371    m-rv    17    

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

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

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

01.10.2019    34089    Yashazz    50    

"Вы всё сломали!". Разбираемся, кто прав, кто виноват

Практика программирования v8::УФ ИТ-компания Россия Бесплатно (free)

О том, как "всё испортил" программист, а на самом деле виноват заказчик.

20.09.2019    5999    RomanCrow13    27    

Оповещения боту из 1С за 31 минуту

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

Поделюсь опытом, как быстро сделать бота с оповещениями в Телеграмм из 1С без лишних затрат.

18.09.2019    17240    feva    41    

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

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

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

01.06.2018    30855    m-rv    21    

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

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

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

06.09.2019    51791    rpgshnik    63    

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

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

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

05.09.2019    50451    ids79    54    

EnterpriseData – часть 3. Загрузка данных, идентификация объектов

Практика программирования Математика и алгоритмы Перенос данных из 1C8 в 1C8 Разработка v8 v8::УФ 1cv8.cf Бесплатно (free)

Основные этапы загрузки данных через EnterpriseData. Идентификация объектов загружаемых полностью и по ссылке. Приведены схемы процессов загрузки данных. Описание основных операций и обработчиков. Перечень процедур БСП, используемых при загрузке данных, структура «КомпонентыОбмена».

22.08.2019    15128    ids79    8    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

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

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

05.12.2017    28349    itriot11    34    

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

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

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

08.08.2019    85245    ids79    49    

Кодовое создание документа на 8.3, управляемые формы (на примере)

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

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

07.08.2019    6044    Nefilimus    16    

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

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

Да, форматированный документ это умеет и сам, но возможности можно расширить!

03.06.2019    6368    Yashazz    0    

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

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

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

27.01.2016    76677    Serginio    108    

Добавление внешних отчетов / обработок в собственные подсистемы

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

Краткая инструкция по добавлению функционала доп обработок/отчетов в собственную подсистему.

24.05.2019    11067    login1020    7    

Расшифровка отчета на СКД с детализацией по выбранному полю на основе БСП

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

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

14.05.2019    19986    Viktor_Ermakov    8    

Оперативная доработка отчетов без обновления конфигурации или расширения

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

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

12.05.2019    4605    samvani    0    

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

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

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

10.11.2018    35152    ids79    40    

Автоматизация печатной формы (автоформирование табличного документа на основе любой таблицы значений)

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

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

18.04.2019    3665    NeSPEC    0    

Этюды по программированию. Хитрости создания расширений для конфигураций на БСП. Часть 2

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

Некоторые нюансы, если вы захотите создавать свои расширения. Продолжение первой части.

16.04.2019    11120    milkers    9    

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

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

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

26.03.2019    8346    independ    8    

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

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

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

25.07.2018    29364    grumagargler    28    

Как добавить типовую форму для СКД (для начинающих) (1С 8.3, управляемые формы)

Инструментарий разработчика Работа с интерфейсом v8 v8::УФ v8::СКД Бесплатно (free)

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

25.03.2019    13603    ellavs    9    

Доработка проведения типовых документов в УТ 11.4, КА 2.4, ЕРП 2.4

Практика программирования Универсальные функции Разработка v8 v8::УФ ERP2 УТ11 КА2 Россия УУ Бесплатно (free)

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

22.03.2019    18004    ids79    16    

Иерархия групп и элементов в форме списка справочника как в проводнике. УФ

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

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

20.03.2019    11926    rebuzx    12    

Ускоряем 1С: модули с повторным использованием возвращаемых значений Промо

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

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

04.09.2017    53031    m-rv    61    

Добавление отчетов в типовые конфигурации 1С

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

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

07.03.2019    55012    ids79    46    

Программное изменение управляемых форм

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

При адаптации типовых конфигураций 1С часто приходится изменять в 1С 8 управляемые формы. Такие адаптации сложно потом поддерживать при обновлении. Такие изменения приходится вносить вручную заново, перепроверять корректность изменений в каждом обновлении. И если таких изменений множество, то каждое обновление может представлять серьезные трудозатраты. Есть несколько решений, которые позволяют упростить поддержку и обновление измененных систем 1С. Одно из них – это программное изменение форм. Вести разработку в таком режиме получается немного дольше, чем прямое изменение формы. Но это хорошо компенсируется в дальнейшем при поддержке и обновлении системы 1С. На самом деле ничего сложного в этом нет, просто нужно привыкнуть. Рассмотрим на примерах, как делать доработку управляемых форм кодом в 1С.

05.03.2019    10160    user759624    10