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


1С:Предприятие ::

Метки: 

Запись СФ

Я
   Валидатор
 
24.12.12 - 17:03
формирую СФ на основании документа, как сделать, чтобы СФ сразу записывалась, без вопроса, что типа записать не? делаю так:
РаботаСДиалогами.ВвестиСчетФактуру(Документ, Форма, "СчетФактураВыданный");
 
 
   Валидатор
 
1 - 24.12.12 - 17:11
и как в реализацию товаров и услуг в номер документа вставить свой номер, причем так, чтобы он формировал типовым механизмом: МР0000001, и плюс мой еще номер, то есть
Номер = 15;
Номердокумента: МР0000000115 м?
   Eugene_life
 
2 - 24.12.12 - 17:16
(1) А следующий номер должен быть каким? МР000...226?
   sidalexsandr
 
3 - 24.12.12 - 17:17
Вопрос выдает тебе Процедура "Вопрос". Поиши и когда найдеш
напиши
Если Не СФ Тогда
     Вопрос(записать не?);
КонецЕсли;
   Валидатор
 
4 - 24.12.12 - 17:25
(2) Номер - в эту переменную передаются значения из Таблицы значений, то есть их так много
   Serg_1960
 
5 - 24.12.12 - 17:30
(0) Это вопрос на знание типовой конфигурации - посмотри алгоритм, не ленись, полезно будет.
(1) Никак. С "...чтобы он формировал типовым механизмом" - никак. Такой "номер" с номером автонумерации не осилить - заглючит.
   Eugene_life
 
6 - 24.12.12 - 17:31
(2) Тебе лучше отказаться от автоматической нумерации совсем, генерировать и присваивать свой номер. Соответственно, проверять на уникальность - тоже самому
   Валидатор
 
7 - 25.12.12 - 10:36
а разве нельзя просто добавить мой номер к автоматически генерируемому?
   Cube
 
8 - 25.12.12 - 10:37
(7) Нет. Или номер автоматически или вручную. Выбор за тобой.
   Prikum
 
9 - 25.12.12 - 10:38
(7) Добавить то можно, вот только зачем?
   Валидатор
 
10 - 25.12.12 - 10:41
ну клиент так хочет, в общем объясняю сначала, есть обработка, которая загружает данные из файла екселя в 1ску, формируя на основании загруженных данных документы и СФ, номер документа понятное дело формируется автоматически, но в екселевском файле тоже есть номер документа, который мне так же нужно загрузить в создаваемые документы в 1С. НО есть 5 документов в экселевском файле с одинаковыми номерами, то есть, если я в номер документа в 1С буду ставить номер документа из екселя, то будет ошибка, мол номера одинаковые, поэтому и нужно сделать, чтобы номер формировался сначала сам, а потом добавлялся номер моего документа из эекселя, как то так)
 
 Рекламное место пустует
   Cube
 
11 - 25.12.12 - 10:43
(10) Что за бред... СФ входящие или исходящие?
   Валидатор
 
12 - 25.12.12 - 10:43
входящие
   Prikum
 
13 - 25.12.12 - 10:44
(10) используй префикс, а в принципе в (11) сказал правильно, что за бред!
   Cube
 
14 - 25.12.12 - 10:44
(12) У входящих СФ есть реквизит "ВходящийНомер" вот туда и пиши номер, указанный на СФ, а номер документа в 1С не трогай - он внутренний.
   Prikum
 
15 - 25.12.12 - 10:44
(12) для входящих можно указать 2 номера, один из которых будет формироватся автоматически
   Валидатор
 
16 - 25.12.12 - 10:47
Так номер входящего СФ формируется на основании номера документа, для которого мы сф делаем так ведь? или входящий номер в сф это другой реквизит? не могу в бгу найти его
   Cube
 
17 - 25.12.12 - 10:48
(16) Это другой реквизит
   Валидатор
 
18 - 25.12.12 - 10:50
(17) даже если так, номер документа все равно получается останется КПФ00001 к примеру? ну то есть как он автоматически был сгенерирован?
   Cube
 
19 - 25.12.12 - 10:51
   Cube
 
20 - 25.12.12 - 10:52
(18) Да, номер документа ты не трогай, пусть формируется автоматически.
   Валидатор
 
21 - 25.12.12 - 10:54
(20) как клиенту объяснить, что в номер документа не нужно добавлять его номер документа(из екселевского файла)?)
   Cube
 
22 - 25.12.12 - 10:59
(21) А что тут объяснять? Задай им вопрос - ЗАЧЕМ? Они же в код контрагента не пихают ИНН, а могли бы, с таким подходом-то...
   Валидатор
 
23 - 25.12.12 - 11:02
угу, тогда еще вопрос: у меня в экселевском файле:
НомерДокумента       Номенклатура          Цена и т.д.
1                     Гвоздь               15 ----
1                     Орех                 20
1                     молоко               10
2                      самолет             55
2                     вертолет             50

и так далее, так вот, когда номер документа один и тот же, то есть 1 к примеру, для него создается 1 документ, и в Тч этого документа пихаются 3 соответствующие номенклатуры, для номера документа 2 свой документ и так далее. Как открыть созданные документы после того как они полностью заполнятся? потому что сейчас они просто мерцают заполняясь, и в итоге открывается несколько документов, в которых по 1-2 записи, вместо 20 к примеру, но когда я открываю те же документы из Операции-Документы-Реализация, то там в ТЧ имеется нужное количество номенклатур
   Cube
 
24 - 25.12.12 - 11:05
(23) Я не знаю, чего ты там наворотил в коде, что у тебя всё мерцает (новый год что ли?)), но я бы формировал документы, не показывая их пользователю до окончания работы обработки, а по окончании работы открыл (если требуется).
   Валидатор
 
25 - 25.12.12 - 11:07
(24) вот если все документы создаются в цикле, как мне потом каждый из документов, что были сформированы моей обработкой открыть?
   Валидатор
 
26 - 25.12.12 - 11:10
то есть открытие всех документов за дату, в которую они формировались или как?
   Cube
 
27 - 25.12.12 - 11:10
(25) Запомнить ссылки на документы (или вообще сами объекты) в массиве, а потом его перебрать?
   Валидатор
 
28 - 25.12.12 - 11:11
Для каждого строчка из ТаблицаЗначений Цикл
        
        строчка.НомерДокумента =  СтрЗаменить(строчка.НомерДокумента, Символы.НПП, "");
        
        Если строчка.НомерДокумента = СтарыйНомерДокумента Тогда
            
            Если ПоНаименованиюТов = Истина Тогда
                
                Если Не ЗначениеЗаполнено(НаименованиеТовара) Тогда
                    Сообщить("поиск по наименованию товара не возможен, укажите на вкладке <Настройка форматов> колонку для загрузки наименований товаров");
                    Возврат;
                КонецЕсли;
                
                НоменклатураПоискПоНаименованию = Справочники.Номенклатура.НайтиПоНаименованию(строчка.НаименованиеНоменклатуры);
                
                Если НоменклатураПоискПоНаименованию = Справочники.Номенклатура.ПустаяСсылка() Тогда
                    
                    Если РазрешитьСоздание = Истина Тогда
                        НоменклатураПоискПоНаименованию = СоздатьНоменклатуру(строчка.КодНоменклатуры, строчка.НаименованиеНоменклатуры, ГруппаТоваровНов);
                        НоменклатураПоискПоНаименованию = НоменклатураПоискПоНаименованию.Ссылка;    
                    КонецЕсли;
                    
                КонецЕсли;
                
                НоваяСтрока = Документ.Товары.Добавить();
                НоваяСтрока.Номенклатура = НоменклатураПоискПоНаименованию;
                НоваяСтрока.Количество = строчка.Количество;
                НоваяСтрока.Цена = строчка.Цена;
                НоваяСтрока.СтавкаНДС = строчка.СтавкаНДС;
                НоваяСтрока.Сумма = строчка.Сумма;
                НоваяСтрока.СуммаНДС = строчка.СуммаНДС;
                
                
            ИначеЕсли ПоНаименованиюТов = Ложь Тогда
                
                Если Не ЗначениеЗаполнено(КодТовара) Тогда
                    Сообщить("поиск по коду товара не возможен, укажите на вкладке <Настройка форматов> колонку для загрузки кода товар");
                    Возврат;
                КонецЕсли;
                
                строчка.КодНоменклатуры =  СтрЗаменить(строчка.КодНоменклатуры, Символы.НПП, "");
                НоменклатураПоискПоКоду = Справочники.Номенклатура.НайтиПоКоду(строчка.КодНоменклатуры);
                
                Если НоменклатураПоискПоКоду = Справочники.Номенклатура.ПустаяСсылка() Тогда
                    
                    Если РазрешитьСоздание = Истина Тогда
                        НоменклатураПоискПоКоду = СоздатьНоменклатуру(строчка.КодНоменклатуры, строчка.НаименованиеНоменклатуры, ГруппаТоваровНов);            
                        НоменклатураПоискПоКоду = НоменклатураПоискПоКоду.Ссылка;
                    КонецЕсли;
                    
                КонецЕсли;
                
                НоваяСтрока = Документ.Товары.Добавить();
                НоваяСтрока.Номенклатура = НоменклатураПоискПоКоду;
                НоваяСтрока.Количество = строчка.Количество;
                НоваяСтрока.Цена = строчка.Цена;
                НоваяСтрока.СтавкаНДС = строчка.СтавкаНДС;
                НоваяСтрока.Сумма = строчка.Сумма;
                НоваяСтрока.СуммаНДС = строчка.СуммаНДС;
                
            КонецЕсли;
            
            Для каждого стр ИЗ Документ.Товары  Цикл
                ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(стр, Документ);
                СчетаУчета = БухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(Организация, Стр.Номенклатура, выбСклад); 
                ЭтоКомиссия = (выбДоговор.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером); 
                МетаданныеДока = Документ.Метаданные(); 
                ЗаполнитьСчета(Стр, "Товары", СчетаУчета, Истина, ЭтоКомиссия, МетаданныеДока);
            КонецЦикла;
            
            Попытка
                Документ.Записать();
                Форма = Документ.ПолучитьФорму();
                ВвестиСчетФактуру(Документ, Форма, "СчетФактураВыданный");                
            Исключение
                Сообщить(ОписаниеОшибки());
            КонецПопытки;
            
            
        Иначе
            Документ = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
            СтарыйНомерДокумента = строчка.НомерДокумента;
            Документ.Комментарий = "Загружено из Excel, номер документа" + " " + строчка.НомерДокумента;
            Документ.Дата = ВыбДата;
            Документ.Организация = Организация;
            Документ.Контрагент = выбКонтрагент;
            
            СтруктураРеквизитовДокумента = Ценообразование.ПолучитьСтруктуруРеквизитовДокументаДляЦенообразования(Документ);
            Документ.ДоговорКонтрагента = ВыбДоговор;
            Документ.ТипЦен = ВыбДоговор.ТипЦен.Наименование;
            Документ.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.Автоматически; 
            
            Документ.ВалютаДокумента = ВыбДоговор.ВалютаВзаиморасчетов.Наименование;
            Документ.Склад = ВыбСклад;
            Цена = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(Цена, ВалютаЦены, Документ.ВалютаДокумента, ЗаполнениеДокументов.КурсДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета), ЗаполнениеДокументов.КратностьДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета), ВыбДата);
            
            Если ЭлементыФормы.УчитыватьНДС.Значение = Истина Тогда
                Документ.УчитыватьНДС = Истина;
            КонецЕсли;
            
            Если ЭлементыФормы.СуммаВключаетНДС.Значение = Истина Тогда
                Документ.СуммаВключаетНДС = Истина;    
            КонецЕсли;
                        
            Если ПоНаименованиюТов = Истина Тогда
                
                Если Не ЗначениеЗаполнено(НаименованиеТовара) Тогда
                    Сообщить("поиск по наименованию товара не возможен, укажите на вкладке <Настройка форматов> колонку для загрузки наименований товаров");
                    Возврат;
                КонецЕсли;
                
                НоменклатураПоискПоНаименованию = Справочники.Номенклатура.НайтиПоНаименованию(строчка.НаименованиеНоменклатуры);
                
                Если НоменклатураПоискПоНаименованию = Справочники.Номенклатура.ПустаяСсылка() Тогда
                    
                    Если РазрешитьСоздание = Истина Тогда
                        НоменклатураПоискПоНаименованию = СоздатьНоменклатуру(строчка.КодНоменклатуры, строчка.НаименованиеНоменклатуры, ГруппаТоваровНов);
                        НоменклатураПоискПоНаименованию = НоменклатураПоискПоНаименованию.Ссылка;    
                    КонецЕсли;
                    
                КонецЕсли;
                
                НоваяСтрока = Документ.Товары.Добавить();
                НоваяСтрока.Номенклатура = НоменклатураПоискПоНаименованию;
                НоваяСтрока.Количество = строчка.Количество;
                НоваяСтрока.Цена = строчка.Цена;
                НоваяСтрока.СтавкаНДС = строчка.СтавкаНДС;
                НоваяСтрока.Сумма = строчка.Сумма;
                НоваяСтрока.СуммаНДС = строчка.СуммаНДС;
                
            ИначеЕсли ПоНаименованиюТов = Ложь Тогда
                
                Если Не ЗначениеЗаполнено(КодТовара) Тогда
                    Сообщить("поиск по коду товара не возможен, укажите на вкладке <Настройка форматов> колонку для загрузки кода товар");
                    Возврат;
                КонецЕсли;
                
                строчка.КодНоменклатуры =  СтрЗаменить(строчка.КодНоменклатуры, Символы.НПП, "");
                НоменклатураПоискПоКоду = Справочники.Номенклатура.НайтиПоКоду(строчка.КодНоменклатуры);
                
                Если НоменклатураПоискПоКоду = Справочники.Номенклатура.ПустаяСсылка() Тогда
                    
                    Если РазрешитьСоздание = Истина Тогда
                        НоменклатураПоискПоКоду = СоздатьНоменклатуру(строчка.КодНоменклатуры, строчка.НаименованиеНоменклатуры, ГруппаТоваровНов);            
                        НоменклатураПоискПоКоду = НоменклатураПоискПоКоду.Ссылка;
                    КонецЕсли;
                    
                КонецЕсли;
                
                НоваяСтрока = Документ.Товары.Добавить();
                НоваяСтрока.Номенклатура = НоменклатураПоискПоКоду;
                НоваяСтрока.Количество = строчка.Количество;
                НоваяСтрока.Цена = строчка.Цена;
                НоваяСтрока.СтавкаНДС = строчка.СтавкаНДС;
                НоваяСтрока.Сумма = строчка.Сумма;
                НоваяСтрока.СуммаНДС = строчка.СуммаНДС;
                
            КонецЕсли;
        КонецЕсли;
        
        
        Для каждого стр ИЗ Документ.Товары  Цикл
            ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(стр, Документ);
            СчетаУчета = БухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(Организация, Стр.Номенклатура, выбСклад); 
            ЭтоКомиссия = (выбДоговор.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером); 
            МетаданныеДока = Документ.Метаданные(); 
            ЗаполнитьСчета(Стр, "Товары", СчетаУчета, Истина, ЭтоКомиссия, МетаданныеДока);
        КонецЦикла;
        
        Попытка
            Документ.Записать();
            Форма = Документ.ПолучитьФорму();
            ВвестиСчетФактуру(Документ, Форма, "СчетФактураВыданный");
           //ОткрытьЗначение(Документ.Ссылка);
 
            
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
        
    КонецЦикла;
вот процедура создания документов
   Валидатор
 
29 - 25.12.12 - 11:12
документы записываются в переменную Документ, а дальше как?
   Cube
 
30 - 25.12.12 - 11:17
(29) Всё не читал, но, примерно, так:

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

КонецЦикла;

Для Каждого ТекДокумент Из МассивДокументов Цикл
    ОткрытьЗначение(ТекДокумент);
КонецЦикла;
   Валидатор
 
31 - 25.12.12 - 11:26
(30) но у меня может заполняться ТЧ документа 2мя номенклатурами, документ запишется, потом создастся другой документ, заполнится так же, потом найдется номенклатура, которую нужно вставить опять в первый документ, то будут открываться куча документов, в которые потом добавлялись данные
   Cube
 
32 - 25.12.12 - 11:29
(31) А что, сам думать вообще не хочешь? Ну возьми вместо массива таблицу значений, потом свернешь её или проверяй, добавлял ты в массив такой документ или нет...
   Валидатор
 
33 - 25.12.12 - 11:29
сделал просто проверку и все, вроде работает, спс
 
 
   Валидатор
 
34 - 25.12.12 - 11:41
(32) только когда срабатывает ОткрытьЗначение, вылетает окошко с надписью Номенклатура, нажимаем ок, и все дальше открывается уже нормально, вот как избавиться от этого окошка?
   Валидатор
 
35 - 25.12.12 - 12:11
все, разобрался, ошибка была в синтаксисе)



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