1С бухгалтерия

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

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

Я в бухгалтерии создал подписку на событие "ПриЗаписи". Добавил свой модуль и написал небольшую процедуру:

Процедура ПриЗаписи(Источник, Отказ) Экспорт
	ТипЗначИст = ТипЗнч(Источник);
 
	Если ТипЗначИст = Тип("СправочникОбъект.Контрагенты") Тогда
		УзелОбмена = ПланыОбмена.ОбменРозницаБухгалтерияПредприятия30.НайтиПоНаименованию("Розница, редакция 2.2");
		ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, Источник.Ссылка);
	КонецЕсли;
КонецПроцедуры

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

ТипЗначИст = ТипЗнч(Источник);
 
Если ТипЗначИст = Тип("СправочникОбъект.Контрагенты") Тогда
	Договор = Справочники.ДоговорыКонтрагентов.НайтиПоРеквизиту("ВидДоговора",Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком,,Источник.Ссылка);
	Если Договор.Пустая() Тогда
		НовыйДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
		НовыйДоговор.Владелец = Источник.Ссылка;
		НовыйДоговор.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН","инн_вашей_орг");
		НовыйДоговор.Наименование = "С поставщиком";
		НовыйДоговор.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком;
		НовыйДоговор.УстановитьНовыйКод();
		НовыйДоговор.ВалютаВзаиморасчетов = Константы.ВалютаРегламентированногоУчета.Получить();
		НовыйДоговор.Комментарий = "Создан автоматически";
		НовыйДоговор.Записать();
	КонецЕсли;
КонецЕсли;

Ну и по тому же сценарию можно написать обработку для переноса всех(или не всех) контрагентов:

&НаСервере
Процедура Команда1НаСервере()
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ДоговорыКонтрагентов.Ссылка КАК Ссылка,
	|	ДоговорыКонтрагентов.Владелец КАК Контрагент
	|ИЗ
	|	Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
	|ГДЕ
	|	ДоговорыКонтрагентов.ВидДоговора <> &ВидДоговора
	|	И НЕ ДоговорыКонтрагентов.ПометкаУдаления";
	Запрос.УстановитьПараметр("ВидДоговора",Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком);
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Договор = Справочники.ДоговорыКонтрагентов.НайтиПоРеквизиту("ВидДоговора",Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком,,Выборка.Контрагент);
		Если Договор.Пустая() Тогда
			НовыйДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
			НовыйДоговор.Владелец = Выборка.Контрагент;
			НовыйДоговор.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН","");
			НовыйДоговор.Наименование = "С поставщиком";
			НовыйДоговор.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком;
			НовыйДоговор.УстановитьНовыйКод();
			НовыйДоговор.ВалютаВзаиморасчетов = Константы.ВалютаРегламентированногоУчета.Получить();
			НовыйДоговор.Комментарий = "Создан автоматически";
			НовыйДоговор.Записать();
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
 
&НаКлиенте
Процедура Команда1(Команда)
	Команда1НаСервере();
КонецПроцедуры

В данном примере я подготовил данные по переносу всех контрагентов, у которых договора не с поставщиком.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <1c7>, <drupal5>, <drupal6>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".