Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Как забить субконто значениями в обработке

Как забить субконто значениями в обработке
Я
   andron81_81
 
07.12.18 - 11:59
собственно сама проблема:  не выходит присвоить суб. конто
Есть документ называется операции по 002. фактически это велосипед сделанный по образцу типового "Операция (бухгалтерский и налоговый учет)" с той лишь разницей , что этот велосипед заточен под 002.
форма документа представляет собой таб. поле которое ассоциировано с "Движения.Хозрасчетный".

Пытаюсь из екселя набить данными таб. часть формы и провести документ.
пытаюсь при помощи вот такого кода (упростил задачу - пытаюсь пробить константу в одну из суб. конто) :

Процедура ОбработатьНажатие(Элемент)

    
    Эксель = Новый COMОбъект("Excel.Application");
// Открытие книги

Книга = Эксель.Workbooks.Open("D:\тест.xlsx");
// Позиционирование на нужном листе

Лист = Книга.Worksheets(1);

НовыйДокумент = Документы.WОперацияБух002.СоздатьДокумент();  //ДокументРасчетовСКонтрагентом.СоздатьДокумент();




КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;
Для НомерСтроки = 1 По КоличествоСтрок Цикл
    НоваяСтрокаВРегистре=НовыйДокумент.Движения.Хозрасчетный.Добавить();
    НоваяСтрокаВРегистре.СчетДт= ПланыСчетов.Хозрасчетный.НайтиПоКоду("002");
    НоваяСтрокаВРегистре.Период =  ТекущаяДата();
    Для НомерКолонки = 1 По 3 Цикл
   ЗначениеЯчейки = Лист.Cells(НомерСтроки, НомерКолонки).Value;
   
   НоваяСтрокаВРегистре.СубконтоДт.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("100 загадок-100 отгадок");
    КонецЦикла;

КонецЦикла;
НовыйДокумент.Дата=ТекущаяДата();
НовыйДокумент.Записать(РежимЗаписиДокумента.Запись );

// Закрытие книги

Книга.Close(0);

// Закрытие Эксель и освобождение памяти

Эксель.Quit();
Эксель = 0;
    
КонецПроцедуры
 

строка 
   НоваяСтрокаВРегистре.СубконтоДт.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("100 загадок-100 отгадок");

не ведёт ни к какому действию

строка хоть по мне и абсурдна вызывает ошибку 
   НоваяСтрокаВРегистре.СубконтоДт = Справочники.Номенклатура.НайтиПоНаименованию("100 загадок-100 отгадок");
 
 
   shuhard
 
1 - 07.12.18 - 12:03
(0) в общих модулях есть процедура УстановитьСубконто
прямое призвоение не работет
   unregistered
 
2 - 07.12.18 - 12:23
(0) Субконто - это соответствие, в качестве ключа - элементы ПВХ ВидыСубконтоХозрасчетные. Чтобы установить значение надо использовать метод Вставить.

Вставить
Синтаксис:
Вставить(<Ключ>, <Значение>)
Параметры:
<Ключ> (обязательный)
Тип: Произвольный.
Ключ устанавливаемого элемента. 
<Значение> (необязательный)
Тип: Произвольный.
Значение устанавливаемого элемента. Если не указан, будет установлено Неопределено.
Описание:
Устанавливает значение элемента соответствия по ключу. Если элемент с переданным значением ключа существует, то его значение заменяется, в противном случае добавляется новый элемент.
   unregistered
 
3 - 07.12.18 - 12:26
А вообще ересь несусветная.
Надеюсь, всё описанное в (0) - это просто эксперименты для самообучения.
   andron81_81
 
4 - 07.12.18 - 12:35
(3) да. в качестве обучения в том числе, но надо сделать. а почему ересь несусветная ? поясните , пожалуйста.
   Вафель
 
5 - 07.12.18 - 12:38
СубконтоДт[ПланыВидовХарактеристик.СубконтоХозрасчетные.Номенклатура] = Номенклатура
   Дмитрий
 
6 - 07.12.18 - 12:41
зачем цикл с 1 по 3? (3)
   Дмитрий
 
7 - 07.12.18 - 12:41
(6) не попал, хотел у (4) спросить
   catena
 
8 - 07.12.18 - 12:53
(6)В экселе три субконто, Номенклатуру в код в пихнул от бессилия уже. Это моя версия.
   andron81_81
 
9 - 07.12.18 - 12:53
(5) вот это работает !
   andron81_81
 
10 - 07.12.18 - 12:55
(8) нет, не совсем. для упрощения задачи , чтобы тут разъяснить. у меня сама суть не получалось в субконто пробить.
 
 Рекламное место пустует
   andron81_81
 
11 - 07.12.18 - 12:58
(6) цикл как бы да. не нужен на самом деле. Вы правы
   catena
 
12 - 07.12.18 - 13:52
(10)Установку субконто можно подсмотреть в модуле любого бух.документа. Ну, это вдруг еще какие-то вопросы с движениями будут.
   andron81_81
 
13 - 07.12.18 - 14:32
(12) да, спасибо.
вот это 
 
СубконтоДт[ПланыВидовХарактеристик.СубконтоХозрасчетные.Номенклатура] = Номенклатура

реально работает.
   unregistered
 
14 - 07.12.18 - 14:37
(4) > почему ересь несусветная ?

Да потому что подобные задачи, когда необходимо автоматизировать некую хозяйственную операцию, которую разработчик типовой конфигурации не автоматизировал, решаются тремя способами.
1. Создать отдельный документ, который выполняет требуемые движения. Подразумевается полноценный нормальный документ, умеющий делать проведение, отмену проведения и пр. и пр., а не суррогат типа "Операция (Б и НУ)".
2. Допилить какой-нибудь из существующих документов, который отражает соответствующую операцию. Этот вариант подходит, если уже есть похожий документ, который достаточно чуть подрихтовать.
3. Использовать ручную операцию (документ Операция). В этом варианте НЕ надо рисовать свой документ. Тут есть два пути.
а) Создать шаблон типовой операции
б) написать обработку заполнения (твой вариант).

Рисовать аналог документа Операция - и есть ересь несусветная.
   Eiffil123
 
15 - 07.12.18 - 15:32
(5) можно проще писать:

СубконтоДт.Номенклатура = Номенклатура
   andron81_81
 
16 - 07.12.18 - 16:17
(14) есть глав.бух который сказал пользоваться велосипедным документом (который разработала фирмачка некая). И попробуй ослушайся его... получишь скандал , а в конечном итоге выговор. она рулит всем!

а документ этот набивается  вручную. но можно составить екселовскую табличку и влить в него. чем я и занялся.
   andron81_81
 
17 - 07.12.18 - 16:18
решил вопрос оформить тут же. проблема в том , что документ создаётся , но не пишется в него ничего. если я сделаю не в цикле , то запишется - да. вопрос "почему" ? кто может что подсказать ?
    Процедура ОбработатьНажатие(Элемент)

    
    Эксель = Новый COMОбъект("Excel.Application");
// Открытие книги

Книга = Эксель.Workbooks.Open("D:\пп.xlsx");
// Позиционирование на нужном листе

Лист = Книга.Worksheets(1);

НовыйДокумент = Документы.WОперацияБух002.СоздатьДокумент();  //ДокументРасчетовСКонтрагентом.СоздатьДокумент();


НовыйДокумент.Дата=ТекущаяДата();




КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;
//НомерСтроки = 2;

Для НомерСтроки = 2 По КоличествоСтрок Цикл
    НоваяСтрокаВРегистре=НовыйДокумент.Движения.Хозрасчетный.Добавить();
    НоваяСтрокаВРегистре.СчетДт= ПланыСчетов.Хозрасчетный.НайтиПоКоду("002");
    НоваяСтрокаВРегистре.Период =  ТекущаяДата();
    НовыйДокумент.Организация=Справочники.Организации.НайтиПоНаименованию(Лист.Cells(НомерСтроки, 2).Value);
    
    
   КодКонтрагента = Лист.Cells(НомерСтроки, 3).Value;
   КодНоменклатуры = Формат(Лист.Cells(НомерСтроки, 5).Value,"ЧГ=0");
   
   НоваяСтрокаВРегистре.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты]  = Справочники.Контрагенты.НайтиПоКоду(КодКонтрагента);
   НоваяСтрокаВРегистре.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура ] = Справочники.Номенклатура.НайтиПоКоду(КодНоменклатуры);
   

КонецЦикла;

НовыйДокумент.Записать(РежимЗаписиДокумента.Запись );

Книга.Close(0);

// Закрытие Эксель и освобождение памяти

Эксель.Quit();
Эксель = 0;
    
КонецПроцедуры
   unregistered
 
18 - 07.12.18 - 16:39
(16) Беги оттуда.
Мало того, что бухгалтер - самодур, так еще и подрядчики, которых она нанимает на доработку - идиоты конченые.

PS Я понимаю когда новичок подобную *уйню *авнокодит, но вот чтобы нанятые на стороне спецы...
   unregistered
 
19 - 07.12.18 - 16:39
(17) > если я сделаю не в цикле , то запишется.

Странно. Вроде как не должно.
   unregistered
 
20 - 07.12.18 - 16:50
НовыйДокумент = Документы.WОперацияБух002.СоздатьДокумент();
 НовыйДокумент.Дата = ТекущаяДата();
 НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию(Лист.Cells(НомерСтроки, 2).Value);
 НовыйДокумент.Записать();
 КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;
 Проводки = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
 Проводки.Отбор.Регистратор.Установить(НовыйДокумент.Ссылка);
 Счет002 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("002");
 Для НомерСтроки = 2 По КоличествоСтрок Цикл
   Проводка = Проводки.Добавить();
   Проводка.СчетДт = Счет002;
   Проводка.Период = НовыйДокумент.Дата;
   Проводка.Организация = НовыйДОкумент.Организация;
   КодКонтрагента = Лист.Cells(НомерСтроки, 3).Value;
   КодНоменклатуры = Формат(Лист.Cells(НомерСтроки, 5).Value,"ЧГ=0");
   Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = Справочники.Контрагенты.НайтиПоКоду(КодКонтрагента);
   Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура ] = Справочники.Номенклатура.НайтиПоКоду(КодНоменклатуры);
 КонецЦикла;
 Проводки.Записать();
   unregistered
 
21 - 07.12.18 - 16:51
НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию(Лист.Cells(НомерСтроки, 2).Value);

поменять на 

 НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию(Лист.Cells(2, 2).Value);
   andron81_81
 
22 - 10.12.18 - 10:11
(18) город небольшой особо с под.лодки не убежишь. Да и опыта надо набраться - тогда , да - побегу с радостью.
   НастоящееИмя
 
23 - 10.12.18 - 10:25
Бесят, эти умники... беги оттуда..., ересь несусветная... Деньги, млять, всем нужны, кто где может и кто как может, тот так и зарабатывет.
Сидят, епт, советчики. Хорошо,хоть подсказали, а то бы какахами закидали и пост утонул.
   МимохожийОднако
 
24 - 10.12.18 - 10:36
(23) Купи себе новопассит ) ...бесят его...
   НастоящееИмя
 
25 - 10.12.18 - 10:39
(24) Не... ну а чё...?
   НастоящееИмя
 
26 - 10.12.18 - 10:39
)
   МимохожийОднако
 
27 - 10.12.18 - 10:42
(26) Понедельник у некоторых - день тяжёлый
   andron81_81
 
28 - 10.12.18 - 11:18
(20) не понимаю. Если цикл делаешь до КоличествоСтрок (а это 362), тогда документ сохраняется абсолютно пустым.
Если делаю до 3 - работает, когда делаю до 10 - работает. до 50 уже не рабатает.
Чудеса бывают ?
   unregistered
 
29 - 10.12.18 - 11:24
(28) > Чудеса бывают?

- Нет. Чудес не бывает.
Что-то делаешь не так.
Выкладывай код.
   andron81_81
 
30 - 10.12.18 - 11:51
(29)
это рабочий вариант, так как цикл до 10 . а если вместо десятки ставлю КоличествоСтрок , то документ пустой !
Я уже стал думать, что может с данными в екселе что-то не так , но тогда хорошо бы обругать наверно...

Процедура ОбработатьНажатие(Элемент)

    
    Эксель = Новый COMОбъект("Excel.Application");

Книга = Эксель.Workbooks.Open("D:\пп.xlsx");

Лист = Книга.Worksheets(1);



НовыйДокумент = Документы.WОперацияБух002.СоздатьДокумент();
 НовыйДокумент.Дата = ТекущаяДата();
 НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию(Лист.Cells(2, 2).Value);
 НовыйДокумент.Записать();
 КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;
 Проводки = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
 Проводки.Отбор.Регистратор.Установить(НовыйДокумент.Ссылка);
 Счет002 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("002");
 Для НомерСтроки = 2 По 10 Цикл
   Проводка = Проводки.Добавить();
   Проводка.СчетДт = Счет002;
   Проводка.Период = НовыйДокумент.Дата;
   Проводка.Организация = НовыйДОкумент.Организация;
   КодКонтрагента = Лист.Cells(НомерСтроки, 3).Value;
   КодНоменклатуры = Формат(Лист.Cells(НомерСтроки, 5).Value,"ЧГ=0");
   
   ДатаПеремещения  = Лист.Cells(НомерСтроки, 8).Value;
   НомерПеремещения = Лист.Cells(НомерСтроки, 7).Value; 
   ПартияПеремещение=Документы.ПеремещениеТоваров.НайтиПоНомеру(НомерПеремещения,ДатаПеремещения);
   
   ДатаЗаказаПокупателя  = Лист.Cells(НомерСтроки, 11).Value;
   НомерЗаказаПокупателя = Лист.Cells(НомерСтроки, 10).Value; 
   ЗаказаПокупателя=Документы.ЗаказПокупателя.НайтиПоНомеру(НомерЗаказаПокупателя , ДатаЗаказаПокупателя);

   
   Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.wЗаказПокупателя] = ПартияПеремещение;   
   Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = Справочники.Контрагенты.НайтиПоКоду(КодКонтрагента);
   Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура ] = Справочники.Номенклатура.НайтиПоКоду(КодНоменклатуры);
   Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.wЗаказ ] = ЗаказаПокупателя;
   Проводка.КоличествоДт =    Лист.Cells(НомерСтроки, 13).Value; 
 КонецЦикла;
 Проводки.Записать();


Книга.Close(0);


Эксель.Quit();
Эксель = 0;
    
КонецПроцедуры
   andron81_81
 
31 - 10.12.18 - 11:53
p.s. не тратьте время на пинки по поводу названий аналитик. это проектировал не я !

wЗаказПокупателя - это партия (документ перемещения)
wЗаказ - это документ заказ покупателя
   catena
 
32 - 10.12.18 - 11:56
Что говорит отладчик по содержимому Проводки перед .Записать()?
   andron81_81
 
33 - 10.12.18 - 11:59
(32) ща прозвоню.
 
 
   andron81_81
 
34 - 10.12.18 - 12:06
(32)
не знаю где там подсказка на наш вопрос:

https://hkar.ru/WzaU
   unregistered
 
35 - 10.12.18 - 12:08
У вас там еще и 4 субконто... Жесть какая.
Ну да фиг с ним.

Варианты следующие.
Первый. Пытаетесь записать набор записей, содержащий что-то противоестественное (например, Организация в проводках не соответствует Организации в документе).
Второй. Проводки есть, но вы их не видите в документе (условное оформление или что-то типа этого).
Третий. Есть какой-то программный код, например, в подписке перед записью НабораЗаписей который молча что-то выполняет, очищая набор записей.
Четвертый. В (30) приведён не весь код и что-то ещё выполняется, что приводит к результату.
   catena
 
36 - 10.12.18 - 12:11
(34)Встать на верхнюю строчку и нажать карандашик.
   andron81_81
 
37 - 10.12.18 - 12:33
(35) там сам документ ещё что-то чудит. если "прозванивать" записать(). Видимо в событии при записи какие-то коды надобно выполнить.
Ладно...
Сейчас по каким-то причинам стало работать для всех строк таблицы. сейчас ещё сформирую екселовский документ и повторю попытку. отпишусь.
   andron81_81
 
38 - 10.12.18 - 14:16
(35) работает .
самый последний вопрос ))

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

КодКонтрагента = СтрЗаменить(Лист.Cells(НомерСтроки, 3).Value, "'", ""));
   andron81_81
 
39 - 10.12.18 - 14:18
(38) то есть не апостроф, а одинарная ковычка.
   andron81_81
 
40 - 10.12.18 - 14:37
(39) а , всё не надо.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует