Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите написать обработку
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
wmatik
1С Предприятие 7.7(сетевая версия) - 7.70.027
Конфигурация: Производство-Услуги-Бухгалтерия для Украины(7.70.010)
Подскажите, как сформировать обработку. В общем ситуация следующая: есть документы ПриходнаяНакладнаяЗапасы и ПриходнаяНакладнаяГТД, в табличной части добавился реквизит - КодДК. Этот код вводится в справочнике КодыПоКлассификатору и В приходные накладные он подставляется автоматом из справочника ТМЦ (в этом справочнике каждому тмц присвоен код ДК). Необходимо чтобы все документы с начала года заполнились этим кодом ДК. Как это сделать вообще не представляю, обработок никогда не писала. Спасибо за помощь
-=VJ=-
Цитата(wmatik @ 08.06.11, 18:49) необходимо зарегистрироваться для просмотра ссылки
обработок никогда не писала. Спасибо за помощь


В стол заказов, если никогда не писали. Иначе придется тут писать её за вас.

Сама обработка на десять строк
1. Перебираем документы
2. Перебираем строки
3. Присваиваем нужное значение и сохраняем документ.
wmatik
спасибо за наводку, буду пробовать
wmatik
Процедура Выполнить()
    Док=СоздатьОбъект("Документ");
    Док.ВыбратьДокументы(НачальнаяДата,КонечнаяДата);
    Пока Док.ПолучитьДокумент()=1 Цикл
        Если (Док.Вид() = "ПриходнаяНакладнаяЗапасы") ИЛИ
        (Док.Вид() = "ПриходнаяНакладнаяПрочие") ИЛИ
        (Док.Вид() = "ПриходнаяНакладнаяГТД") Тогда
        Док.ВыбратьСтроки();
            Пока Док.ПолучитьСтроку() = 1 Цикл
                Если ПустоеЗначение(Док.КодДК) = 1 Тогда
                    Док.КодДК=док.Номенклатура.КодДК;
                КонецЕсли;
                ГлПользователь=Автор;
            КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Так?
5_kopeek
Цитата(wmatik @ 08.06.11, 22:13) необходимо зарегистрироваться для просмотра ссылки
Процедура Выполнить()
    Док=СоздатьОбъект("Документ");
    Док.ВыбратьДокументы(НачальнаяДата,КонечнаяДата);
    Пока Док.ПолучитьДокумент()=1 Цикл
        Если (Док.Вид() = "ПриходнаяНакладнаяЗапасы") ИЛИ
        (Док.Вид() = "ПриходнаяНакладнаяПрочие") ИЛИ
        (Док.Вид() = "ПриходнаяНакладнаяГТД") Тогда
        Док.ВыбратьСтроки();
            Пока Док.ПолучитьСтроку() = 1 Цикл
                Если ПустоеЗначение(Док.КодДК) = 1 Тогда
                    Док.КодДК=док.Номенклатура.КодДК;
                КонецЕсли;
                ГлПользователь=Автор;
            КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Так?

Похоже. Только не забудьте документ записать и провести. Помните, что после перепроведения документов могут измениться итоги по счетам и регистрам, поэтому стоит экспериментировать на копии, после чего сравнить полученные данные с рабочей базой.
wmatik
А какое отношение счета имеют к кодам, они ведь не связаны?
И еще вопросик, создала обработку, на форму кинула выбор даты и все, кликаю выполнить и ничего не происходит, как так?)
5_kopeek
Цитата(wmatik @ 08.06.11, 22:23) необходимо зарегистрироваться для просмотра ссылки
А какое отношение счета имеют к кодам, они ведь не связаны?

Вы будете перепроводить документы, которые формируют проводки. Проводки влияют на итоги по счетам.
Цитата(wmatik @ 08.06.11, 22:23) необходимо зарегистрироваться для просмотра ссылки
И еще вопросик, создала обработку, на форму кинула выбор даты и все, кликаю выполнить и ничего не происходит, как так?)

Вы добавили в код запись и проведение документов, в которых Вы изменяете реквизит?
И в кнопке, по которой Вы кликаете, в строке формула указано Выполнить()?
А в конце Вашего кода перед КонецПроцедуры() добавьте строку
Предупреждение("Обработка завершена!");

для визуального обозначения завершения работы программы.
wmatik
Процедура Выполнить()
    Док=СоздатьОбъект("Документ");
    Док.ВыбратьДокументы(НачДата,КонДата);
    Пока Док.ПолучитьДокумент()=1 Цикл
        Если (Док.Вид() = "ПриходнаяНакладнаяЗапасы") ИЛИ
        (Док.Вид() = "ПриходнаяНакладнаяПрочие") ИЛИ
        (Док.Вид() = "ПриходнаяНакладнаяГТД") Тогда
        Док.ВыбратьСтроки();
            Пока Док.ПолучитьСтроку() = 1 Цикл
                Если ПустоеЗначение(Док.КодДК) = 1 Тогда
                    Док.КодДК=Док.ТМЦ.КодДК;
                КонецЕсли;
                ГлПользователь=Док.Автор;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    Док.Записать();
    Док.Провести();
Предупреждение("Обработка завершена!");
КонецПроцедуры
5_kopeek
И?
wmatik
Ничего не происходит с документами) КодДК не появляется
5_kopeek
Недосмотрела. Так надо:
Процедура Выполнить()
    Док=СоздатьОбъект("Документ");
    Док.ВыбратьДокументы(НачДата,КонДата);
    Пока Док.ПолучитьДокумент()=1 Цикл
    Если (Док.Вид() = "ПриходнаяНакладнаяЗапасы") ИЛИ
        (Док.Вид() = "ПриходнаяНакладнаяПрочие") ИЛИ
        (Док.Вид() = "ПриходнаяНакладнаяГТД") Тогда
        Док.ВыбратьСтроки();
            Пока Док.ПолучитьСтроку() = 1 Цикл
                Если ПустоеЗначение(Док.КодДК) = 1 Тогда
                    Док.КодДК=Док.ТМЦ.КодДК;
                КонецЕсли;
                ГлПользователь=Док.Автор;
            КонецЦикла;
        Док.Записать();
        Док.Провести();
    КонецЕсли;
КонецЦикла;

Предупреждение("Обработка завершена!");
КонецПроцедуры
wmatik
Когда запустила Обработку непонятно почему идет перепроведение не только приходных доков но и других
5_kopeek
Выложите сообщения, котрые выдаст обработка:
Процедура Выполнить()
    Док=СоздатьОбъект("Документ");
    Док.ВыбратьДокументы(НачДата,КонДата);
    Пока Док.ПолучитьДокумент()=1 Цикл
        Если (Док.Вид() = "ПриходнаяНакладная") ИЛИ
        (Док.Вид() = "ПриходнаяНакладнаяПрочие") ИЛИ
        (Док.Вид() = "ПриходнаяНакладнаяГТД") Тогда
            Сообщить("Обрабатываю документ "+Док.ТекущийДокумент());
            Док.ВыбратьСтроки();
            Пока Док.ПолучитьСтроку() = 1 Цикл  
                Сообщить("___ В строке "+Док.НомерСтроки+" КодДк="+Док.КодДК);
                Если ПустоеЗначение(Док.КодДК) = 1 Тогда
                    Док.КодДК=Док.ТМЦ.КодДК;
                    Сообщить("_________ Устанавливаем в строке "+Док.НомерСтроки+" КодДк="+Док.ТМЦ.КодДК);
                КонецЕсли;
                ГлПользователь=Док.Автор;
            КонецЦикла;
            Док.Записать();
            Док.Провести();
            Док.ВыбратьСтроки();
            Пока Док.ПолучитьСтроку()=1 Цикл
                Сообщить("___ После изменения в строке "+Док.НомерСтроки+" КодДк="+Док.КодДК);
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    Предупреждение("Обработка завершена!");  
КонецПроцедуры
wmatik
Извините,что вчера не ответила, инет дома отключили. Я еще добавила для вывода одно поле(ПредметЗакупки).Вот такие сообщения выводит. Проверила документы, проводит. Заполняет код и его наименование и все, больше ни на что не влият. Вы говорили что со счетами может что-то случиться, где это посмотреть?
igmig65
Цитата
Вы говорили что со счетами может что-то случиться, где это посмотреть?

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

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