Имя: Пароль:
1C
1С v8
Вопрос по КД2
,
0 Цыпленок
 
08.08.12
16:28
Имею две практически идентичные семерочные конфигурации (обе типовые бухгалтерии чуть модифицированные). Создаю между ними новое правило обмена (автоматически, но в правилах выгрузки у меня только расходная накладная, ПКО и РКО). Требуется при переносе сделать так, чтобы
1) из исходной не выгружались (или в приемник не загружались, неважно) расходные накладные, у которых в табличной части товар двух определенных наименований (предположим, это тара, которую в приемнике видеть не хотят) - как это сделатЬ, я не понял. Если автоматическим правилом пользоваться, то при открытии обработки выгрузки и загрузки я не могу задать условие, т.к. в открывающихся условиях у меня только реквизиты шапки доступны
2) При загрузке у меня если в расходной накладной есть реквизит определенного вида, то должен заменяться контрагент на определенного вида.
3) В ПКО тоже если корреспондирующий счет к примеру 62.1 то должны проставляться определенные реквизиты для управленческого учета.

Я так понял это надо делать с помощью обработчиков, плюс потом заменять полученный код в обработках выгрузки и загрузки, иначе эти обработчики работать не будут. Вот только в восьмерке я мягко говоря не силен, и не пойму как обработчик написать и где. Подскажите пожалуйста, какие обработчики и где написать чтобы сделать требуемое.
1 takefive
 
08.08.12
17:01
1.В ПКС "ТабличнаяЧасть" включи флаг "Получить из входящих данных". Входящие данные сформируй в ПВД
2 Йохохо
 
08.08.12
17:22
1) ПКГС ТЧ ПередВыгрузкой - F2 =)
Если Алгоритмы.Плохая(ОбъектКоллекции.Номенклатура) = 1 Тогда
Отказ = Истина; // в 7.7?)
КонецЕсли;
2)3) таки 7 или 8?
3 andrewks
 
08.08.12
17:43
"от только в восьмерке я мягко говоря не силен, и не пойму как обработчик написать и где"

8-ка тут ни при чём, обработчики тебе нужно писать на языке 7.7
4 Абыр
 
08.08.12
17:57
1) не надо выгружать весь документ, где встречаются определенные товары, или только строки с этими товарами? если весь док, то в обработчике "Перед выгрузкой" ПКО документа проверять табличную часть источника и ставить Отказ = 1, если нашлись ненужные товары. если просто строки не переносить, то в обработчике "Перед выгрузкой" ПКГС табличной части проверять ОбъектКоллекции и также ставить Отказ = 1
2) и 3) делаешь упрощенные правила для контрагента и прочих реквизитов, которые надо подставить (например, с одним ПКС "код" и поиском по нему). в документах у соответствующих ПКС в обработчике "Перед выгрузкой" проверяешь источник на нужное условие, и при выполнении его меняешь передаваемое значение и ИмяПКО на упрощенное
5 Абыр
 
08.08.12
17:57
ну и (3) прав, 8ка тут совсем не нужна
6 Цыпленок
 
09.08.12
09:48
Спасибо ответившим, сейчас буду пробовать.
7 Цыпленок
 
09.08.12
12:47
(1) Флаг включаю, но в ПВД реквизиты табличной части не появляются.
(2)
Если Алгоритмы.Плохая(ОбъектКоллекции.Номенклатура) = 1 Тогда
Отказ = Истина; // в 7.7?)

КонецЕсли;

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

(4) >>в обработчике "Перед выгрузкой" ПКО документа проверять табличную часть источника и ставить Отказ = 1, если нашлись ненужные товары.

Вот это и нужно, только как это написать в обработчике?
8 Йохохо
 
09.08.12
12:58
(7) этот код вырезал бы строки ТЧ
Так и написать =) Найди глобальный обработчик ПередВыгрузкой, проверяй тип документа и условие ТЧ
9 Цыпленок
 
09.08.12
13:39
(8) Обработчик "перед выгрузкой" документа Расходная накладная
Обработчик
Если (Объект.Товар.Код="С00002272")  Или(Объект.Товар.Код="000001209") Тогда
   Отказ = 1;
КонецЕсли;

Так правильно?
10 Цыпленок
 
09.08.12
13:42
хотя не, так не работает. Ругается объект не определен.
11 Абыр
 
10.08.12
00:11
(10)
Источник.ВыбратьСтроки();
Пока Источник.ПолучитьСтроку() = 1 Цикл
   Если (Источник.Товар.Код="С00002272") Или (Источник.Товар.Код="000001209") Тогда
       Отказ = 1;
       Прервать;
   КонецЕсли;
КонецЦикла;
12 Цыпленок
 
10.08.12
08:42
(11) Спасибо, я уже отладчиком посмотрел, что попадает в Источник, примерно такой же код и написал, только проверил на тип документа. ) Но все равно спасибо. )
13 Цыпленок
 
10.08.12
14:10
(4) С невыгрузкой расходных накладных с "неправильным" товаром, разобрался с вашей помощью. Спасибо. Теперь по пункту 2 и 3. Че то ни фига не понял. Что за упрощенное правило?

>>2) и 3) делаешь упрощенные правила для контрагента и прочих реквизитов, которые надо подставить (например, с одним ПКС "код" и поиском по нему). в документах у соответствующих ПКС в обработчике "Перед выгрузкой" проверяешь источник на нужное условие, и при выполнении его меняешь передаваемое значение и ИмяПКО на упрощенное
14 Йохохо
 
10.08.12
14:18
мб тебя не так поняли, это путь, если править на стороне выгрузки
если ты хочешь дозаполнять - просто пиши код в ПослеЗагрузки, только там уже Объект
15 Цыпленок
 
10.08.12
14:24
Уточню. Предположим в перенесенной РН есть реквизит Основание, тип перечисление. Если выбран тип перечисления Паек, то нужно заменять контрагента на "пайки" - бухам так надо, чтобы видеть пайковые документы. Вот чтобы каждый раз после переноса не производить такую замену, и хочу чтобы  сразу контрагент Паек выгружался или загружался при обмене. Тоже касается и ПКО. Если выбран счет 62.1 и у документа определенный префикс, то должны заполняться управленческие счета забалансовые определенные. Тоже хотелось бы это делать при обмене сразу а не обработкой потом замены делать.
16 Йохохо
 
10.08.12
14:36
в ПКО дока в ПКС Контрагент
Если ЭтоВПайки() = 1 Тогда
ИмяПКО = Контрагенты_Кратко;
Значение  = Новый Структура;
Значение.Вставить(Наименование, "КонтрагентПаёк");
Значение.Вставить("Код", "");
Иначе
ИмяПКО = Контрагенты;
КонецЕсли;
Создать новый ПКО Контрагент_Кратко, в нем выбрать в синхру только 2 поля и поставить поиск по Наименованию. Если хочешь по ИНН, то три поля
только под 7.7 переделай)
17 Цыпленок
 
10.08.12
14:37
Хотя разумеется такая задача решается и обычным роботом в процедуре обработкаОжидания который будет производить такую заману или просто отдельной обработкой. Просто хотелось бы научиться такую замену делать с помощью КД2.
18 Цыпленок
 
10.08.12
14:40
(16) Ща попробую, спасибо.
19 Йохохо
 
10.08.12
14:55
кавычек категорически не хватает )
20 Цыпленок
 
10.08.12
15:42
новый ПКО Контрагент_Кратко я создал, синхронизация по коду и наименованию, галка искать по наименованию стоит. Открываю в ПКО РасходнойНакладной в ПКС Контрагент обработчик перед выгрузкой. А вот этот код я не очень понимаю, вроде переписал частично на семерку.

Если Источник.Основание=ОснованияРасходныхДокументов.Паек Тогда
ИмяПКО = Контрагенты_Кратко;
Значение  = Новый Структура;   //???
Значение.Вставить(Наименование, "Пайки Вагончик"); //???
Значение.Вставить("С010767", "");  //???
Иначе
ИмяПКО = Контрагенты;
КонецЕсли;
21 Йохохо
 
10.08.12
15:49
Значение = СоздатьОбъект("СписокЗначений");
Значение.Установить("Наименование", "Пайки Вагончик");
Значение.Установить("Код", "С010767");
22 Цыпленок
 
10.08.12
16:11
Упс, проблема. В исходной конфе этот контрагент называется Пайки, в приемной Пайки Вагончик. Код такой же. Тогда получается лучше поиск по коду поставить и пусть выгружает по коду, без названия.

Окончательный код я так понимаю такой

Если Источник.Основание=ОснованияРасходныхДокументов.Паек Тогда
ИмяПКО = Контрагенты_Кратко;
Значение = СоздатьОбъект("СписокЗначений");
//Значение.Установить("Наименование", "Пайки Вагончик");
Значение.Установить("Код", "С010767");
Иначе
ИмяПКО = Контрагенты;
КонецЕсли;
23 Цыпленок
 
10.08.12
16:24
Не проходит синтакс контроль в модуле выгрузки

ИмяПКО = Контрагенты_Кратко<<?>>;
{D:\КОНВЕРТАЦИЯДАННЫХ\1C\CONVERSION\2_1_6_1\V77EXP.ERT(121)}: Переменная не определена (Контрагенты_Кратко)
ИмяПКО = Контрагенты<<?>>;
{D:\КОНВЕРТАЦИЯДАННЫХ\1C\CONVERSION\2_1_6_1\V77EXP.ERT(126)}: Переменная не определена (Контрагенты)
При проверке модуля обнаружены синтаксические ошибки!
24 Цыпленок
 
10.08.12
16:33
Окончательный код пока

       
       Если Источник.Основание=Перечисление.ОснованияРасходныхДокументов.Паек Тогда
           ИмяПКО = Контрагенты_Кратко;
           Значение = СоздатьОбъект("СписокЗначений");
           //Значение.Установить("Наименование", "Пайки Вагончик");
           Значение.Установить("Код", "С010767");
       Иначе
           ИмяПКО = Контрагенты;
       КонецЕсли;
25 Цыпленок
 
10.08.12
16:34
Почему то ругается что Контрагенты_Кратко и Контрагенты не определены, хотя есть такие ПКО
26 Йохохо
 
10.08.12
16:41
=) у меня незавоз кавычек
ИмяПКО = "Контрагенты_Кратко";
27 Цыпленок
 
10.08.12
16:46
йопт. ) щас проверю.